精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

基于FPGA的計數器設計

CHANBAEK ? 來源:小小研究生 ? 作者:xxyjs2020 ? 2023-06-23 16:51 ? 次閱讀

數電基礎

關于時序邏輯設計的部分依然強烈推薦mooc上華科的數字電路與邏輯設計。

計數器可以分為同步和異步計數器,2進制、10進制和任意進制計數器,加法和減法計數器。同步和異步是指觸發器是否都由同一個時鐘信號控制。一個觸發器能存儲1位二進制數,所以由N個觸發器構成N位寄存器。例如3個JK觸發器可以存儲000-111種狀態。在數電的原理方面,mooc上講解的很清晰,可以自行學習同步或異步的二進制寄存器、使用復位清零和反饋置數將M進制構成N進制(N

設計規劃

本例將采用一個外部時鐘信號,一個復位鍵和一個LED燈來實現1s內LED閃爍(亮0.5s滅0.5s)。這種計時的功能在FPGA中是通過計數器完成的: 經歷一個時鐘周期,計數器+1 ,我們只需要計算出計數截止的值,就可以完成計時。由于采用的50MHz時鐘頻率,也就是1s產生510e7個時鐘。那么亮滅0.5s就是需要計2.510e7個數。計數器從0-24999999,2^24<24999999<2^25,因此需要25個觸發器,即25位寄存器。這個計數過程是:復位鍵生效時計數器歸零,釋放后的第一個時鐘上升沿開始計數,從0計到2499999時LED燈改變狀態,計數器歸零重新開始計數,到2499999時LED燈改變狀態...

圖片

編寫代碼

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


 reg [24:0] cnt; //經計算得需要25位寬的寄存器才夠500ms


 //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;


 //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 == CNT_MAX)
 led_out <= ~led_out;
 endmodule

代碼注釋:與#define 標識符 常量類似,這里使用參數的方式定義常量。在RTL代碼中實例化該模塊時,如果需要兩個不同計數值的計數器,只需要修改常數值。使用testbench仿真時也需要實例化,0.5s才能看到led_out的變化,仿真時間過長。如果我們直接修改參數縮短時間就能看到效果。parameter定義的是局部參數,只在本模塊中有效,不會影響實際值。

我們觀察cnt和led_out的變化條件:計數器發生改變的條件有兩個,一個是時鐘上升沿,一個是復位有效(復位下降沿)。計數器發生的改變有兩個,要么+1要么清零。清零條件有兩個:復位和溢出。因此第一個always塊中有三個判斷條件:復位和溢出時清零,其他的時候+1。

led_out的變化條件:時鐘上升沿和復位有效(復位下降沿)。LED燈狀態的變化有兩個,當復位時LED燈為低電平,溢出時取反。

圖片

編寫testbench

`timescale 1ns/1ns
module tb_counter();


//reg define
reg sys_clk;
reg sys_rst_n;


//wire define
wire led_out;


 //初始化輸入信號
 initial begin
 sys_clk = 1'b1;
 sys_rst_n <= 1'b0;
 #20
 sys_rst_n <= 1'b1;
 end


 //sys_clk:每10ns電平翻轉一次,產生一個50MHz的時鐘信號
 always #10 sys_clk = ~sys_clk;


 //---------------------flip_flop_inst----------------------
 counter
 #(
 .CNT_MAX (25'd24 ) 
 )
 counter_inst(
 .sys_clk (sys_clk ), 
 .sys_rst_n (sys_rst_n ), 
 .led_out (led_out ) 
 );


 endmodule

初始化:時鐘高電平,復位低電平,20s延遲后復位高電平。

實例化:此處的參數只對該模塊有效,想要改變這個模塊里的參數數值,只需要在這里改變即可。這里設置成24是為了方便觀察,節省時間。

對比波形

圖片

24個時鐘脈沖輸出就會取反,同理trl文件中24999999個脈沖(0.5s)之后LED燈會改變狀態,實現1s內閃爍。

分配管腳

圖片

全編譯后上板驗證

圖片

圖片

LED燈在1s內閃爍,且S1一直按LED燈會一直亮(S1按下去為低電平,復位有效,led_out=0,LED燈亮,和預期一致。

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

    關注

    1626

    文章

    21671

    瀏覽量

    601900
  • 計數器
    +關注

    關注

    32

    文章

    2254

    瀏覽量

    94360
  • 數字電路
    +關注

    關注

    193

    文章

    1600

    瀏覽量

    80502
  • 觸發器
    +關注

    關注

    14

    文章

    1996

    瀏覽量

    61053
  • 時鐘信號
    +關注

    關注

    4

    文章

    445

    瀏覽量

    28511
收藏 人收藏

    評論

    相關推薦

    06 06_BCD計數器設計與驗證 - 第8節 #硬聲創作季

    fpga計數器函數代碼
    充八萬
    發布于 :2023年08月18日 02:17:16

    06 06_BCD計數器設計與驗證 - 第9節

    fpga計數器函數代碼
    充八萬
    發布于 :2023年08月18日 02:18:07

    07 1-6 FPGA仿真工具的使用 2 1-6 FPGA仿真工具的使用 2 - 第3節

    fpga計數器函數代碼
    充八萬
    發布于 :2023年08月18日 03:05:33

    07 1-6 FPGA仿真工具的使用 2 1-6 FPGA仿真工具的使用 2 - 第4節 #硬聲創作季

    fpga計數器函數代碼
    充八萬
    發布于 :2023年08月18日 03:06:23

    07 2.5-第二章 高速ADC接口的FPGA實現-源同步數據接口的設計 - 第1節 #硬聲創作季

    fpga計數器函數代碼
    充八萬
    發布于 :2023年08月18日 03:07:14

    07 5_工具篇_Vivado軟件的使用 - 第2節

    fpga計數器函數代碼
    充八萬
    發布于 :2023年08月18日 03:08:56

    07 5_工具篇_Vivado軟件的使用 - 第8節 #硬聲創作季

    fpga計數器函數代碼
    充八萬
    發布于 :2023年08月18日 03:14:01

    07 07_Nios II軟件框架結構深入剖析1 - 第9節

    fpga計數器函數代碼
    充八萬
    發布于 :2023年08月18日 03:22:29

    07 07_Xilinx嵌入式裸機硬件編程原理 - 第5節 #硬聲創作季

    fpga計數器函數代碼
    充八萬
    發布于 :2023年08月18日 03:26:43

    #硬聲創作季 #硬聲創作季

    fpga計數器函數代碼
    充八萬
    發布于 :2023年08月18日 03:28:25

    FPGA計數器時間問題

    這個計數器是0.5秒的,晶振是50MB。我想改變25000000這個的數值,從而改變時間,但是不行。后來我改變buffer=buffer+1就可以了,成了buffer=buffer+2,時間就改變了。能告訴我為什么嗎?
    發表于 08-22 10:46

    FPGA如何實現按鍵除抖

    抖動!當按下按鍵時,要是幸運的話結果會如圖:這是比較罕見的,比較常見的應該如下圖:【FPGA計數器】假設你在FPGA中加入了一個計數器,讓后將其顯示出來。如下圖:按下10次得到的結果可
    發表于 08-01 18:11

    怎么從FPGA輸入流到FX2LP?

    CycONEV(因為AN61345使用XILIXX-SARTAN6 FPGA)。我用USB控制中心和流線型軟件來顯示來自FX2LP的數據。數據從FPGASTRONSGOOD(計數器從0000到FFFF)出來
    發表于 10-22 10:37

    FPGA計數器Spartan3 Nexys板不起作用

    我已經寫了這段代碼。我希望它可以作為一個計數器,這樣每一秒都可以。增加顯示屏上顯示的數字。但由于某種原因不會增加,并保持為零。我花了3天時間對它進行調試,并且很高興得到一些關于為什么這不起作用的反饋。這是代碼:http://pastebin.com/Ep96QhHp
    發表于 03-09 07:41

    基于FPGA的PWM計數器改進設計

    簡單改變FPGA計數器規格使作為DAC功能PWM計數器的紋波降低。
    發表于 04-06 11:11 ?1958次閱讀
    基于<b class='flag-5'>FPGA</b>的PWM<b class='flag-5'>計數器</b>改進設計