91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

基于FPGA的計數(shù)器設(shè)計

CHANBAEK ? 來源:小小研究生 ? 作者:xxyjs2020 ? 2023-06-23 16:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

數(shù)電基礎(chǔ)

關(guān)于時序邏輯設(shè)計的部分依然強(qiáng)烈推薦mooc上華科的數(shù)字電路與邏輯設(shè)計。

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

設(shè)計規(guī)劃

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

圖片

編寫代碼

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


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


 //cnt:計數(shù)器計數(shù),當(dāng)計數(shù)到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燈,每當(dāng)計數(shù)滿標(biāo)志信號有效時取反
 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 標(biāo)識符 常量類似,這里使用參數(shù)的方式定義常量。在RTL代碼中實(shí)例化該模塊時,如果需要兩個不同計數(shù)值的計數(shù)器,只需要修改常數(shù)值。使用testbench仿真時也需要實(shí)例化,0.5s才能看到led_out的變化,仿真時間過長。如果我們直接修改參數(shù)縮短時間就能看到效果。parameter定義的是局部參數(shù),只在本模塊中有效,不會影響實(shí)際值。

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

led_out的變化條件:時鐘上升沿和復(fù)位有效(復(fù)位下降沿)。LED燈狀態(tài)的變化有兩個,當(dāng)復(fù)位時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電平翻轉(zhuǎn)一次,產(chǎn)生一個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

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

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

對比波形

圖片

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

分配管腳

圖片

全編譯后上板驗(yàn)證

圖片

圖片

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

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

    關(guān)注

    1660

    文章

    22432

    瀏覽量

    637081
  • 計數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2318

    瀏覽量

    98256
  • 數(shù)字電路
    +關(guān)注

    關(guān)注

    193

    文章

    1659

    瀏覽量

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

    關(guān)注

    14

    文章

    2064

    瀏覽量

    63439
  • 時鐘信號
    +關(guān)注

    關(guān)注

    4

    文章

    507

    瀏覽量

    30018
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    06 06_BCD計數(shù)器設(shè)計與驗(yàn)證 - 第8節(jié) #硬聲創(chuàng)作季

    fpga計數(shù)器函數(shù)代碼
    充八萬
    發(fā)布于 :2023年08月18日 02:17:16

    06 06_BCD計數(shù)器設(shè)計與驗(yàn)證 - 第9節(jié)

    fpga計數(shù)器函數(shù)代碼
    充八萬
    發(fā)布于 :2023年08月18日 02:18:07

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

    fpga計數(shù)器函數(shù)代碼
    充八萬
    發(fā)布于 :2023年08月18日 03:05:33

    07 1-6 FPGA仿真工具的使用 2 1-6 FPGA仿真工具的使用 2 - 第4節(jié) #硬聲創(chuàng)作季

    fpga計數(shù)器函數(shù)代碼
    充八萬
    發(fā)布于 :2023年08月18日 03:06:23

    07 07_Nios II軟件框架結(jié)構(gòu)深入剖析1 - 第8節(jié)

    fpga計數(shù)器函數(shù)代碼
    充八萬
    發(fā)布于 :2023年08月18日 03:21:38

    07 07_Xilinx嵌入式裸機(jī)硬件編程原理 - 第2節(jié)

    fpga計數(shù)器函數(shù)代碼
    充八萬
    發(fā)布于 :2023年08月18日 03:24:11

    #硬聲創(chuàng)作季

    fpga計數(shù)器函數(shù)代碼
    充八萬
    發(fā)布于 :2023年08月18日 03:25:02

    07 07_Xilinx嵌入式裸機(jī)硬件編程原理 - 第4節(jié)

    fpga計數(shù)器函數(shù)代碼
    充八萬
    發(fā)布于 :2023年08月18日 03:25:52

    07 07_Xilinx嵌入式裸機(jī)硬件編程原理 - 第10節(jié) #硬聲創(chuàng)作季

    fpga計數(shù)器函數(shù)代碼
    充八萬
    發(fā)布于 :2023年08月18日 03:30:57

    FPGA計數(shù)器時間問題

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

    FPGA如何實(shí)現(xiàn)按鍵除抖

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

    怎么從FPGA輸入流到FX2LP?

    CycONEV(因?yàn)锳N61345使用XILIXX-SARTAN6 FPGA)。我用USB控制中心和流線型軟件來顯示來自FX2LP的數(shù)據(jù)。數(shù)據(jù)從FPGASTRONSGOOD(計數(shù)器從0000到FFFF)出來
    發(fā)表于 10-22 10:37

    FPGA計數(shù)器Spartan3 Nexys板不起作用

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

    基于FPGA的PWM計數(shù)器改進(jìn)設(shè)計

    簡單改變FPGA計數(shù)器規(guī)格使作為DAC功能PWM計數(shù)器的紋波降低。
    發(fā)表于 04-06 11:11 ?2263次閱讀
    基于<b class='flag-5'>FPGA</b>的PWM<b class='flag-5'>計數(shù)器</b>改進(jìn)設(shè)計