【FPGA】计数器 —— 时序逻辑

小边想要日更!盲猜明天就会断hh,因为明晚我应该在疯狂看计网。。

  • 时序逻辑基本概念:输出还与时钟信号相关

    • D触发器 - 也就是有“记忆”特性,能存储电平状态

      image-20220918164451433
  • 计数器基本概念,基本4位加法器结构图

  • 计数值与技术时间之间的关系

1. 设计输入

设计一个以每隔1s闪烁的LED灯(亮灭各500ms)

image-20220919193029125

CK在一般系统中非常稳定50MHz —— 一周期20ns

那~ 就+(500ms/20ns) = 25*10^6次 这要多少位计数器呢?

image-20220919185529979

计数器核心代码 ——

module ledfash (
    //端口
    Clk,
    Reset_n, //复位
    Led
);
    //端口定义
    input Clk;
    input Reset_n;
    output reg Led;
    
    reg[24:0] counter;
    
    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n) begin
        counter <= 0;
        Led <=0;
        end
    else if(counter == 24999999) begin
        Led <= !Led;
        counter <= 0;
        end
    else     
        counter <= counter + 1'd1;
endmodule

学习新语法,争做新青年

  • posedge clk这是时序逻辑描述的标准模式

    • poseedge时钟上升沿作为敏感信号
    • negedge时钟下降沿到来会会工作
  • <=非阻塞赋值,你暂且理解为=,下篇blog详谈

  • Led 要在 always块中赋值,需要定义为reg型,否则会爆红

  • 两条语句用begin-end括起来,作用相当于{}

  • 24999999: 0-1,1-2 … 24999999-0

推荐分开写,有利于综合器分析 ——

    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n) 
        counter <= 0;
	else if(counter == 24999999) 
        counter <= 0;
    else     
        counter <= counter + 1'd1;
        
    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n) 
        Led <=0;
else if(counter == 24999999) 
        Led <= !Led;

分析综合~ 嗯嗯,没啥错误

2. 功能仿真

`timescale 1ns/1ns

module led_flash_tb();
    //激励信号
    reg Clk;
    reg Reset_n;
    wire Led;
    
led_flash led_flash_inst(
    //连线
    .Clk(Clk),
    .Reset_n(Reset_n), 
    .Led(Led)
);

    initial Clk = 1;
    always #10 Clk = !Clk; //每延时10s,翻转
    
    initial begin
        Reset_n = 0;
        #201;
        Reset_n = 1;
        #2000000000;
        $stop;
    end
endmodule
image-20220919200116979

3. 板子调试

管脚约束

image-20220919200940958

ctrl + s → Generate bitstream

Okk啦~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮光 掠影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值