0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

時(shí)序邏輯電路設(shè)計(jì)之計(jì)數(shù)器

CHANBAEK ? 來(lái)源:通信情報(bào)工學(xué)算法學(xué)習(xí) ? 作者:syu ikko ? 2023-05-22 16:54 ? 次閱讀

前面已經(jīng)學(xué)習(xí)了時(shí)序邏輯電路中的基本單元:觸發(fā)器,這次就用其來(lái)整點(diǎn)活,實(shí)現(xiàn)計(jì)數(shù)器的設(shè)計(jì),計(jì)數(shù)器可以說(shuō)是任何和時(shí)序有關(guān)的設(shè)計(jì)都會(huì)用到他。

一. 計(jì)數(shù)器原理

計(jì)數(shù)器的功能主要就是計(jì)數(shù),在數(shù)字系統(tǒng)中主要對(duì)脈沖的個(gè)數(shù)進(jìn)行計(jì)數(shù),以實(shí)現(xiàn)測(cè)量,計(jì)數(shù)和控制的功能,同時(shí)也可以做到分頻等功能。 同時(shí),其也是FPGA設(shè)計(jì)中最常用的一種時(shí)序邏輯電路,根據(jù)計(jì)數(shù)器的計(jì)數(shù)值可以精確控制各個(gè)信號(hào)的狀態(tài)。

二. 實(shí)用

用計(jì)數(shù)器計(jì)數(shù)1s間隔,實(shí)現(xiàn)led燈每隔1s閃爍的結(jié)果。

本設(shè)計(jì)十分簡(jiǎn)單,用一個(gè)模塊附帶簡(jiǎn)單的輸入輸出便可以完成。 如下所示:

圖片

sys_clk:輸入時(shí)鐘,為系統(tǒng)時(shí)鐘

sys_rst_n:復(fù)位信號(hào),低電平有效

led_out:輸出信號(hào),控制LED燈的亮滅

我們的邏輯是這樣:計(jì)數(shù)器進(jìn)行計(jì)數(shù),計(jì)數(shù)到1s便給LED燈賦值,讓其發(fā)亮,就可以達(dá)到1s亮滅的結(jié)果。 所以需要計(jì)算一下,計(jì)1s需要計(jì)數(shù)多少次,如果時(shí)鐘是50MHz,也就是0.000_000_02s,計(jì)數(shù)一秒需要計(jì)數(shù)50_000_000個(gè)數(shù)才可以,不過(guò)在設(shè)計(jì)時(shí)刻視為從0開(kāi)始計(jì)數(shù),所以是49_999_999個(gè)。

接下來(lái)的設(shè)計(jì)時(shí),為了節(jié)省寄存器資源,只計(jì)數(shù)24_999_999個(gè),也就是1s內(nèi)閃爍一次(0.5秒一次)。 這需要25位寬的計(jì)數(shù)器。

圖片

下面介紹兩種方式的計(jì)數(shù)器; 帶標(biāo)志位和不帶標(biāo)志位。

不帶標(biāo)志位 :設(shè)置一個(gè)cnt信號(hào)位,時(shí)鐘的每個(gè)上升沿到來(lái)時(shí)刻,cnt便自動(dòng)+1,當(dāng)計(jì)數(shù)器計(jì)到24_999_999的時(shí)候,清0,led_out信號(hào)取反,只要不復(fù)位,變一直計(jì)數(shù)下去。

帶標(biāo)志位: 在上面方案的基礎(chǔ)上,添加一個(gè)cnt_flag信號(hào),當(dāng)計(jì)數(shù)器計(jì)數(shù)到24_999_999的時(shí)候先不取反,而是讓cnt_flag產(chǎn)生一個(gè)高脈沖,當(dāng)led_out 的信號(hào)檢測(cè)到cnt_flag拉高的時(shí)候取反。

關(guān)于標(biāo)志位有什么用,先挖個(gè)坑,以后說(shuō)。

圖片

圖1

圖片

圖2

注意一下上面兩個(gè)圖(取自野火教材),標(biāo)志位拉高的時(shí)刻并不一樣,下面的圖在N-1時(shí)刻拉高,led_out的狀態(tài)是剛剛好在0時(shí)刻轉(zhuǎn)換(慢一拍),上面的圖實(shí)際上到后來(lái)是計(jì)數(shù)計(jì)多了。 對(duì)于這種簡(jiǎn)單的設(shè)計(jì)這個(gè)問(wèn)題不痛不癢,但是對(duì)于一些要求比較高的設(shè)計(jì)來(lái)說(shuō),一秒也不能差,所以這個(gè)地方需要注意。

