衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

CHANBAEK ? 來源:通信情報工學算法學習 ? 作者:syu ikko ? 2023-05-22 16:54 ? 次閱讀

前面已經學習了時序邏輯電路中的基本單元:觸發器,這次就用其來整點活,實現計數器的設計,計數器可以說是任何和時序有關的設計都會用到他。

一. 計數器原理

計數器的功能主要就是計數,在數字系統中主要對脈沖的個數進行計數,以實現測量,計數和控制的功能,同時也可以做到分頻等功能。 同時,其也是FPGA設計中最常用的一種時序邏輯電路,根據計數器的計數值可以精確控制各個信號的狀態。

二. 實用

用計數器計數1s間隔,實現led燈每隔1s閃爍的結果。

本設計十分簡單,用一個模塊附帶簡單的輸入輸出便可以完成。 如下所示:

圖片

sys_clk:輸入時鐘,為系統時鐘

sys_rst_n:復位信號,低電平有效

led_out:輸出信號,控制LED燈的亮滅

我們的邏輯是這樣:計數器進行計數,計數到1s便給LED燈賦值,讓其發亮,就可以達到1s亮滅的結果。 所以需要計算一下,計1s需要計數多少次,如果時鐘是50MHz,也就是0.000_000_02s,計數一秒需要計數50_000_000個數才可以,不過在設計時刻視為從0開始計數,所以是49_999_999個。

接下來的設計時,為了節省寄存器資源,只計數24_999_999個,也就是1s內閃爍一次(0.5秒一次)。 這需要25位寬的計數器。

圖片

下面介紹兩種方式的計數器; 帶標志位和不帶標志位。

不帶標志位 :設置一個cnt信號位,時鐘的每個上升沿到來時刻,cnt便自動+1,當計數器計到24_999_999的時候,清0,led_out信號取反,只要不復位,變一直計數下去。

帶標志位: 在上面方案的基礎上,添加一個cnt_flag信號,當計數器計數到24_999_999的時候先不取反,而是讓cnt_flag產生一個高脈沖,當led_out 的信號檢測到cnt_flag拉高的時候取反。

關于標志位有什么用,先挖個坑,以后說。

圖片

圖1

圖片

圖2

注意一下上面兩個圖(取自野火教材),標志位拉高的時刻并不一樣,下面的圖在N-1時刻拉高,led_out的狀態是剛剛好在0時刻轉換(慢一拍),上面的圖實際上到后來是計數計多了。 對于這種簡單的設計這個問題不痛不癢,但是對于一些要求比較高的設計來說,一秒也不能差,所以這個地方需要注意。

下面給出代碼(帶信號標志位)

module counter
 #(
 parameter CNT_MAX = 25'd24_999_999
 )
 (
 input wire sys_clk , //系統時鐘 50Mh
 input wire sys_rst_n , //全局復位


 output reg led_out //輸出控制 led 燈
 );
 
 //reg define
 reg [24:0] cnt ; //經計算得需要 25 位寬的寄存器才夠 500ms
 reg cnt_flag;
 
 //cnt:計數器計數,當計數到 CNT_MAX 的值時清零
 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:計數到最大值產生的標志信號,每當計數滿標志信號有效時取反
 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:輸出控制一個 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

測試平臺:

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) //實例化帶參數的模塊時候,當我們想要修改常數在此模塊的值的時候,直接實例化參數名后面的括號中修改即可
)
counter_inst(
.sys_clk(sys_clk),
.sys_rst_n(sys_rst_n),


.led_out(led_out)
);




endmodule

仿真波形:

圖片

到這里,問題還沒解決,在7系列的FPGA的板上,并不輸出單端口的時鐘,其是200MHz的差分時鐘。

圖片

AD11和AD12差分時鐘輸出

經過查閱,調用PLL鎖相環的IP核進行差分時鐘的單端口時鐘輸出。

圖片

調用時鐘IP核,并且選擇PLL,在下面選擇差分時鐘接口。 output時鐘設置50MHz。

重新寫頂層代碼,例化時鐘。

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:計數器計數,當計數到cnt_max的時候值清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:計數到最大值產生的標志位信號,每當計數滿標志信號有效時取反
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電路如下所示:

圖片

關于kintex7差分時鐘引腳約束的問題需要注意:

