verilog仿真——7段显示译码器74HC4511

任务

实现74HC4511的程序设计与仿真

思路

  • 根据芯片的真值表直接设计,输入与输出的对应关系。
  • 将输入端口的各功能对应实现:
    • //D[3:0] 为输入信号
    • //Y[6:0] 译码器输出编码
    • //LT_n:灯测试输入,低电平有效,所有输出置1,检查好坏
    • //BL_n:当灭灯输入;当LT_n无效时,低电平有效,所有输出置0,清晰显示
    • //LE:译码器锁存使能输入;当LT_n与BL_n皆无效时,高电平有效,则译码器显示不变化

对于低电平有效的信号,应该以一个下划线跟一个小写字母b 或n 表示。注意在同一个设计中要使用同一个小写字母表示低电平有效

这里采用XX_n

程序设计

//filename:74HC4511.v
module decoder74HC4511(
	input LT_n,BL_n,LE, //灯测试输入,灭灯输入,锁存使能输入
	input [3:0] D, //输入信号
	output reg [6:0]  Y //输出显示字段
);
/*电路功能描述
 1.(*)表示 always 块中所有输入信号都是敏感信号
 2.输出信号在过程语句中被赋值,定义成 reg 型
*/
//D[3:0] 为输入信号
//Y[6:0] 译码器输出编码
//LT_n:灯测试输入,低电平有效,所有输出置1,检查好坏
//BL_n:当灭灯输入;当LT_n无效时,低电平有效,所有输出置0,清晰显示
//LE:译码器锁存使能输入;当LT_n与BL_n皆无效时,高电平有效,则译码器显示不变化
always @(*) begin
	if(!LT_n) begin
		Y=7'b111_1111;
	end
	else if(!BL_n) begin
		Y=7'b000_0000;
	end
	else if(!LE) begin
	//只有锁存使能端无效时,再变化
		case(D)
			4'b0000:Y=7'b111_1111;
			4'b0001:Y=7'b011_0000;
			4'b0010:Y=7'b110_1101;
			4'b0011:Y=7'b111_1001;
			4'b0100:Y=7'b111_1111;
			4'b0101:Y=7'b111_1111;
			4'b0000:Y=7'b111_1111;
			4'b0000:Y=7'b111_1111;
			4'b0000:Y=7'b111_1111;
		endcase
	end
end
endmodule
			

仿真

//filename:tb_74HC4511.v
`timescale 1ns/1ns
module tb_74HC4511;
reg LT_n,BL_n,LE; //灯测试输入,灭灯输入,锁存使能输入
reg [3:0] D; //输入信号
wire [6:0]  Y; //输出显示字段
//实例化74HC4511
decoder74HC4511 decoder74HC4511_inst(
.LT_n(LT_n),
.BL_n(BL_n),
.LE(LE),
.D(D),
.Y(Y)
);
initial begin
	LT_n=0;BL_n=0;LE=0;D=4'b1000;
	#1
	LT_n=1;BL_n=0;LE=0;D=4'b0100;
	#1
	LT_n=1;BL_n=1;LE=0;D=4'b0000;
	#1
	LT_n=1;BL_n=1;LE=0;D=4'b0001;
	#1
	LT_n=1;BL_n=1;LE=0;D=4'b0010;
	#1
	LT_n=1;BL_n=1;LE=1;D=4'b0001;
	#1
	$stop;
end
endmodule

错误

  • 模块命名不能以数字开头

Leave a comment

Your email address will not be published. Required fields are marked *