06分頻計數器之LED閃爍1

2022-09-11 15:21:24 字數 3470 閱讀 2101

一設計功能是:讓led燈每1秒亮一次,再滅一秒,閃爍時間週期為2秒。

二分頻的介紹:

(一)設計方式:ip核和自己動手寫。

(二)對於分頻的構成:乙個是計數器,還有時鐘翻轉。方法一是計滿整個週期,一半週期為高,一半為低。第二種是,計滿半個時鐘週期,就反轉。

三設計輸入:

(一)分頻計數器模組

功能是產生乙個1秒的計數器:引數化設計方便修改和**時間縮小

parametert1s=28'd49_999_999;

//div counter

reg[27:0]div_cnt;

always@(posedgeclk)begin

if(rst==0)

div_cnt<=28'd0;

elseif(div_cnt==t1s)

div_cnt<=28'd0;

else

div_cnt<=div_cnt+1'b1;

end

(二)1秒脈衝的標誌訊號的產生模組

由於led燈的一秒滅和一秒亮,等效為乙個占空比為50%的方波的高電平控制led燈亮。所以只需讓led的一秒脈衝標誌訊號,每計時到1秒反轉一次,就能

控制led的一秒閃爍。

//the flag of one_s_flag

regone_s_flag;

always@(posedgeclk)begin

if(rst==0)

one_s_flag<=1'b0;

elseif(div_cnt==(t1s-1))begin

one_s_flag<=1'b1;

end

elsebegin

one_s_flag<=1'b0;

end

end

(三)1秒脈衝的標誌訊號控制led亮滅

由第二部分的介紹可知,led燈的亮滅與脈衝標誌訊號的電平狀態一致。

//the control of led

always@(posedgeclk)begin

if(rst==0)begin

led<=1'b0;

end

elseif(one_s_flag==1)begin

led<=~led;

end

elsebegin

led<=led;

end

end

(四:**波形)

四設計總結:

(一)設計:照圖施工。根據下面各個訊號的時序圖,直接設計各模組即可。

(二)關鍵點**時間縮小:一是**中引數縮小。二是在功能模組,修改引數為小的。三是在modelsim中**執行時間修改大單位:ns--us-ms.(當**時間為2秒等)

led_flash #(.t1s(99)) led_flash_m0(

.clk(clk),

.rst(rst),

.led(led)

(三)遇到問題:問題一是在**檔案testbench中,**時間沒有達到2秒,**中led燈未翻轉。

解決方法:使復位訊號rst為高的**時間達到2秒

問題二是在ise中工程燒寫到賽靈思的開發板,沒有閃爍。

解決方法:修改管腳約束條件和讓復位訊號為低時復位,成功實現閃爍功能(原因是,管腳約束條件的格式錯誤,led與按鍵相連,那個按鍵的電平狀態與rst一樣。按鍵預設為高,則一直處於復位狀態對於高電平復位來說。)

下面是管腳約束條件:

net "clk" loc=p24 | iostandard=lvcmos33;

net "rst" loc=p94| iostandard=lvcmos33;

net "led" loc=p92| iostandard=lvcmos33;

計數器驅動LED閃爍

一 fpga中最常見的就是計數器,本例為用fpga控制乙個led,假設電路中led低電平點亮,fpga控制使乙個led以1ms速度翻轉。二 分析思路 核心為寫乙個計數器,計數器計數到1ms時反轉led對應的管腳,假設fpga主頻50m,週期為20ns。所以計數器計數為1 000 000 20 1 4...

3分頻器 verilog解析

分頻分為偶分頻和奇分頻。分頻器從某種程度上來講是計數器有計畫的輸出。1.偶數倍分頻 偶數倍分頻應該是大家都比較熟悉的分頻,通過計數器計數是完全可以實現的。如進行n倍偶數分頻,那麼可以通過由待分頻的時鐘觸發計數器計數,當計數器從0計數到n 2 1時,輸出時鐘進行翻轉,並給計數器乙個復位訊號,使得下乙個...

試驗二 分頻器實驗

對開發板上面的50mhz 輸入時鐘進行二的整數次冪分頻,冪數分別為 18,19,20,21,22,23,24,25,然後用分頻後的時鐘來控制開發板上面八個led 閃亮,觀 察分頻的效果。module fre clk,rst,led0,led1,led2,led3,led4,led5,led6,led...