Verilog 2-4线译码器

本文介绍了如何使用门级描述方法编写Verilog代码实现2-4线译码器,通过逻辑电路图和仿真结果验证了其正常工作。此外,还提及了数据流描述作为另一种实现方式。

简介:
用门级描述的方法写一个2-4线译码器。逻辑电路图如下:
在这里插入图片描述
Verilog代码如下:

/*------------------------------------
Filename: decoder_2to4.v
Function: 2-4线译码器(输出低电平有效)
Author: Zhang Kaizhou
Date: 2019-9-6 16:17:58
-------------------------------------*/
module decoder_2to4(Y, A0, A1, E);
	//端口定义
	input A0, A1, E;
	output [3 : 0] Y;
	wire nA0, nA1, nE; //内部连线
	
	//门级描述
	not n1(nE, E), n2(nA0, A0), n3(nA1, A1);
	nand nd1(Y[0], nE, nA0, nA1), nd2(Y[1], nE, A0, nA1),
		 nd3(Y[2], nE, nA0, A1), nd4(Y[3], nE, A0, A1);
endmodule
/*---------------------------
Filename: decoder_2to4_tb.v
Function: 测试代码
Author: Zhang Kaizhou
Date: 2019-9-7 11:45:57
---------------------------*/
`timescale 1ns/1ns
module decoder_2to4_tb(Y);
	output [3 : 0] Y;
	wire [3 : 0] Y;
	reg E, A0, A1;
	
	initial
	begin
		E = 1'b1; A1 = 1'b0; A0 = 1'b0;
		#500 E = 0;
		#100 A1 = 1'b0; A0 = 1'b1;
		#100 A1 = 1'b1; A0 = 1'b0;
		#100 A1 = 1'b1; A0 = 1'b1;
		#500 E = 1;
		#500 $stop;
	end
	
	decoder_2to4 m0(.Y(Y), .E(E), .A0(A0), .A1(A1));
endmodule

仿真结果如下:
在这里插入图片描述
总结:
由以上仿真结果知,上述代码描述的2-4线译码器的逻辑功能实现 正常。
附注:
以上逻辑亦可通过数据流描述的方法实现,具体代码如下:

/*------------------------------------
Filename: decoder_2to4.v
Function: 2-4线译码器(输出低电平有效)
Author: Zhang Kaizhou
Date: 2019-9-7 11:56:09
-------------------------------------*/
module decoder_2to4(Y, E, A0, A1);
	//端口定义
	output [3 : 0] Y;
	input E, A0, A1;
	
	//数据流描述
	assign Y[0] = ~(~A0 & ~A1 & ~E); //连续赋值语句assign
	assign Y[1] = ~(A0 & ~A1 & ~E);
	assign Y[2] = ~(~A0 & A1 & ~E);
	assign Y[3] = ~(A0 & A1 & ~E);
endmodule

以上代码的仿真结果与上面的门级描述实现的逻辑功能是一样的。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值