【Verilog】 3-8译码器

功能:

实现3-8译码

 

Verilog代码:
//行为级设计
`timescale 1ns / 1ps

module decoder3_8_01(en, addr, y);
	input [2:0] en, addr;
	output [7:0] y;
	reg [7:0] y;

	always@(addr or en)
		begin
			if(!en[2]) y<=8'b0000_0000;
			else if(en[1]) y<=8'b0000_0000;
			else if(en[0]) y<=8'b0000_0000;
			else
				begin
					case(addr)
						3'b000: y <= 8'b00000001;
						3'b001: y <= 8'b00000010;
						3'b010: y <= 8'b00000100;
						3'b011: y <= 8'b00001000;
						3'b100: y <= 8'b00010000;
						3'b101: y <= 8'b00100000;
						3'b110: y <= 8'b01000000;
						3'b111: y <= 8'b10000000;
					endcase
				end
		end
endmodule

//数据流级设计
`timescale 1ns / 1ps

module decoder3_8_02(en, addr, y);
	input[2:0] en, addr;
	output[7:0] y;
	wire[7:0] y;
	wire w;

	assign w = ~en[0] & ~en[1] & en[2];
	assign y[0] = w & ~addr[0] & ~addr[1] & ~addr[2];
	assign y[1] = w & addr[0]  & ~addr[1] & ~addr[2];
	assign y[2] = w & ~addr[0] & addr[1]  & ~addr[2];
	assign y[3] = w & addr[0]  & addr[1]  & ~addr[2];
	assign y[4] = w & ~addr[0] & ~addr[1] &  addr[2];
	assign y[5] = w & addr[0]  & ~addr[1] &  addr[2];
	assign y[6] = w & ~addr[0] & addr[1]  &  addr[2];
	assign y[7] = w & addr[0]  & addr[1]  &  addr[2];

endmodule

//门级设计
`timescale 1ns / 1ps

module decoder3_8_03(en, addr, y);
	input[2:0] en, addr;
	output[7:0] y;
	wire[7:0] y;
	wire n0, n1, n;
	wire[2:0] abar;

	not (n0, en[0]);
	not (n1, en[1]);
	and (n, n0, n1, en[2]);
	not (abar[0], addr[0]);
	not (abar[1], addr[1]);
	not (abar[2], addr[2]);
	and (y[0], n, abar[0], abar[1], abar[2]);
	and (y[1], n, addr[0], abar[1], abar[2]);
	and (y[2], n, abar[0], addr[1], abar[2]);
	and (y[3], n, addr[0], addr[1], abar[2]);
	and (y[4], n, abar[0], abar[1], addr[2]);
	and (y[5], n, addr[0], abar[1], addr[2]);
	and (y[6], n, abar[0], addr[1], addr[2]);
	and (y[7], n, addr[0], addr[1], addr[2]);

endmodule

 

测试代码:
initial begin
		en[0]=0; en[1]=0; en[2]=1;
		addr = 3'b000;
		// Wait 100 ns for global reset to finish
		#100;
        addr = 3'b001;
		#100;
        addr = 3'b010;
		#100;
        addr = 3'b011;
		#100;
        addr = 3'b100;
		#100;
        addr = 3'b101;
		#100;
        addr = 3'b110;
		#100;
        addr = 3'b111;

	end

 

效果演示:

1

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值