這個地方只需要約束其中之一即可,另外一個不用管,如果是不清楚電平標準可以在Tcl控制臺輸入指令查詢:

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1630

    文章

    21796

    瀏覽量

    605997
  • led
    led
    +關注

    關注

    242

    文章

    23355

    瀏覽量

    663179
  • 計數器
    +關注

    關注

    32

    文章

    2261

    瀏覽量

    94982
  • 觸發器
    +關注

    關注

    14

    文章

    2003

    瀏覽量

    61347
  • 時序邏輯電路

    關注

    2

    文章

    94

    瀏覽量

    16594
收藏 人收藏

    評論

    相關推薦

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

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

    時序邏輯電路設計

    時序邏輯電路設計6.1 基本D觸發的設計6.2 JK觸發6.3 帶異步復位/置位端的使能T觸發6.4 基本
    發表于 03-20 10:04

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

    本帖最后由 芯航線跑堂 于 2016-12-25 01:52 編輯 時序邏輯電路設計之計數器實驗目的:以計數器為例學會簡單的時序
    發表于 12-21 19:15

    時序電路設計計數器詳解

    時序邏輯電路設計之計數器實驗目的:以計數器為例學會簡單的時序邏輯電路設計實驗平臺:芯航線FPGA
    發表于 01-24 06:35

    移位型計數器中反饋邏輯電路的設計

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

    時序邏輯電路

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

    Multisim的時序邏輯電路設計仿真

    通過介紹Multisim軟件的功能和特點,結合格雷瑪計數器的設計實例,敘述了在Multisim軟件平臺進行時序邏輯電路的設計原理及構成方法,并利用軟件對設計進行仿真。
    發表于 02-10 16:43 ?133次下載
    Multisim的<b class='flag-5'>時序</b><b class='flag-5'>邏輯電路設計</b>仿真

    計數器時序電路

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

    時序邏輯電路的主要故障分析

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

    時序邏輯電路分為幾類

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

    組合邏輯電路時序邏輯電路的學習課件免費下載

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

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

    時序電路的考察主要涉及分析與設計兩個部分,上文介紹了時序邏輯電路的一些分析方法,重點介紹了同步時序電路分析的步驟與注意事項。 本文就時序
    的頭像 發表于 05-22 17:01 ?3585次閱讀
    <b class='flag-5'>時序</b><b class='flag-5'>邏輯電路設計</b>之同步<b class='flag-5'>計數器</b>

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

    上文介紹了同步計數器的設計原則以及各注意事項,本文承接上文繼續介紹異步計數器以及三種常用的集成計數器的相關內容。
    的頭像 發表于 05-22 17:07 ?5155次閱讀
    <b class='flag-5'>時序</b><b class='flag-5'>邏輯電路設計</b>之異步<b class='flag-5'>計數器</b>

    時序邏輯電路有哪些 時序邏輯電路和組合邏輯電路區別

    產生相應的輸出信號。本文將詳細介紹時序邏輯電路的分類、基本原理、設計方法以及與組合邏輯電路的區別。 一、時序邏輯電路的分類
    的頭像 發表于 02-06 11:18 ?1.1w次閱讀

    時序邏輯電路包括什么器件組成

    當前的輸入信號,還取決于電路的歷史狀態。與組合邏輯電路不同,組合邏輯電路的輸出僅取決于當前的輸入信號,而時序邏輯電路的輸出則受到
    的頭像 發表于 07-30 15:02 ?1383次閱讀
    百家乐官网下载| 容城县| 百家乐官网赌博论谈| 威尼斯人娱乐城可信吗| 神话百家乐官网的玩法技巧和规则| bet365提款限制| 百家乐视频网络游戏| 百家乐官网技巧娱乐博彩| 百家乐路单纸下载| 百家乐官网游戏合法吗| 百家乐怎样赢| 同乐城百家乐官网娱乐城| 唐河县| 永利博百家乐的玩法技巧和规则| 百家乐官网在线赌场娱乐网规则| 西盟| 百家乐庄牌| 凯时百家乐技巧| 百家乐官网洗码全讯网| 太阳城娱乐网址| 百家乐注册送免费金| 澳门百家乐官网玩法心得技巧 | 百家乐注册下注平台| 网上百家乐官网正规代理| 香港六合彩报码| 女神百家乐娱乐城| 百家乐官网衬衣| 恩施市| 大发888 casino| 北京百家乐网上投注| 真人百家乐官网送钱| 百家乐官网会骗人吗| 大发888游戏怎么玩| 真人百家乐大转轮| 澳门档百家乐官网的玩法技巧和规则 | 百家乐官网合理的投注法| 大发888官方中文网址| 视频百家乐破解| 金杯百家乐官网的玩法技巧和规则 | 百家乐官网牌桌订做| 百家乐官网tt娱乐|