数码管静态显示

顶层模块代码

`timescale 1ns / 1ps
module segdisplay_top(
	input				sys_clk,
	input 			sys_rst_n,
	
	output	[5:0]	sel,
	output	[7:0]	seg_led
);

parameter	TIME_SHOW = 25'd2500_0000;
wire			add_flag;
 
time_cnt # (.MAX_NUM(TIME_SHOW))u_time_cnt(
	.clk			(sys_clk),
	.rst_n		(sys_rst_n),
	
	.flag			(add_flag)
    );
	 
seg_led_static u_seg_led_static(
	.clk			(sys_clk),
	.rst_n		(sys_rst_n),
	
	.add_flag	(add_flag),
	.sel			(sel),
	.seg_led		(seg_led)
	);

endmodule

子模块代码

`timescale 1ns / 1ps
module time_cnt(
	input				clk,
	input				rst_n,
	
	output	reg	flag
    );
	 
parameter	MAX_NUM = 25000_000; //50Mhz一个时钟周期20ns,延时0.5秒需要25000000个时钟周期
reg	[24:0]	cnt;

always @ (posedge clk or negedge rst_n) begin
	if (!rst_n) begin
		flag <= 1'b0;
		cnt  <= 24'b0;
	end
	else if (cnt < MAX_NUM - 1'b1) begin
		cnt <= cnt +1'b1;
		flag <= 1'b0;
	end
	else begin
		cnt <= 24'b0;
		flag <= 1'b1;
	end
end

endmodule

子模块代吗

`timescale 1ns / 1ps
module seg_led_static(
	input						clk,
	input						rst_n,
	
	input						add_flag,
	output	reg	[5:0]	sel,
	output	reg	[7:0]	seg_led
	);
reg	[3:0]	num;

always @ (posedge clk or negedge rst_n) begin
	if (!rst_n)
		sel <= 6'b111_111;
	else
		sel <= 6'b000_000;//控制所有数码管都处在上电工作状态
end

always @ (posedge clk or negedge rst_n) begin
	if (!rst_n)
		num <= 4'h0;
	else if (add_flag) begin
			if(num < 4'hf)
				num <= num + 1'b1;
			else
				num <= 4'h0;
	end
	else
		num <= num;
end
always @ (posedge clk or negedge rst_n) begin
	if (!rst_n)
		seg_led <= 8'b0;
	else begin
		case (num)
			4'h0 		: 	seg_led <= 8'b1100_0000;
			4'h1 		: 	seg_led <= 8'b1111_1001;
			4'h2 		:	seg_led <= 8'b1010_0100;
			4'h3 		: 	seg_led <= 8'b1011_0000;
			4'h4 		:	seg_led <= 8'b1001_1001;
			4'h5 		: 	seg_led <= 8'b1001_0010;
			4'h6 		:	seg_led <= 8'b1000_0010;
			4'h7 		:	seg_led <= 8'b1111_1000;
			4'h8		:	seg_led <= 8'b1000_0000;
			4'h9 		:	seg_led <= 8'b1001_0000;
			4'ha 		:	seg_led <= 8'b1000_1000;
			4'hb 		:	seg_led <= 8'b1000_0011;
			4'hc 		:	seg_led <= 8'b1100_0110;
			4'hd 		:	seg_led <= 8'b1010_0001;
			4'he 		: 	seg_led <= 8'b1000_0110;
			4'hf		: 	seg_led <= 8'b1000_1110;
			default 	:	seg_led <= 8'b1100_0000;
		endcase
	end
end
endmodule

测试文件

`timescale 1ns / 1ps

module td_segdisplay_top;

	reg	sys_clk;
	reg	sys_rst_n;
	wire	[5:0] sel;
	wire	[7:0] seg_led;
	
	parameter	DELAY_TIME = 25'd10;

	// Instantiate the Unit Under Test (UUT)
	segdisplay_top #(.TIME_SHOW(DELAY_TIME))uut (
		.sys_clk(sys_clk), 
		.sys_rst_n(sys_rst_n), 
		.sel(sel), 
		.seg_led(seg_led)
	);
	//产生时钟信号
	always #10 sys_clk <= ~sys_clk;
	
	initial begin
		// Initialize Inputs
		sys_clk = 0;
		sys_rst_n = 0;
		//simulate code
		#20;
		sys_rst_n = 1;	
	end    
endmodule

RTL图
DAGE仿真图
dage

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值