CPLD計數器 |
答題得分者是:addn
|
xfox
一般會員 發表:5 回覆:14 積分:8 註冊:2003-04-18 發送簡訊給我 |
我是做CPLD新手...我利用兩種頻率(2kHZ,16MHZ)合成出我所需的波形,但波形輸出後有時會有遺漏現象,但是我在模擬軟體上所計數又是正常,可麻煩各位大大幫忙一下這問題困擾我很久了又抓不出原因,這樣寫法在程式可以嗎
以下是我的程式碼 module main(RESET,Pulse,OSC,OUT); input RESET,Pulse,OSC; output OUT; reg[20:0] count_pulse,count_OSC,test; reg OUT; parameter Pulse_Set = 90; parameter OSC_Set = 800; always@(posedge Pulse or posedge RESET) begin if(RESET) count_pulse<=0; else begin if(count_pulse == Pulse_Set)begin count_pulse<=0; end else begin count_pulse<=count_pulse 1; end end end always@(posedge OSC or posedge RESET) begin if(RESET) count_OSC<=0; else begin if(count_pulse == 0)begin test=test 1; end if(test == 1) OUT=1; if(count_OSC <= OSC_Set)begin count_OSC<=count_OSC 1; end else OUT=0; if(count_pulse == Pulse_Set)begin count_OSC<=0; test=0; end end end endmodule |
addn
高階會員 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
|
xfox
一般會員 發表:5 回覆:14 積分:8 註冊:2003-04-18 發送簡訊給我 |
|
addn
高階會員 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
您好
由code看起來,count_pulse及count_OSC 分別由2kHZ及16MHZ訊號當clock驅動 而兩clock之間沒任何同步關係,而count_OSC 又有用到count_pulse當條件判斷 所以會造成問題 模擬之所以會沒發現問題,是因為你給的條件涵蓋率不夠, 若都給best case的條件當然模擬不出錯誤的結果 非同步之間的處理方式,非三言兩語能說清楚,請上網查相關資料,或翻翻書本 之前建議用頻率高的16MHZ訊號當clock來驅動count_pulse及count_OSC 兩記數器 而2kHZ訊號當外部異步訊號,將這異步訊號與16MHZ做同步處理後在經上緣或下緣微分處理 就可當count_pulse的致能訊號 大概做法就這樣,請參考看看 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |