实验设计目标
- 使用case语句设计实现自定义数据位宽的4选1数据选择器。
- 通过此实验初步掌握case语句的使用方法。
- 通过此实验初步掌握参数(parameter)型常数的定义方法和使用方法。
实验设计思路
数据选择器又称多路转换器或称多路开关,其功能是根据地址码的不同,从多个输入数据流中选择一个送往公共的输出端。根据数据输入端的个数的不同,可分为16选1、8选1、4选1等数据选择器。
本实验设计使用case语句实现4选1数据选择器功能,包含4个数据输入端D3~D0,2个地址输入端A1~A0,一个输入使能控制端CSn和一个数据输出端Y。当CSn为低电平时允许数据选择器工作;每组输入信号(D3~D0)的数据位宽是可自定义的,因按键开关个数限制,在验证实验时将其位宽定为1位。表4.1给出了对应的真值表。
表4.1 4选1数据选择器真值表
功能模块图与输入输出引脚说明
数据选择器工程包含顶层模块mux41与底层模块mux41_module,图4.1是整个工程的模块功能图。下面介绍一下各主要引脚的功能:
图4.1 数据选择器模块功能图
- Width:数据位宽,在程序中定义,不属于输入输出信号。实验时,将width定为1,即每组输入信号和输出端信号的位宽都为1位。
- CSn:输入使能控制信号,低电平有效,连接在SW_In[2]。当CSn=0时,允许数据选择器工作;当CSn=1时,禁止数据选择器工作。
- SW_In[1:0]:拨动开关输入,共有两位。SW_In[1:0]分别连接“数据选择器”的地址输入信号A1~A0,用于地址选择。
- Data_In[3:0]:“数据选择器”的数据输入信号D[3:0],连接到拨动开关SW_In[7:4]。
- LED_Out:输出到LED灯,共有八位。LED_Out0连接“数据选择器”的数据输出端Y,通过LED灯的亮灭情况来显示结果。LED_Out[7:1]输出恒定低电平。
程序设计
图4.2是截取自底层模块mux41_module的部分代码:
图4.2 数据选择器实验核心代码
○ 5-8:输入输出信号声明。
○ 12:敏感事件程序清单中的* 号将自动包含always块中的语句或条件表达式中的所有信号,也可直接写always @ ( A or CSn )。
○ 15-20:使用case语句实现数据选择,选择方式请参考真值表4.4。
○ 21:当使能控制信号CSn=1时,数据选择器不工作,输出恒为0。
FPGA管脚配置
以下是Anlogic FPGA的IO Constraint,输入控制使能信号CSn与Anlogic_FPGA开发板上SW2相连;SW_In[1:0] 分别与开发板上的SW1~SW0相连;Data_In0~ Data_In3分别与开发板上的SW4~SW7相连;LED_Out[0]与开发板上的LED0相连。
set_pin_assignment { CSn } { LOCATION = B10; IOSTANDARD = LVCMOS33; }
set_pin_assignment { Data_In0 } { LOCATION = A12; IOSTANDARD = LVCMOS33; }
set_pin_assignment { Data_In1 } { LOCATION = B12; IOSTANDARD = LVCMOS33; }
set_pin_assignment { Data_In2 } { LOCATION = A13; IOSTANDARD = LVCMOS33; }
set_pin_assignment { Data_In3 } { LOCATION = A14; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[0] } { LOCATION = B14; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[1] } { LOCATION = B15; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[2] } { LOCATION = B16; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[3] } { LOCATION = C15; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[4] } { LOCATION = C16; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[5] } { LOCATION = E13; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[6] } { LOCATION = E16; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[7] } { LOCATION = F16; IOSTANDARD = LVCMOS33; }
set_pin_assignment { Sw_In[0] } { LOCATION = A9; IOSTANDARD = LVCMOS33; }
set_pin_assignment { Sw_In[1] } { LOCATION = A10; IOSTANDARD = LVCMOS33; }
图4.3 数据选择器IO Constraint
实验结果
当拨动开关SW2拨至“DOWN”,且SW1~SW0均拨至“UP”,选中输入SW7,此时LED0输出SW7的状态,当拨下SW7时,LED0灭,反之则亮。具体实验现象请参照真值表4.1自行验证。
实验小结
- if语句必须包含在一个always块中,always块中的语句按它们出现的顺序执行。
- 用parameter来定义一个标识符代表一个常量,称为符号常量,即标识符形式的常量,采用符号常量可提高程序的可读性和可维护性。
END
文章来源:https://www.yuque.com/yingmuketang/01/rlul0u
推荐内容
- 【安路 EG4S20 版本】基础板卡信息及使用教程:芯片和板卡简介
- 【安路 EG4S20 版本】基础板卡信息及使用教程:第一工程
- 【安路 EG4S20 版本】基础板卡信息及使用教程:使用ChipWatcher
- 【安路 EG4S20 版本】基础板卡信息及使用教程:使用Modelsim
- 【安路 EG4S20 版本】基础实验设计与实现:实验1 流水灯
- 【安路 EG4S20 版本】基础实验设计与实现:实验2 集成逻辑门及其基本应用
- 【安路 EG4S20 版本】基础实验设计与实现:实验3 译码器 编码器
更多内容请关注走进FPGA专栏