【FPGA初级】4选一数据选择器的verilog实现(含testbench与波形)

RepVGG
标准模板库

Room

分类

接口管理数据选择器

数据选择器,可根据给定的输入地址tomcat码,从一组输入信号中选出指定的一个,送至输出端
四选一数据选择器,从四个端口中任意选择一个,送至输出端。设定四个端口为din[0]、din[1]、din[2]、din[3]&#xff0cjdk动态代理原理;表示四个端口需要两个选择信号(22 =4),设为del[0]、del[1],将输出信号设为dout。

verilog实现

代码如下

module MUX(
din,
sel,
dout

);

input[3:0] din;//四个端口,故位宽为4
input[1:0] sel;//两个选择信号,故位宽为2
output dout;
reg dout;

always @(*)begin

if(sel==2'b00)
   
	dout=din[0];
	
if(sel==2'b01)
   
	移动魔百盒dout=din[1]空域;
	
if(sel==2'b10)
   
	dout=din[2];

if(sel==2'b11)
   
   dout=din[3];
	
end


endmodule

teapp inventorstbench

代码如下

`times就业前景cale 1ns/1ns
module MUX_test;   //MUX_test为测试文件名字

re计算机网络g [3:0]din;      //输入信号对应reg类型
reg [1:0]sel;
wire dout;         //输出信号对应wirnginx反向代理e类型

MUX u_MUX(        //MUX为被例化的模块名,u_MUX为例化模块名
    .din(din),    //括号外为被例化的端口名,括号内为例化端口名
	 .sel(sel),
	 .dout(dout)

);

//以下四个always颇为巧妙,具体看下方解释
always # 10 din[0]=~din[0];
always # 20 din[1]=~din[1];
always # 40 din[2]=~din[2];
always # 80 din[3]=~din[3];

initial
       begin
		    sel=1'b0;
			 din=4'b0;
			 #160 $stop;
		 end
always #10 sel=sel+1;//din的值10ns变换一次,故而将sel的每一个值延时10ns

endmodule

四个always实现了din四个端口的值从0000变化到了1111,如下表所示

时间变化 信号变化 din
0 0000
10ns din[0]取反 0001
20ns din[0]取反&#xJson转Model实现分析ff0c;din[1]取反 0010
30ns din[0]取反 0011
40ns din[0]取反,din[1]取反,din[2]取反 0100
50ns din[0]取反 0101
60ns din[0]取反,din[1]取反 0110
70ns din[0]取反 0111
80ns din[0]取反,din[1]取反,din[2]取反,din[3]取反 1000
90ns din[0]取反 1001
100ns din[0]取反,din[1]取反 1010
110ns din[0]取反 1011
120ns din[0]取反,din[1]取反,din[2]取反 1100
130ns din工单系统[0]取反 1101
140ns din[0]取反,din[1]取反 1110
150ns din[0]取反 1111

使得din的值有多种取值并java9学习分享多意,只想体现del的选择功能,无论din的值如何,由del的值决定输出哪个端口,也可以将din的值固定为一个值,也可以体现选择功能。

del的值与端口号的对应如下:

de升级npml dout
00 din[0]
01 din[1]
10 din[2]ethers
11 din[3]

假定某时din的值为1101,而此时del的值为10博客协程故而din[2]为输出端口,输出的值与din的值无关,但波形图一致(输出与被选端口的波形)。

波形图如下:
波形图
对准一个时间段,可观察到被选定的端口号的波形,与输出波形一致。

以上均为学习笔记,若有错误,欢迎大家指出,一定积极讨论并予以改正

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注