下面給出代碼(帶信號(hào)標(biāo)志位)

module counter
 #(
 parameter CNT_MAX = 25'd24_999_999
 )
 (
 input wire sys_clk , //系統(tǒng)時(shí)鐘 50Mh
 input wire sys_rst_n , //全局復(fù)位


 output reg led_out //輸出控制 led 燈
 );
 
 //reg define
 reg [24:0] cnt ; //經(jīng)計(jì)算得需要 25 位寬的寄存器才夠 500ms
 reg cnt_flag;
 
 //cnt:計(jì)數(shù)器計(jì)數(shù),當(dāng)計(jì)數(shù)到 CNT_MAX 的值時(shí)清零
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 cnt <= 25'b0;
 else if(cnt == CNT_MAX)
 cnt <= 25'b0;
 else
 cnt <= cnt + 1'b1;
 
 //cnt_flag:計(jì)數(shù)到最大值產(chǎn)生的標(biāo)志信號(hào),每當(dāng)計(jì)數(shù)滿標(biāo)志信號(hào)有效時(shí)取反
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 cnt_flag <= 1'b0;
 else if(cnt == CNT_MAX – 25'b1)
 cnt_flag <= 1'b1;
 else
 cnt_flag <= 1'b0;
 
 //led_out:輸出控制一個(gè) LED 燈
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 led_out <= 1'b0;
 else if(cnt_flag == 1'b1)
 led_out <= ~led_out;
 
 endmodule

測(cè)試平臺(tái):

module tb_counter(
    );


reg sys_clk;
reg sys_rst_n;


wire led_out;


initial begin
    sys_clk = 1'b1;
    sys_rst_n <= 1'b0;
    #20
    sys_rst_n <= 1'b1;
end




always #10 sys_clk = ~sys_clk;


counter
#(
    .CNT_MAX (25'd24) //實(shí)例化帶參數(shù)的模塊時(shí)候,當(dāng)我們想要修改常數(shù)在此模塊的值的時(shí)候,直接實(shí)例化參數(shù)名后面的括號(hào)中修改即可
)
counter_inst(
.sys_clk(sys_clk),
.sys_rst_n(sys_rst_n),


.led_out(led_out)
);




endmodule

仿真波形:

圖片

到這里,問(wèn)題還沒(méi)解決,在7系列的FPGA的板上,并不輸出單端口的時(shí)鐘,其是200MHz的差分時(shí)鐘。

圖片

AD11和AD12差分時(shí)鐘輸出

經(jīng)過(guò)查閱,調(diào)用PLL鎖相環(huán)的IP核進(jìn)行差分時(shí)鐘的單端口時(shí)鐘輸出。

圖片

調(diào)用時(shí)鐘IP核,并且選擇PLL,在下面選擇差分時(shí)鐘接口。 output時(shí)鐘設(shè)置50MHz。

重新寫(xiě)頂層代碼,例化時(shí)鐘。

module counter




(
//input wire sys_clk,


input wire sys_rst_n,
input clk_p,
input clk_n,


output  reg led_out
    );


reg [24:0] cnt;
reg        cnt_flag;
parameter CNT_MAX = 25'd24_999_999;


wire locked;
wire sys_clk;


clk_wiz_0 diff_2_single
(
    .clk_out1(sys_clk),


    .reset(1'b0),
    .locked(locked),
    .clk_in1_p(clk_p),
    .clk_in1_n(clk_n)
);








//cnt:計(jì)數(shù)器計(jì)數(shù),當(dāng)計(jì)數(shù)到cnt_max的時(shí)候值清0
always @(posedge sys_clk or negedge sys_rst_n) 
    if (sys_rst_n == 1'b0) 
        cnt <= 25'b0;
    else if(cnt == CNT_MAX)
        cnt <= 25'b0;
    else
        cnt <= cnt+1'b1;


//cnt_flag:計(jì)數(shù)到最大值產(chǎn)生的標(biāo)志位信號(hào),每當(dāng)計(jì)數(shù)滿標(biāo)志信號(hào)有效時(shí)取反
always @(posedge sys_clk or negedge sys_rst_n) 
    if(sys_rst_n == 1'b0)
    cnt_flag <= 1'b0;
    else if (cnt == CNT_MAX - 25'b1)
        cnt_flag <= 1'b1;
    else
        cnt_flag <= 1'b0; 




always @(posedge sys_clk or negedge sys_rst_n)
    if (sys_rst_n == 1'b0)
        led_out <= 1'b0;
    else if (cnt_flag == 1'b1)
        led_out <= ~led_out;    


endmodule

RTL電路如下所示:

圖片

關(guān)于kintex7差分時(shí)鐘引腳約束的問(wèn)題需要注意:

這個(gè)地方只需要約束其中之一即可,另外一個(gè)不用管,如果是不清楚電平標(biāo)準(zhǔn)可以在Tcl控制臺(tái)輸入指令查詢:

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1629

    文章

    21738

    瀏覽量

    603459
  • led
    led
    +關(guān)注

    關(guān)注

    242

    文章

    23278

    瀏覽量

    660939
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2256

    瀏覽量

    94581
  • 觸發(fā)器
    +關(guān)注

    關(guān)注

    14

    文章

    2000

    瀏覽量

    61159
  • 時(shí)序邏輯電路
    +關(guān)注

    關(guān)注

    2

    文章

    94

    瀏覽量

    16546
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    時(shí)序邏輯電路的精華——計(jì)數(shù)器

    時(shí)序邏輯電路的精華——計(jì)數(shù)器
    的頭像 發(fā)表于 12-29 09:23 ?1364次閱讀

    時(shí)序邏輯電路設(shè)計(jì)

    時(shí)序邏輯電路設(shè)計(jì)6.1 基本D觸發(fā)的設(shè)計(jì)6.2 JK觸發(fā)6.3 帶異步復(fù)位/置位端的使能T觸發(fā)6.4 基本
    發(fā)表于 03-20 10:04

    【FPGA開(kāi)源教程連載】第三章 時(shí)序邏輯電路設(shè)計(jì)之計(jì)數(shù)器

    本帖最后由 芯航線跑堂 于 2016-12-25 01:52 編輯 時(shí)序邏輯電路設(shè)計(jì)之計(jì)數(shù)器實(shí)驗(yàn)?zāi)康模阂?b class='flag-5'>計(jì)數(shù)器為例學(xué)會(huì)簡(jiǎn)單的時(shí)序
    發(fā)表于 12-21 19:15

    時(shí)序電路設(shè)計(jì)計(jì)數(shù)器詳解

    時(shí)序邏輯電路設(shè)計(jì)之計(jì)數(shù)器實(shí)驗(yàn)?zāi)康模阂?b class='flag-5'>計(jì)數(shù)器為例學(xué)會(huì)簡(jiǎn)單的時(shí)序邏輯電路設(shè)計(jì)實(shí)驗(yàn)平臺(tái):芯航線FPGA
    發(fā)表于 01-24 06:35

    移位型計(jì)數(shù)器中反饋邏輯電路的設(shè)計(jì)

    摘要:移位型計(jì)數(shù)器是以移位寄存為主體構(gòu)成的同步計(jì)數(shù)器。這類計(jì)數(shù)器具有電路連接簡(jiǎn)單,編碼別具特色的特點(diǎn),用途十分廣泛。文中介紹了移位型
    發(fā)表于 04-26 11:16 ?29次下載

    時(shí)序邏輯電路

    實(shí)驗(yàn)十六  時(shí)序邏輯電路? 實(shí)驗(yàn)(1) 計(jì)數(shù)器?一、實(shí)驗(yàn)?zāi)康?⒈ 熟悉計(jì)數(shù)器的設(shè)計(jì)方法及工作原理。?⒉ 了解同步計(jì)數(shù)器與異步
    發(fā)表于 09-24 22:17 ?3360次閱讀
    <b class='flag-5'>時(shí)序</b><b class='flag-5'>邏輯電路</b>

    Multisim的時(shí)序邏輯電路設(shè)計(jì)仿真

    通過(guò)介紹Multisim軟件的功能和特點(diǎn),結(jié)合格雷瑪計(jì)數(shù)器的設(shè)計(jì)實(shí)例,敘述了在Multisim軟件平臺(tái)進(jìn)行時(shí)序邏輯電路的設(shè)計(jì)原理及構(gòu)成方法,并利用軟件對(duì)設(shè)計(jì)進(jìn)行仿真。
    發(fā)表于 02-10 16:43 ?133次下載
    Multisim的<b class='flag-5'>時(shí)序</b><b class='flag-5'>邏輯電路設(shè)計(jì)</b>仿真

    計(jì)數(shù)器時(shí)序電路

    1、了解時(shí)序電路的經(jīng)典設(shè)計(jì)方法(D觸發(fā)、JK觸發(fā)和一般邏輯門組成的時(shí)序邏輯電路)。 2、
    發(fā)表于 07-10 14:37 ?17次下載

    時(shí)序邏輯電路的主要故障分析

    時(shí)序邏輯電路其任一時(shí)刻的輸出不僅取決于該時(shí)刻的輸入,而且還與過(guò)去各時(shí)刻的輸入有關(guān)。常見(jiàn)的時(shí)序邏輯電路有觸發(fā)
    發(fā)表于 04-09 16:00 ?6354次閱讀
    <b class='flag-5'>時(shí)序</b><b class='flag-5'>邏輯電路</b>的主要故障分析

    時(shí)序邏輯電路分為幾類

    時(shí)序邏輯電路是由組合邏輯電路與記憶電路(又稱存儲(chǔ)電路) 組合而成的。 常見(jiàn)時(shí)序
    的頭像 發(fā)表于 02-26 15:25 ?5.1w次閱讀

    組合邏輯電路時(shí)序邏輯電路的學(xué)習(xí)課件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是組合邏輯電路時(shí)序邏輯電路的學(xué)習(xí)課件免費(fèi)下載包括了:任務(wù)一 組合邏輯電路,任務(wù)二 編碼,任務(wù)三 譯碼
    發(fā)表于 10-27 15:58 ?31次下載
    組合<b class='flag-5'>邏輯電路</b>和<b class='flag-5'>時(shí)序</b><b class='flag-5'>邏輯電路</b>的學(xué)習(xí)課件免費(fèi)下載

    時(shí)序邏輯電路設(shè)計(jì)之同步計(jì)數(shù)器

    時(shí)序電路的考察主要涉及分析與設(shè)計(jì)兩個(gè)部分,上文介紹了時(shí)序邏輯電路的一些分析方法,重點(diǎn)介紹了同步時(shí)序電路分析的步驟與注意事項(xiàng)。 本文就時(shí)序
    的頭像 發(fā)表于 05-22 17:01 ?3404次閱讀
    <b class='flag-5'>時(shí)序</b><b class='flag-5'>邏輯電路設(shè)計(jì)</b>之同步<b class='flag-5'>計(jì)數(shù)器</b>

    時(shí)序邏輯電路設(shè)計(jì)之異步計(jì)數(shù)器

    上文介紹了同步計(jì)數(shù)器的設(shè)計(jì)原則以及各注意事項(xiàng),本文承接上文繼續(xù)介紹異步計(jì)數(shù)器以及三種常用的集成計(jì)數(shù)器的相關(guān)內(nèi)容。
    的頭像 發(fā)表于 05-22 17:07 ?4938次閱讀
    <b class='flag-5'>時(shí)序</b><b class='flag-5'>邏輯電路設(shè)計(jì)</b>之異步<b class='flag-5'>計(jì)數(shù)器</b>

    時(shí)序邏輯電路有哪些 時(shí)序邏輯電路和組合邏輯電路區(qū)別

    產(chǎn)生相應(yīng)的輸出信號(hào)。本文將詳細(xì)介紹時(shí)序邏輯電路的分類、基本原理、設(shè)計(jì)方法以及與組合邏輯電路的區(qū)別。 一、時(shí)序邏輯電路的分類
    的頭像 發(fā)表于 02-06 11:18 ?1w次閱讀

    時(shí)序邏輯電路包括什么器件組成

    當(dāng)前的輸入信號(hào),還取決于電路的歷史狀態(tài)。與組合邏輯電路不同,組合邏輯電路的輸出僅取決于當(dāng)前的輸入信號(hào),而時(shí)序邏輯電路的輸出則受到
    的頭像 發(fā)表于 07-30 15:02 ?1032次閱讀