任务
实现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

错误
- 模块命名不能以数字开头