verilog——74HC4511七段显示译码器

Verilog——74HC4511七段译码器

74HC4511的仿真

设计思路

采用行为级建模,根据74HC4511的功能表编程即可。verilog——74HC4511七段显示译码器_第1张图片
verilog——74HC4511七段显示译码器_第2张图片

代码实现

设计模块

//filename:74HC4511.v
module _74HC4511(
input LE,BL,LT,
input [3:0] D,
output reg [6:0] L);   
/*
输入输出端口说明。
输入端口: LE,BL,LT为使能信号。D为待显示的四位二进制数字。
输出端口:L为7段显示器各段的工作情况。
*/
wire [2:0] E;   
assign E={LE,BL,LT}; //中间变量用于后续的控制端优先级判断
always@(*)
begin
    if(LE==0&&BL==1&&LT==1)
	begin
	  case(D)
	    //0-9显示。
		4'b0000:L=7'b111_1110;
		4'b0001:L=7'b011_0000;
		4'b0010:L=7'b110_1101;
		4'b0011:L=7'b111_1001;
		4'b0100:L=7'b011_0011;
		4'b0101:L=7'b101_1011;
		4'b0110:L=7'b001_1111;
		4'b0111:L=7'b111_0000;
		4'b1000:L=7'b111_1111;
		4'b1001:L=7'b111_1011;  
		//以下为无效状态
  		4'b1010:L=7'b000_0000;
  		4'b1011:L=7'b000_0000; 
  		4'b1100:L=7'b000_0000;
  		4'b1101:L=7'b000_0000;
  		4'b1110:L=7'b000_0000;
  		4'b1111:L=7'b000_0000; 		
	   endcase
	end
    else 
	begin
	    casex(E)
		3'bxx0:L=7'b111_1111;  //灯测试
		3'bx01:L=7'b000_0000;  //灭灯
		3'b111:L<=L;			//锁存
		  endcase
	end
end
endmodule

测试模块

//filename:tb_74HC4511.v
`timescale 10ns/1ns
module tb_74HC4511();
reg LE,BL,LT;
reg [3:0] D;
wire [6:0] L;

_74HC4511 U0(LE,BL,LT,D,L);//实例化元件。

initial 
	$monitor($time,":\tLE=%b,BL=%b,LT=%b,D=%b,L=%b",LE,BL,LT,D,L);//监视器监视。
initial  begin
	LE=1;BL=1;LT=0;D=4'b0000;//灯测试
	#5;
	LE=0;BL=1;LT=1;D=4'b0100;//七段译码器测试
	#5;
	LE=0;BL=1;LT=1;D=4'b1001;
	#5;
	LE=1;BL=1;LT=1;D=4'b0100;//锁存
	#5;
	LE=0;BL=1;LT=1;D=4'b0100;
	#5;
	LE=1;BL=0;LT=1;D=4'b0000;//灭灯
	#5;
	$stop;
end
endmodule

仿真

verilog——74HC4511七段显示译码器_第3张图片
verilog——74HC4511七段显示译码器_第4张图片

你可能感兴趣的:(Verilog)