一設計功能是:讓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...