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

数据选择器

数据选择器,可根据给定的输入地址代码,从一组输入信号中选出指定的一个,送至输出端
四选一数据选择器,从四个端口中任意选择一个,送至输出端。设定四个端口为din[0]、din[1]、din[2]、din[3],表示四个端口需要两个选择信号(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

testbench

代码如下

`timescale 1ns/1ns
module MUX_test;   //MUX_test为测试文件名字

reg [3:0]din;      //输入信号对应reg类型
reg [1:0]sel;
wire dout;         //输出信号对应wire类型

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
00000
10nsdin[0]取反0001
20nsdin[0]取反,din[1]取反0010
30nsdin[0]取反0011
40nsdin[0]取反,din[1]取反,din[2]取反0100
50nsdin[0]取反0101
60nsdin[0]取反,din[1]取反0110
70nsdin[0]取反0111
80nsdin[0]取反,din[1]取反,din[2]取反,din[3]取反1000
90nsdin[0]取反1001
100nsdin[0]取反,din[1]取反1010
110nsdin[0]取反1011
120nsdin[0]取反,din[1]取反,din[2]取反1100
130nsdin[0]取反1101
140nsdin[0]取反,din[1]取反1110
150nsdin[0]取反1111

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

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

deldout
00din[0]
01din[1]
10din[2]
11din[3]

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

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

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

Verilog四选一数据选择器是一种常见的数字逻辑电路,用于从四个输入中选择一个输出。 该数据选择器由两个输入信号组成:两个选择信号(S1和S0)和四个输入信号(A、B、C和D)。选择信号用于确定哪个输入信号会通过选择器输出。 当选择信号为00时,输出信号为A;当选择信号为01时,输出信号为B;当选择信号为10时,输出信号为C;当选择信号为11时,输出信号为D。 这个数据选择器可以由逻辑门实现。通过将选择信号与输入信号和门连接,然后使用与门、或门和非门来实现。 具体而言,我们可以使用一个2输入的与门,将选择信号与输入信号进行连接,然后将其输出连接到两个2输入的或门的一个输入端。另一个输入端接地。 选择信号S1和输入信号A直接连接到一个2输入的与非门,并将其输出连接到第一个或门的另一个输入端。 选择信号S0和输入信号B连接到第二个2输入的与非门,并将其输出连接到第二个或门的另一个输入端。 选择信号S1和输入信号C直接连接到一个2输入的与非门,并将其输出连接到第三个或门的另一个输入端。 选择信号S0和输入信号D连接到第四个2输入的与非门,并将其输出连接到第四个或门的另一个输入端。 通过这样的逻辑门连接,我们可以实现一个四选一数据选择器。 总之,Verilog四选一数据选择器是一个重要的数字电路组件,通过选择信号和输入信号之间的逻辑门连接,可以根据选择信号的值选择一个输入信号作为输出信号。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值