0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

设计一个计数器来讲解时序逻辑

FPGA技术江湖 来源:叁芯智能FPGA课程 2023-08-14 09:28 次阅读

一、时序逻辑

时序逻辑是Verilog HDL 设计中另一类重要应用。从电路特征上看来,其特点为任意时刻的输出不仅取决于该时刻的输入,而且还和电路原来的状态有关。

从电路行为上讲,不管输入如何变化,仅当时钟的沿(上升沿或下降沿)到达时,才有可能使输出发生变化。

1、在描述时序电路的always块中的reg型信号都会被综合成寄存器,这是和组合逻辑电路所不同的。
2、时序逻辑中推荐使用非阻塞赋值“<=”。

3、时序逻辑的敏感信号列表只需要加入所用的时钟触发沿即可,其余所有的输入和条件判断信号都不用加入,这是因为时序逻辑是通过时钟信号的跳变沿来控制的。

二、时序逻辑在FPGA里RTL实现

我们写一个简单的寄存器,看看fpga是怎样实现时序逻辑的

module  counter(
    input           a,
    input               clk,
     
    output  reg     q
);
 
    always@(posedge clk)begin
        q <= a;
    end
 
endmodule

我们看一下fpga的芯片规划器

c63e649e-3a32-11ee-9e74-dac502259ad0.png

从芯片规划器,可以看出来几个细节。

1、我们用了一个查找表、一个寄存器。对FPGA来说,这个寄存器你就算不使用他也是在那里的

2、我么的输出信号是与clk同步的,必须要等到clk的上升沿到来是,输出才会更新,因此就实现了寄存器的功能

三、同步复位、异步复位

1、同步复位:其实就是你的操作和时钟的上升沿同步

举个例子,你要将q设置为0,下面这代码就是同步复位,q <= 0,是在时钟上升沿到来时执行的,所以是同步复位

module  counter(
    input           a,
    input               clk,
     
    output  reg     q
);
 
    always@(posedge clk)begin
        q <= 0;
    end
 
endmodule

2、异步复位:其实就是你的操作和时钟没有关系

举个例子,你要将q设置为0,下面这代码就是异步复位,q <= 0,无论时钟是什么状态,只有rst_n到来就执行清零

module  counter(
    input                   a,
    input                       clk,
    input                       rst_n,
    output  reg [7:0]   q
);
 
    always@(posedge clk,negedge rst_n)begin
        if(!rst_n)
            q <= 0;
        else   
            q <= q + 1'b1;
    end
endmodule

四、竞争冒险

竞争冒险:意思是,在我时钟的上升沿进行采样时,输入信号处于不稳定状态,这个会给电路带来亚稳态的问题

c6946eca-3a32-11ee-9e74-dac502259ad0.png

为了解决竞争冒险,我们只要满足信号的建立时间和保持时间即可

c6aeecaa-3a32-11ee-9e74-dac502259ad0.png

五、verilog语法补充

1、parameter 定义全局变量

parameter   T =     26'd49_000_000;

2、defparam重新定义参数,这个主要是在仿真脚本修改例化的模块的内部参数

defparam counter_inst.T = 26'd49;
 
