FPGA-verilog-写数字钟

1. 硬件平台

   Cyclone IV 和6个数码管

2. top level

module num_show(
	input clk,rst,
	output wire oclk,
	output  [7:0]num_out,
	output  [7:0]n_oled,
	output  [5:0]Cs_out,
	output wire clk_1M
);

   wire CLK_1M	;
	pll	pll_inst (
		.inclk0 ( clk ),
		.c0 ( CLK_1M )
		);
		
	flow_led	flow_led(
	.nclk(clk),.nrst(rst),
	.out_clk(oclk),
	.oled(n_oled)
);
		
	num_clock num_clock(
		.kclk(CLK_1M),.krst(rst),
		.knum_out(num_out),
		.kCs_out(Cs_out)
);
endmodule

2. 计时模块

module num_clock(
		input kclk,krst,
		output reg [7:0]knum_out,
		output reg [5:0]kCs_out
);
reg [20:0]count;
reg [3:0] s_num;
reg [3:0] s1_num;
reg [3:0] m_num;
reg [3:0] m1_num;
reg [3:0] h_num;
reg [3:0] h1_num;
reg [2:0] out_select;
parameter data = 20'd1000000;
//数码管
parameter _0 = 8'b0011_1111,
			 _1 = 8'b0000_0110,
			 _2 = 8'b0101_1011,
			 _3 = 8'b0100_1111, 
			 _4 = 8'b0110_0110,
			 _5 = 8'b0110_1101,
			 _6 = 8'b0111_1101,
			 _7 = 8'b0000_0111,
			 _8 = 8'b0111_1111,
			 _9 = 8'b0110_1111;
//from right left
parameter num_1 = 6'b11_1110,
			 num_2 = 6'b11_1101,
			 num_3 = 6'b11_1011,
			 num_4 = 6'b11_0111,
	       num_5 = 6'b10_1111,
			 num_6 = 6'b01_1111;
function [7:0]dataout;
input [3:0] in_data;
reg [7:0]out_data;
	begin
		case (in_data)
		4'd0:  out_data = _0;
		4'd1:  out_data = _1;
		4'd2:  out_data = _2;
		4'd3:  out_data = _3;
		4'd4:  out_data = _4;
		4'd5:  out_data = _5;
		4'd6:  out_data = _6;
		4'd7:  out_data = _7;
		4'd8:  out_data = _8;
		4'd9:  out_data = _9;
		default: out_data = 8'b1111_1111;	
		endcase
		dataout  = out_data;
	end
endfunction
always @(posedge kclk or negedge krst)
begin 
	if(!krst)
		begin
			kCs_out = num_1;
			out_select <= 1'b1;
			knum_out <= _0;
			count <= 0;
			s_num <= 0;
			s1_num <= 0; 
			m_num <= 0;
			m1_num <= 0; 
			h_num <= 0;
			h1_num <= 0; 
		end
	else
		begin
			count <= count + 1'b1;					   
				//计时
				if (count==data)
					begin
						count <= 0;
						//second
						s_num = s_num +1'b1;
						if (s_num == 4'b1010)
							begin
								s_num = 0;								
								s1_num = s1_num+ 1'b1;
								if(s1_num==4'b0110)
									begin								
										s_num = 0;
										s1_num = 0;
										m_num = m_num +1'b1;   //mini
										if (m_num == 4'b1010)
											begin 
												m_num = 0;								
												m1_num = m1_num+ 1'b1;
												if(m1_num==4'b0110)
												begin
													m_num = 0;
													m1_num = 0;
													h_num = h_num +1'b1;   //hour
												if (h_num == 4'b1010)
													begin 
														h_num = 0;								
														h1_num = h1_num+ 1'b1;
													end
												if(h1_num==4'b0010 && h_num == 4'b0100)   //24
														begin
															h_num = 0;
															h1_num = 0;													
														end
												end
											end										
									end								
							end																				
					 end
			//second
				//显示刷新率大于20HZ
			if(count % 20'd2500==0)				
				begin
					out_select=out_select+1'b1;
					if(out_select==3'b111)
						out_select=1'b1;
						
						case(out_select)
							3'b001:
									begin
										kCs_out = num_1;
										knum_out = dataout(s_num);
									end
							3'b010:
									begin
										kCs_out = num_2;
										knum_out = dataout(s1_num);
									end
							3'b011:
									begin
										kCs_out = num_3;
										knum_out = dataout(m_num);
									end
							3'b100:
									begin
										kCs_out = num_4;
										knum_out = dataout(m1_num);
									end
							3'b101:
									begin
										kCs_out = num_5;
										knum_out = dataout(h_num);
									end
							3'b110:
									begin
										kCs_out = num_6;
										knum_out = dataout(h1_num);
									end
							default: kCs_out = 6'b11_1111;	
						endcase
					
				end						
		end
end
endmodule
	


    
实验代码可根据不同的硬件平台自行修改。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值