這個系列會帶大家入門Verilog硬體描述語言~~ 如果沒辦法開聲音有字幕可以看呦~~ 前備知識相關影片連結: 背景知識6 有限狀態機Finite State ... ... <看更多>
「verilog debounce」的推薦目錄:
verilog debounce 在 一個Verilog 程式,用於偵測按鍵輸入次數並將其顯示在Seg-7 ... 的美食出口停車場
... Verilog+HDL+按鍵彈跳控制 · FPGA Key Debounce - Debouncing pushbuttons in verilog. youtube.com. FPGA Key Debounce - Debouncing pushbuttons in verilog. 此影片是 ... ... <看更多>
verilog debounce 在 Verilog code for debouncing buttons on FPGA - Pinterest 的美食出口停車場
Nov 23, 2017 - Verilog code for debouncing buttons, debounncing buttons on FPGA, debouncing button in Verilog. ... <看更多>
verilog debounce 在 [問題] verilog 計時器要如何停止- 看板Electronics - 批踢踢實業坊 的美食出口停車場
※ 引述《pikachu2005 (Pikachu)》之銘言:
: 請問各位,我在寫ㄧ個計數器的程式~
: input:clk1 clk2 reset
: output:out3
: 動作是
: 有兩個方波pulse輸入,分別是clk1跟clk2
: 當偵測reset為負緣時,就把計時的值清除為0
: reset放開時,計時器同時開始對f1與f2計數~
: 當f1值計數到5次時,就把f2值丟給out3輸出並停止計數(out3就不會在變)
: 當下一次按下reset時~整個電路在重新計時~
你的 code 懶的看 (因為太鳥)
assume clk1, clk2 async.
//clk1 domain
always @(...)
if(!rst_) f1 <= 0;
else (f1_en) f1 <= f1 + 1;
assign f1_en = f1 < 5;
//clk2 domain
always @(....)
if(!rst_) out3 <= 0;
else if(f2_en) out3 <= out3 + 1;
// clk1, clk2 crossing
always @(posedge clk1)
f1_en_d <= f1_en; // clk1 sampling
always @(posedge clk2)
begin
f1_en_syn1 <= f1_en_d; //clk2 synchronizing
f1_en_syn2 <= f1_en_syn1;
end
assign f2_en = f1_en_syn2;
除非 clk1, clk2 為同步, 即 phase locked,
否則 clk1, clk2 非同步, 為了必免 signal crossing clocks meta-stable
f1_en 必需經過 synchronizer (1b), resynch. to clk2
out3 直接計數, 若不能更動 請再改 code
另外, reset 訊號 需要 debounce,
: 我寫的程式如下:
: ///////////////////////////////////////////////////////////////////
: module counter1(reset,clk1,clk2,out3);
: input reset,clk1,clk2;
: output [8:0] out3;
: reg [8:0] out1;
: reg [8:0] out2;
: reg [8:0] out3;
: reg ee;
: //---------------------------------------//
: always@(posedge clk1 or negedge reset)
: begin
: if (!reset)
: out1=0;
: else if(ee==1)
: out1=out1+1;
: end
: //---------------------------------------//
: always@(posedge clk2 or negedge reset)
: begin
: if (!reset)
: out2=0;
: else if (out1<5)
: begin
: out2=out2+1;
: ee=1;
: end
: else
: begin
: ee=0;
: out3=out2;
: end
: end
: //---------------------------------------//
: endmodule
: ///////////////////////////////////////////////////////////////////
: 但是燒錄到FPGA裡面,用LED接出來看,結果還是錯誤(輸出的值亂跳)~@@
: 因為我之前沒上過verilog,自己看書學,為了解決這問題,借了幾本verilog的書~
: 試了很久還是失敗,請問我這程式這樣寫是不是有些用法錯誤?
: 另外請問,verilog裡面可以放多個always@()這個東西嗎?因為我看到範例程式
: 好像都只寫ㄧ個always@()?
: 謝謝~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.234.183
※ 編輯: colinshih 來自: 122.116.234.183 (01/09 01:20)
... <看更多>