您的位置:首页 > 其它

FPGA设计时间基准电路和带使能的多周期计数器

2017-12-08 18:12 274 查看

FPGA设计时间基准电路和带使能的多周期计数器



• 设计时间基准电路和带使能的多周期计数器

• 时间基准电路生成同步时间基准信号

• 多周期计数器对时间基准信号进行计数

• 本质上是一个两级计数器级联的的电路结构

——>第一级计数器生成时间基准信号

——>第二级计数器用时间基准信号作为计数使能

整个设计的原理图



前面对系统时钟50Mhz进行分频的时间基准电路,其实就是一个计数器。后面为一个带使能端的多周期计数器,通过开发板的LED灯验证。

RTL电路



七段数码管器件例化代码

module key_smg(count, smg1 );
input count ;
output smg1 ;

reg[3:0] count;
reg[7:0] smg1 ;
/************************************
共阴极数码管
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e
************************************/
always@( count )
begin
//个位显示
case( count )
4'h0 : smg1 = 8'hc0 ;
4'h1 : smg1 = 8'hf9 ;
4'h2 : smg1 = 8'ha4 ;
4'h3 : smg1 = 8'hb0 ;
4'h4 : smg1 = 8'h99 ;
4'h5 : smg1 = 8'h92 ;
4'h6 : smg1 = 8'h82 ;
4'h7 : smg1 = 8'hf8 ;
4'h8 : smg1 = 8'h80 ;
4'h9 : smg1 = 8'h90 ;
4'ha : smg1 = 8'h88 ;
4'hb : smg1 = 8'h83 ;
4'hc : smg1 = 8'hc6 ;
4'hd : smg1 = 8'ha1 ;
4'he : smg1 = 8'h86 ;
4'hf : smg1 = 8'h8e ;
endcase
endmodule


实验一:把计数器的0-15计数值经过译码,在DE0的HEX LED上显示成0-9-A-F的十六 进制数



实验二:修改时间基准发生器,设计一个使用2个HEXLED,精度为0.1秒,范围为0-9.9秒的计时秒表。并可以通过两个按键对秒表及时进行控制。

module key_smg(clk, key, smg1, smg2 );
input clk, key;
output smg1, smg2 ;
//可变分频
,(5M分频=0.1s)
parameter timer = 5000_000;
//分频时钟,开始/停止标识
reg div_clk, st_flag ;
wire[1:0] key;
reg[1:0] keyin;
reg[22:0] TIM;//计数
reg[8:0] count;
reg[7:0] smg1, smg2 ;

//分频
always@(posedge clk )
begin
if( TIM == timer )
begin
TIM <= 0;
div_clk <= ~div_clk;
end
else
TIM <= TIM + 1'b1;
end
//消抖
always@(posedge TIM[20] )
begin
keyin <= key ;
end
//key[0]开始停止标识(低电平有效),  key[1]实现复位功能
always@(negedge keyin[0] )
begin
st_flag <= ~st_flag ;
end
//计时功能
always@( posedge div_clk )
begin
if( !keyin[1] && !st_flag  )
count <= 0;
else if( !st_flag )
count <= count;
else if( count==100 )
count <= 0;
count <= count + 1'b1;
end
//数码管显示
always@( count )
begin
//个位显示
case( count%10 )
4'h0 : smg1 = 8'hc0 ;
4'h1 : smg1 = 8'hf9 ;
4'h2 : smg1 = 8'ha4 ;
4'h3 : smg1 = 8'hb0 ;
4'h4 : smg1 = 8'h99 ;
4'h5 : smg1 = 8'h92 ;
4'h6 : smg1 = 8'h82 ;
4'h7 : smg1 = 8'hf8 ;
4'h8 : smg1 = 8'h80 ;
4'h9 : smg1 = 8'h90 ;
endcase

//十位显示
case( count/10)
4'h0 : smg2 = 8'h40 ;
4'h1 : smg2 = 8'h49 ;
4'h2 : smg2 = 8'h24 ;
4'h3 : smg2 = 8'h30 ;
4'h4 : smg2 = 8'h19 ;
4'h5 : smg2 = 8'h12 ;
4'h6 : smg2 = 8'h02 ;
4'h7 : smg2 = 8'h78 ;
4'h8 : smg2 = 8'h00 ;
4'h9 : smg2 = 8'h10 ;
endcase
end
endmodule


程序中对系统时钟50MHz进行5M分频,得到0.1s的计时所用时钟,通过按键输入进行对计时值count的控制,数码管实时显示当前状态的计时值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