【Verilog零基础入门-边看边练】学习笔记——第三讲 组合逻辑代码设计和仿真(补码转换和七段译码逻辑设计)(二)

 二、七段译码逻辑设计

所需软件

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

仿真波形:

【Verilog零基础入门-边看边练】学习笔记——第三讲 组合逻辑代码设计和仿真(补码转换和七段译码逻辑设计)(二)_第1张图片

 注意事项

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即可遍历一轮仿真。

原教学视频链接如下

Verilog零基础入门_哔哩哔哩_bilibili

你可能感兴趣的:(Lattice,学习,fpga开发)