下冰雹 · 2022年03月05日

【安路 EG4S20 版本】基础实验设计与实现:实验4 数据选择器

实验设计目标

  1. 使用case语句设计实现自定义数据位宽的4选1数据选择器。
  2. 通过此实验初步掌握case语句的使用方法。
  3. 通过此实验初步掌握参数(parameter)型常数的定义方法和使用方法。

实验设计思路

数据选择器又称多路转换器或称多路开关,其功能是根据地址码的不同,从多个输入数据流中选择一个送往公共的输出端。根据数据输入端的个数的不同,可分为16选1、8选1、4选1等数据选择器。
本实验设计使用case语句实现4选1数据选择器功能,包含4个数据输入端D3~D0,2个地址输入端A1~A0,一个输入使能控制端CSn和一个数据输出端Y。当CSn为低电平时允许数据选择器工作;每组输入信号(D3~D0)的数据位宽是可自定义的,因按键开关个数限制,在验证实验时将其位宽定为1位。表4.1给出了对应的真值表。
image.png
表4.1 4选1数据选择器真值表

功能模块图与输入输出引脚说明

数据选择器工程包含顶层模块mux41与底层模块mux41_module,图4.1是整个工程的模块功能图。下面介绍一下各主要引脚的功能:
image.png
图4.1 数据选择器模块功能图

  1. Width:数据位宽,在程序中定义,不属于输入输出信号。实验时,将width定为1,即每组输入信号和输出端信号的位宽都为1位。
  2. CSn:输入使能控制信号,低电平有效,连接在SW_In[2]。当CSn=0时,允许数据选择器工作;当CSn=1时,禁止数据选择器工作。
  3. SW_In[1:0]:拨动开关输入,共有两位。SW_In[1:0]分别连接“数据选择器”的地址输入信号A1~A0,用于地址选择。
  4. Data_In[3:0]:“数据选择器”的数据输入信号D[3:0],连接到拨动开关SW_In[7:4]。
  5. LED_Out:输出到LED灯,共有八位。LED_Out0连接“数据选择器”的数据输出端Y,通过LED灯的亮灭情况来显示结果。LED_Out[7:1]输出恒定低电平。

程序设计

图4.2是截取自底层模块mux41_module的部分代码:
image.png
图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自行验证。

实验小结

  1. if语句必须包含在一个always块中,always块中的语句按它们出现的顺序执行。
  2. 用parameter来定义一个标识符代表一个常量,称为符号常量,即标识符形式的常量,采用符号常量可提高程序的可读性和可维护性。

END

文章来源:https://www.yuque.com/yingmuketang/01/rlul0u

推荐内容

更多内容请关注走进FPGA专栏
推荐阅读
关注数
1615
内容数
27
本专栏将以【安路EG4S开发板】为例,从基础板卡信息及使用教程,基础实验设计与实现及综合性实验设计与实现带大家学习FPGA。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息