二、七段译码逻辑设计
所需软件
Verilog编程软件:Lattice Diamond(3.11.0.396.4_Diamond_x64)
Verilog仿真软件:ModelSim SE-64 10.2c(modelsim-win64-10.2c-se)
方法:用case语句实现七段译码逻辑设计
符号图:
Verilog代码:
Part1:Test7_seg_dec.v文件(Verilog工程文件)
//2022-05-27
//7段数码管译码器
module Test7_seg_dec(
num,
a_g
);
input[3:0] num; //定义4位的输入变量:num
output[6:0] a_g; //定义7位的输出变量:a_g
reg[6:0] a_g; //a_g[6:0]->{a,b,c,d,e,f,g}。因要用always语句块对a_g赋值,因此需要将a_g定义为reg型变量。
//虽然a_g定义成了reg型,但因有case语句,故仍是组合逻辑。
always@(num) begin //当always语句中的敏感变量num发生变化时,逻辑信号开始变化
case(num) //用case语句实现组合逻辑
4'd0: begin a_g<=7'b1111110; end //当num为十进制的0时,a_g输出为1111110,数码管显示0。
4'd1: begin a_g<=7'b0110000; end //当num为十进制的1时,a_g输出为011_0000,数码管显示1。
4'd2: begin a_g<=7'b1101101; end //当num为十进制的2时,a_g输出为110_1101,数码管显示2。
4'd3: begin a_g<=7'b1111001; end //当num为十进制的3时,a_g输出为111_1001,数码管显示3。
4'd4: begin a_g<=7'b0010011; end //当num为十进制的4时,a_g输出为001_0011,数码管显示4。
4'd5: begin a_g<=7'b1011011; end //当num为十进制的5时,a_g输出为101_1011,数码管显示5。
4'd6: begin a_g<=7'b1011111; end //当num为十进制的6时,a_g输出为101_1111,数码管显示6。
4'd7: begin a_g<=7'b1110000; end //当num为十进制的7时,a_g输出为111_0000,数码管显示7。
4'd8: begin a_g<=7'b1111111; end //当num为十进制的8时,a_g输出为111_1111,数码管显示8。
4'd9: begin a_g<=7'b1111011; end //当num为十进制的9时,a_g输出为111_1011,数码管显示9。
//Verilog中的数字表达式:<位宽><进制><数字>
//'b:二进制,eg 4'b1010,表示4位二进制数1010
//'h:十六进制,eg 8'hef、4'ha
//'d:十进制,eg 2'd3(二位的十进制数3)、4'd15(不能写16,4位最大是15,意为十进制数15,0000001111)
default: begin a_g<=7'b0000001; end //当num不在0-9范围时,a_g输出为000_0001,数码管显示中杠“-”。
endcase
end
endmodule
Part2:Test7_seg_dec_tb.v文件(Verilog仿真文件)
//2022-05-27
//7段数码管译码器--testbench of Test7_seg_dec
`timescale 1ns/10ps
module Test7_seg_dec_tb;
reg[3:0] num_in; //仿真输入变量
wire[6:0] a_g_out; //仿真输出变量
Test7_seg_dec Test7_seg_dec(
.num(num_in),
.a_g(a_g_out)
);
initial begin
num_in<=0; //定义输入变量初值为0,即当num为十进制的0时。
#150 $stop; //定义仿真时长为150ns。
//注:七段数码管可显示10种阿拉伯数字(0~9),令每种数字显示10ns,加上输入default显示中杠“-”占用的10ns,故110ns即可遍历一轮仿真。
end
always #10 num_in<=num_in+1; //每过10ns,输入变量的值就加1。
endmodule
仿真波形:
注意事项
1、//Verilog中的数字表达式:<位宽><进制><数字>
//'b:二进制,比如4'b1010,表示4位二进制数1010。
//'h:十六进制,比如8'hef、4'ha。
//'d:十进制,eg 2'd5(二位的十进制数5)、4'd15(不能写16,4位最大是15,意为十进制数15,0000001111)
2、七段数码管可显示10种数字(0~9),令每种数字显示10ns,加上输入default显示中杠“-”占用的10ns,故110ns即可遍历一轮仿真。