1. 实验目的
(1)掌握用VerilogHDL 语言编写4选1多路选择器的方法
(2)熟练的使用always块实现:
(3)熟练的使用assign语句实现:
2. 实验内容
(1)原理描述
多路选择器的功能:在选择信号的控制下,从多个输入中选择一个输出。
真值表如下:
电路结构如下:
数据选择器,可根据给定的输入地址代码,从一组输入信号中选出指定的一个,送至输出端。
四选一数据选择器,从四个端口中任意选择一个,送至输出端。设定四个端口为in[0]、in[1]、in[2]、in[3],表示四个端口需要两个选择信号(2^2 =4),设为sel[0]、sel[1],将输出信号设为out。
(2)Verilog HDL设计源代码描述(要求:注释)
代码图如下:
- in[0]、in[1]、in[2]、in[3]为四个输入端口,input [3 : 0] in表示上边沿信号1作为输入信号;
- sel[0]、sel[1]为两个选择信号,input [1 : 0] sel 表示上边信号为1时作为选择信号;
- always模块采用case语句进行选择,将in[0]的值赋给out的二进制代码为:00的情况,之后的代码同理;
- (1'bx)会默认为0即false,退出case;
(3)TestBeach仿真代码及仿真结果
仿真代码如下:
仿真always测试语句表:
Time | Signal change | in |
0 | 无 | 0000 |
10ns | in[0]取反 | 0001 |
20ns | in[0]取反,in[1]取反 | 0010 |
30ns | in[0]取反 | 0011 |
40ns | in[0]取反,in[1]取反,in[2]取反 | 0100 |
50ns | in[0]取反 | 0101 |
60ns | in[0]取反,in[1]取反 | 0110 |
70ns | in[0]取反 | 0111 |
80ns | in[0]取反,in[1]取反,in[2]取反,in[3]取反 | 1000 |
90ns | in[0]取反 | 1001 |
100ns | in[0]取反,in[1]取反 | 1010 |
110ns | in[0]取反 | 1011 |
120ns | in[0]取反,in[1]取反,in[2]取反 | 1100 |
130ns | in[0]取反 | 1101 |
140ns | in[0]取反,in[1]取反 | 1110 |
150ns | in[0]取反 | 1111 |
- 每过10ns,in[0]反转一次;每过20ns,in[1]反转一次;每过40ns,in[2]反转一次;每过80ns,in[3]反转一次;
- 从而实现,0000->0001->0010->0011->0100->0101->0110->0111->……->1110->1111;
- Initial模块中,always语句:当in的值10ns改变一次,sel的选择也要每次进行10ns的延迟才能配对选择;
仿真结果:
(4)XDC文件配置
管脚设置:V11->out J15->in[0] L16->in[1] M13->in[2] R15->in[3] V10->sel[1] U11->sel[0];
(5)下板测试
in->0, sel->01:
in->1, sel->01: