数字钟的数字钟的FPGA实现并在实现并在VGA上显示上显示
之前用FPGA实现数字钟,并用数码管和VGA进行显示,同时还能用按键改变时间。下面我就讲解一下当初是怎
么做这个东西的。
上图是整个代码文件结构。文件的名字取得很奇怪,因为当时是在其他的文件基础上改的,所以从名字看起来似乎和设计没有
什么关系。这个地方大家可以要注意,代码文件的名字要命名得一看就知道功能是什么。
这里说一下,各个文件的作用:
1、LCD_TOP:顶层文件,只是例化了下面的各个模块
2、Led_display:这个其实是实现数字钟的模块,实现时分秒的计时以及改变
3、Display_shanshuo:这个是实现时分秒在数码管上显示,并且在改变时间的时候,实现数码管闪烁,这样,一看就知道是
改变哪个时间。
4、VGA_sig:实现VGA显示,这个是整个设计的比较难的模块。
5、Time_vga_data:这个是实现获取时间的字模数据。这样,才能使时间再VGA上显示。
6、LCD_top.ucf:这个看后缀就知道了,约束文件,约束管脚。
下面,我就从最底层的模块开始给大家分析这个设计
一、数字钟模块,实现时分秒的计时以及改变时分秒
先是端口定义
module led_display (
input sys_clk ,
input sys_rstn ,
input change , //时钟改变信号,1表示改变时间
input[3:0] data_5 , //改变的时十位
input[3:0] data_4 , //改变的时个位
input[3:0] data_3 , //改变的分十位
input[3:0] data_2 , //改变的分个位
input[3:0] data_1 , //改变的秒十位
input[3:0] data_0 , //改变的秒个位
output reg [3:0] shi_shi ,
output reg [2:0] shi_ge ,
output reg [2:0] fen_shi ,
output reg [3:0] fen_ge ,
output reg [3:0] miao_shi ,
output reg [1:0] miao_ge
);
分别是使用6个信号来定义时间的时分秒的十位和个位。输入有6个信号对应需要改变的时间的时分秒的十位和个位。
以下以秒的个位为例说明:
always@( posedge sys_clk )
begin
if(!sys_rstn)
begin
miao_ge <= 4'd0 ;
end
else
begin
if( change )
miao_ge <= data_0 ;
else
begin
if( miao_ge == 4'd10 )
miao_ge <= 4'd0 ;
else if(delay_cnt==cnt_number)
miao_ge <= miao_ge + 1'b1 ;
else
miao_ge <= miao_ge ;
end
end
end
在复位的情况下,miao_ge值为0。在没有复位情况下,首先是判断是否change有效,有效说明这个时候在改变时间,那么
评论0
最新资源