counter counter_inst(
.clk        (clk),
.rst_n  (rst_n),   
.flag       (flag)

六、计数器设计

设计一个1秒的计数器,当时间到一秒后给出一个flag信号

1、代码实现 verilog.v

module  counter(
    input               clk,
    input               rst_n,
    output  reg     flag
);
 
    reg [25:0] count;
     
    parameter   T =     26'd49_000_000;
     
    always@(posedge clk,negedge rst_n)begin
        if(!rst_n)begin
            flag <= 1'b0;
            count <= 0;
            end
        else    if(count == T)begin
                flag <= 1'b1;
                count <= 0;
            end
        else
            begin
                count <= count + 1'b1;
                flag <= 1'b0;
            end
    end
 
endmodule

2、仿真脚本

我在仿真脚本将时间参数改为T改为 T=26‘d49;方便仿真

`timescale 1ns/1ps
 
 
module counter_tb;
 
    reg             clk;
    reg             rst_n;
    wire                flag;
     
    defparam counter_inst.T = 26'd49;
     
    counter counter_inst(
    .clk        (clk),
    .rst_n  (rst_n),   
    .flag       (flag)
);
 
    always #10 clk = ~clk;
 
    initial begin
        clk = 0;
        rst_n = 0;
        #20;
        rst_n = 1;
        #5000000;
        $stop;
    end
 
endmodule

3、仿真结果

1、可以看出脉冲flag只持续了一个周期

c6ddfb8a-3a32-11ee-9e74-dac502259ad0.png

2、可以看出脉冲的触发是50个计数值

c70bc6fa-3a32-11ee-9e74-dac502259ad0.png

七、计数器里隐藏的加法器问题

我们设计的这个计数器,里面其实用了一个加法器,加法器是组合逻辑(因为组合逻辑只取决于输入)

当我们给加法器一个初值0的时候,加法器的输出立即就输出1,这就是仿真的时候,开始复位拉高后,count在第一个clk上升沿就为1的原因

c75139c4-3a32-11ee-9e74-dac502259ad0.png







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1625

    文章

    21648

    浏览量

    601473
  • 逻辑电路
    +关注

    关注

    13

    文章

    492

    浏览量

    42555
  • 寄存器
    +关注

    关注

    31

    文章

    5305

    浏览量

    119921
  • Verilog
    +关注

    关注

    28

    文章

    1343

    浏览量

    109949
  • 计数器
    +关注

    关注

    32

    文章

    2253

    浏览量

    94311
  • 时序逻辑电路

    关注

    2

    文章

    94

    浏览量

    16525
  • 开发板
    +关注

    关注

    25

    文章

    4921

    浏览量

    97127
  • FPGA开发板
    +关注

    关注

    10

    文章

    121

    浏览量

    31473
  • Verilog语言
    +关注

    关注

    0

    文章

    113

    浏览量

    8209

原文标题:笔记连载精选 |【时序逻辑、竞争冒险、同步复位、异步复位】之【计数器设计、verilog语法补充】

文章出处:【微信号:HXSLH1010101010,微信公众号:FPGA技术江湖】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    时序逻辑电路的精华——计数器

    时序逻辑电路的精华——计数器
    的头像 发表于 12-29 09:23 1312次阅读

    时序电路设计的计数器详解

    500ms的时间进行闪烁,如果有示波器也可以测量这时候的引脚波形进行观察。图3-10 RTLviewer图3-11 实验现象至此,就完成了基本的时序逻辑
    发表于 01-24 06:35

    中规模集成时序逻辑设计

    中规模集成时序逻辑设计:计数器:在数字逻辑系统中,使用最多的时序电路要算计数器了。它是
    发表于 09-01 09:09 13次下载

    时序逻辑电路

    实验十六  时序逻辑电路? 实验(1) 计数器?、实验目的?⒈ 熟悉计数器的设计方法及工作原理。?⒉ 了解同步
    发表于 09-24 22:17 3309次阅读
    <b class='flag-5'>时序</b><b class='flag-5'>逻辑</b>电路

    计数器,计数器的工作原理是什么?

    计数器,计数器的工作原理是什么? 在数字系统中使用最多的时序电路是计数器计数器不仅能用于对时钟脉冲进行
    发表于 03-08 13:50 6.1w次阅读

    基于Multisim的计数器设计仿真

    计数器是常用的时序逻辑电路器件,文中介绍了以四位同步二进制集成计数器74LS161和异步二-五-十模值计数器74LS290为主要芯片,设计实
    发表于 07-26 11:38 134次下载
    基于Multisim的<b class='flag-5'>计数器</b>设计仿真

    计数器时序电路

    1、了解时序电路的经典设计方法(D触发、JK触发逻辑门组成的时序
    发表于 07-10 14:37 15次下载

    计数器逻辑功能测试实验报告

    本文主要介绍了计数器逻辑功能测试实验报告。时序逻辑电路中,有种电路叫计数器
    发表于 06-27 08:00 15次下载
    <b class='flag-5'>计数器</b><b class='flag-5'>逻辑</b>功能测试实验报告

    采用中规模集成计数器进行任意进制计数器设计的解决方案

    计数器是数字逻辑系统中的基本部件, 它是数字系统中用得最多的时序逻辑电路,其主要功能就是用计数器的不同状态来记忆输入脉冲的个数。除此以外还具
    的头像 发表于 05-30 08:24 1.6w次阅读
    采用中规模集成<b class='flag-5'>计数器</b>进行任意进制<b class='flag-5'>计数器</b>设计的解决方案

    MOD计数器时序

    计数器的工作是通过每个时钟脉冲将计数器的内容提前计数计数。当被时钟输入激活时推进其数字或状
    的头像 发表于 06-23 07:47 1.4w次阅读
    MOD<b class='flag-5'>计数器</b>和<b class='flag-5'>时序</b>图

    环形计数器的种类、工作原理及应用特性

      环形计数器是使用移位寄存构成的时序逻辑电路。根据时钟脉冲,相同的数据在计数器中循环。
    的头像 发表于 10-31 15:50 1.8w次阅读
    环形<b class='flag-5'>计数器</b>的种类、工作原理及应用特性

    同步计数器和异步计数器是什么 同步计数器和异步计数器的主要区别?

    在数字电子产品中,计数器是由系列触发组成的时序逻辑电路。顾名思义,计数器用于计算输入在负或正
    的头像 发表于 03-25 17:31 2.5w次阅读
    同步<b class='flag-5'>计数器</b>和异步<b class='flag-5'>计数器</b>是什么 同步<b class='flag-5'>计数器</b>和异步<b class='flag-5'>计数器</b>的主要区别?

    时序逻辑电路设计之计数器

    前面已经学习了时序逻辑电路中的基本单元:触发,这次就用其来整点活,实现计数器的设计,计数器可以说是任何和
    的头像 发表于 05-22 16:54 5082次阅读
    <b class='flag-5'>时序</b><b class='flag-5'>逻辑</b>电路设计之<b class='flag-5'>计数器</b>

    时序逻辑电路设计之同步计数器

    时序电路的考察主要涉及分析与设计两部分,上文介绍了时序逻辑电路的些分析方法,重点介绍了同步时序
    的头像 发表于 05-22 17:01 3114次阅读
    <b class='flag-5'>时序</b><b class='flag-5'>逻辑</b>电路设计之同步<b class='flag-5'>计数器</b>

    时序逻辑电路设计之异步计数器

    上文介绍了同步计数器的设计原则以及各注意事项,本文承接上文继续介绍异步计数器以及三种常用的集成计数器的相关内容。
    的头像 发表于 05-22 17:07 4413次阅读
    <b class='flag-5'>时序</b><b class='flag-5'>逻辑</b>电路设计之异步<b class='flag-5'>计数器</b>