基于FPGA的数字计时器

本次实验分四步走

第一步(完成)

本步骤的目标如下:

1.让FPGA上的数码管每隔1秒钟全部点亮或熄灭

2.应该看到4个“8”在闪烁

3.验证了FPGA的管脚和数码管的连接是好的

4.本阶段使用原理图的完成设计

首先需要需要设计一个模块,此模块的功能为利用50M的时钟。经过分频产生1Hz的时钟然后,利用1Hz的信号不断翻转高低电平,然后把此信号输出给七段数码管的全部引脚,实现上述功能的代码如下

module LED(
CLK_50,
LED_ON_OFF
);
input CLK_50;
output LED_ON_OFF;
reg [25:0]couter_val;
reg LED_ON_OFF;
always @(posedge CLK_50)begin
 if(couter_val<50000000)begin
   couter_val<=couter_val+1'b1;
	LED_ON_OFF<=LED_ON_OFF;
	end
	else begin
	couter_val<=0;
	LED_ON_OFF<=~LED_ON_OFF;
 end
 end
 endmodule

然后把此代码综合为一个器件,接着创建一个顶层文件BDF,设计顶层文件如下图所示

接着设计管教约束如下图所示

此步骤的RTL图如下图所示

最后编译下载代码第一步功能实现

第二步 (完成)

目标

1.全部的电路功能使用Verilog代码实现

2.使用“Assignments — Import Assignments”的管脚指派方法

意思就是与第一步相同,但是要全部用代码实现。

实现此功能的代码如下:

module step2(
    output   reg    HEX0_D0,
    output   reg    HEX0_D1,
    output   reg    HEX0_D2,
    output   reg    HEX0_D3,
    output   reg    HEX0_D4,
    output   reg    HEX0_D5,
    output   reg    HEX0_D6,
    output    reg    HEX0_DP,
    
    output    reg   HEX1_D0,
    output    reg   HEX1_D1,
    output    reg   HEX1_D2,
    output    reg   HEX1_D3,
    output    reg   HEX1_D4,
    output    reg   HEX1_D5,
    output    reg   HEX1_D6,
    output    reg    HEX1_DP, 
    
    output    reg   HEX2_D0,
    output    reg   HEX2_D1,
    output    reg   HEX2_D2,
    output    reg   HEX2_D3,
    output    reg   HEX2_D4,
    output    reg   HEX2_D5,
    output    reg   HEX2_D6,
    output    reg    HEX2_DP, 
    
    output    reg   HEX3_D0,
    output    reg   HEX3_D1,
    output    reg   HEX3_D2,
    output    reg   HEX3_D3,
    output    reg   HEX3_D4,
    output    reg   HEX3_D5,
    output    reg   HEX3_D6,
    output    reg    HEX3_DP,
    input    CLOCK_50
);

    reg    led_ON_off;
    reg    [25:0]cnt;
   always @(posedge CLOCK_50)
    begin
    if (cnt<=50_000_000)begin 
    led_ON_off<=led_ON_off;
    cnt=cnt +1'b1;
    end
    else begin
    led_ON_off<=~led_ON_off;
    cnt=0;
    end
    end
    always @(*)begin
        HEX0_D0<=led_ON_off;
        HEX0_D1<=led_ON_off;
        HEX0_D2<=led_ON_off;
        HEX0_D3<=led_ON_off;
       HEX0_D4<=led_ON_off;
        HEX0_D5<=led_ON_off;
        HEX0_D6<=led_ON_off;
        HEX0_DP<=led_ON_off;
    
       HEX1_D0<=led_ON_off;
      HEX1_D1<=led_ON_off;
       HEX1_D2<=led_ON_off;
       HEX1_D3<=led_ON_off;
       HEX1_D4<=led_ON_off;
       HEX1_D5<=led_ON_off;
       HEX1_D6<=led_ON_off;
        HEX1_DP<=led_ON_off;
    
       HEX2_D0<=led_ON_off;
       HEX2_D1<=led_ON_off;
       HEX2_D2<=led_ON_off;
       HEX2_D3<=led_ON_off;
       HEX2_D4<=led_ON_off;
       HEX2_D5<=led_ON_off;
       HEX2_D6<=led_ON_off;
        HEX2_DP<=led_ON_off; 
    
       HEX3_D0<=led_ON_off;
       HEX3_D1<=led_ON_off;
       HEX3_D2<=led_ON_off;
       HEX3_D3<=led_ON_off;
       HEX3_D4<=led_ON_off;
       HEX3_D5<=led_ON_off;
       HEX3_D6<=led_ON_off;
        HEX3_DP<=led_ON_off;
    end
endmodule
 

RTL视图如下

 

第三步 (完成)

目标:本阶段的设计目标为设计一个可以从0.01秒计数到99.99秒的计时器电路。

思路如下:

  • 复位按键使用拨码开关,不需要去抖
  • 脉冲生成模块:带工作使能的计数器
    • 对输入时钟信号计数,生成四种尺度的时间脉冲信号
    • 所有的时间脉冲信号都是单周期高电平有效的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值