FPGA按一下按鍵,對應埠輸出單個脈衝

2021-09-20 11:30:48 字數 3186 閱讀 3786

對於fpga的verilog語言,,,規定乙個變數不能在多個always中被賦值.但是可以在多個alway塊中做判斷--結合狀態機思想

module

state(key,led,clk);

input key;//

輸入按鍵

input clk;//

輸入時鐘48m

output

reg led;//

輸出led

reg state=0;//

記錄按鈕狀態

reg[27:0] cnt=0;//

計數器always@(*)

begin

if(key == 0)//

按下了 state = 1; //

狀態置一

else

if(cnt==48000000)//

到了計數值

state = 0;//

狀態復位

endalways@(posedge

clk)

begin

if(state == 1)//

如果狀態置一

cnt<=cnt+1

'b1;//開始計數

else

cnt<=0;//

鬆開或沒有按下,清零

endalways@(posedge

clk)

begin

if(state == 1)//

如果狀態置一

led <=1;//

燈亮else

led

<=0

;end

endmodule

按下按鍵燈就會亮,如果一直按著燈就會一直亮(

if(key == 0)//按下了

state = 1; //狀態置一

else if(cnt==48000000)//到了計數值

state = 0;//狀態復位

),可以改變一下**,變成按下鬆開燈亮一秒後滅,就是加乙個鬆手檢測,或者做別的修改...

一開始請教的群裡的大神給的**--狀態機思想

module relay(input clk,//

輸入時鐘

input rst,//

輸入復位

input a, //

輸入訊號

output

reg b//

輸出);

reg[3:0] current_state=0,next_state=0;//

現在的狀態,下乙個狀態

reg[27:0] state_cnt=0;//

狀態計數

localparam sidle_state=0;//

空閒localparam sinput_high=1;//

輸入高localparam sinput_low=2;//

輸入低localparam soutput_pluse=3;//

輸出always@(posedge clk or

negedge

rst)

begin

if(~rst)

current_state

<= sidle_state;//

復位空閒

else

current_state

<= next_state;//

把下乙個狀態給它

endalways@(*)

begin

case

(current_state)

sidle_state:

//空閒態

begin

if(a==1)//

輸入為高

next_state <= sinput_high;//

賦為輸入高

else

next_state

<= current_state;//

賦為空閒

endsinput_high:

//輸入高

begin

if(a==0

) next_state = sinput_low;//

賦為輸入低

else

next_state = current_state;//

賦為空end

sinput_low:

//輸入低

begin

next_state = soutput_pluse;//

賦為埠輸出模式

endsoutput_pluse:

begin

if(state_cnt == 48000000

) next_state =sidle_state;

else

next_state = current_state;//

現在的狀態

enddefault: next_state =sidle_state;

endcase

endalways@(posedge clk or

negedge

rst)

begin

if(~rst)

begin

b<=0

;

endelse

begin

case

(next_state)

sidle_state:

//如果是空閒狀態

begin

endsoutput_pluse:

//如果是輸出狀態

b<=1;//

輸出高default

: b

<=0

;

endcase

endend

always@(posedge clk or

negedge

rst)

begin

if(~rst)

state_cnt

<= 0

;

else

if(next_state != current_state)//

如果上乙個狀態和現在的不一樣

state_cnt<=0

;

else

state_cnt

<=state_cnt+1

'b1;

endendmodule

FPGA之外,了解一下中斷

中斷是什麼?中斷的漢語解釋是半中間發生阻隔 停頓或故障而斷開。那麼,在計算機系統中,我們為什麼需要 阻隔 停頓和斷開 呢?舉個日常生活中的例子,比如說我正在廚房用煤氣燒一壺水,這樣就只能守在廚房裡,苦苦等著水開 如果水溢位來澆滅了煤氣,有可能就要發生一場災難了。等啊等啊,外邊突然傳來了驚奇的叫聲 怎...

把玩一下標準輸出

其實這樣子應該是能做遊戲的。終端的英文叫 terminal 就是那個黑黑的視窗 c 語言的命令列程式的輸入和輸出都是在終端裡完成的 輸入的東西交給終端,終端回顯出來給我們看,直到我們按下回車,終端才把我們輸入的內容交給我們寫的 c 語言程式。早年的終端就是乙個螢幕和鍵盤,到了今天就是電腦上的那個叫做...

整理了一下 發個關於埠的

關於埠的有 可能不全 系統服務及木馬預設埠表 win2k server ip策略拒絕多餘埠教程 原創 埠對映是什麼意思?windwos2000server埠對映是這樣做 如何關閉埠?怎樣知道對方的1080埠是否開了?堵住黑客常用的缺口 從禁止埠入手 使用ipsec阻止對tcp135埠的訪問 怎樣封堵...