<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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
    +關注

    關注

    1608

    文章

    21358

    瀏覽量

    594369
  • 邏輯電路
    +關注

    關注

    13

    文章

    475

    瀏覽量

    42281
  • 寄存器
    +關注

    關注

    30

    文章

    5141

    瀏覽量

    118055
  • Verilog
    +關注

    關注

    28

    文章

    1328

    瀏覽量

    109439
  • 計數器
    +關注

    關注

    32

    文章

    2199

    瀏覽量

    93299
  • 時序邏輯電路

    關注

    2

    文章

    79

    瀏覽量

    16429
  • 開發板
    +關注

    關注

    25

    文章

    4542

    瀏覽量

    94712
  • FPGA開發板
    +關注

    關注

    10

    文章

    120

    瀏覽量

    31360
  • Verilog語言
    +關注

    關注

    0

    文章

    113

    瀏覽量

    8168

原文標題:筆記連載精選 |【時序邏輯、競爭冒險、同步復位、異步復位】之【計數器設計、verilog語法補充】

文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    時序邏輯電路的精華——計數器

    時序邏輯電路的精華——計數器
    的頭像 發表于 12-29 09:23 ?1097次閱讀

    計數器時序電路原理及實驗

    計數器時序電路原理及實驗  、實驗目的1、了解時序電路的經典設計方法(D觸發、JK觸發
    發表于 10-10 11:47

    【FPGA開源教程連載】第三章 時序邏輯電路設計之計數器

    至此,就完成了基本的時序邏輯,計數器的設計。請以此為基礎自行設計使得每個燈以不同的頻率閃爍,并進行仿真以及板級驗證。小梅哥芯航線電子工
    發表于 12-21 19:15

    如何設計實際可用的計數器

    我需要設計計數器,時鐘變化幾十計數次。我先用了
    發表于 03-14 16:49

    時序電路設計的計數器詳解

    500ms的時間進行閃爍,如果有示波器也可以測量這時候的引腳波形進行觀察。圖3-10 RTLviewer圖3-11 實驗現象至此,就完成了基本的時序邏輯,
    發表于 01-24 06:35

    中規模集成時序邏輯設計

    中規模集成時序邏輯設計:計數器:在數字邏輯系統中,使用最多的時序電路要算計數器了。它是一種對輸入
    發表于 09-01 09:09 ?13次下載

    時序邏輯電路

    實驗十六  時序邏輯電路? 實驗(1) 計數器?一、實驗目的?⒈ 熟悉計數器的設計方法及工作原理。?⒉ 了解同步計數器與異步
    發表于 09-24 22:17 ?3245次閱讀
    <b class='flag-5'>時序</b><b class='flag-5'>邏輯</b>電路

    基于MSI的N進制計數器設計方法

    計數器是數字邏輯系統中的基本部件,它是數字系統中用得最多的時序邏輯電路,本文主要闡述了用中規模集成計數器設計任意進制同步加法
    發表于 02-28 11:41 ?6615次閱讀
    基于MSI的N進制<b class='flag-5'>計數器</b>設計方法

    采用歸零法的N進制計數器原理

    計數器是一種重要的時序邏輯電路,廣泛應用于各類數字系統中。介紹以集成計數器74LS161和74LS160為基礎,用歸零法設計N進制計數器的原
    發表于 03-20 10:21 ?95次下載
    采用歸零法的N進制<b class='flag-5'>計數器</b>原理

    計數器時序電路

    1、了解時序電路的經典設計方法(D觸發器、JK觸發器和一般邏輯門組成的時序邏輯電路)。 2、了解同步計數器,異步
    發表于 07-10 14:37 ?15次下載

    計數器邏輯功能測試實驗報告

    本文主要介紹了計數器邏輯功能測試實驗報告。時序邏輯電路中,有一種電路叫計數器,計數器是用來對時鐘
    發表于 06-27 08:00 ?15次下載
    <b class='flag-5'>計數器</b><b class='flag-5'>邏輯</b>功能測試實驗報告

    MOD計數器時序

    計數器的工作是通過每個時鐘脈沖將計數器的內容提前一個計數計數。當被時鐘輸入激活時推進其數字或狀態序列的計數器被稱為以“遞增
    的頭像 發表于 06-23 07:47 ?1.3w次閱讀
    MOD<b class='flag-5'>計數器</b>和<b class='flag-5'>時序</b>圖

    同步計數器和異步計數器是什么 同步計數器和異步計數器的主要區別?

    在數字電子產品中,計數器是由一系列觸發器組成的時序邏輯電路。顧名思義,計數器用于計算輸入在負或正邊沿轉換中出現的次數。根據觸發觸發器的方式,計數器
    的頭像 發表于 03-25 17:31 ?2.1w次閱讀
    同步<b class='flag-5'>計數器</b>和異步<b class='flag-5'>計數器</b>是什么 同步<b class='flag-5'>計數器</b>和異步<b class='flag-5'>計數器</b>的主要區別?

    時序邏輯電路設計之計數器

    前面已經學習了時序邏輯電路中的基本單元:觸發器,這次就用其來整點活,實現計數器的設計,計數器可以說是任何和時序有關的設計都會用到他。
    的頭像 發表于 05-22 16:54 ?3388次閱讀
    <b class='flag-5'>時序</b><b class='flag-5'>邏輯</b>電路設計之<b class='flag-5'>計數器</b>

    時序邏輯電路設計之同步計數器

    時序電路的考察主要涉及分析與設計兩個部分,上文介紹了時序邏輯電路的一些分析方法,重點介紹了同步時序電路分析的步驟與注意事項。 本文就時序
    的頭像 發表于 05-22 17:01 ?2353次閱讀
    <b class='flag-5'>時序</b><b class='flag-5'>邏輯</b>電路設計之同步<b class='flag-5'>計數器</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>