狀態機同步問題 |
答題得分者是:ssejack
|
addn
高階會員 ![]() ![]() ![]() ![]() 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
|
㊣
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
|
阿信
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:111 回覆:983 積分:813 註冊:2005-03-10 發送簡訊給我 |
要避免這種狀況發生
要使用主從式架構
CLK輸入前 Data本來就需要一段穩定時間
主從式架構 可前緣取樣 後緣確認
就不會發生不確定狀態
你的Input的短脈波 如果是雜訊就會被忽略
如果那就是信號 如正大所說 你要提高CLK頻率
www.csie.mcu.edu.tw/~wangch/logic/chpter8.ppt
|
ssejack
高階會員 ![]() ![]() ![]() ![]() 發表:87 回覆:143 積分:106 註冊:2005-06-27 發送簡訊給我 |
Hi Addn:
進入 unknow 的 state 的原因就如兩位板大所述;因為 FSM 的 state register 不只有一個,每一個 register 的 setup/hold time 多少有些差異,當 input pulse 太窄造成 state register 有些已 update 有些沒 update 就進入 unknow state!
一般 switch signal 的 de-bounce 作法可以參考,如信大之主從式結構,or 將 input latch 1個 clk 週期以上再去當 FSM 的狀態參考值就應當 OK! EXP:
if (RST_n = '0')then input_for_FSM <='0'; elsif(CLK 'event and CLK ='1')then if(INPUT ='1')then input_for FSM <= '1'; else input_for_FSM <= '0'; end if; end if;將原 FSM 用的 INPUT 改成 input_of_FSM |
addn
高階會員 ![]() ![]() ![]() ![]() 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
|
ssejack
高階會員 ![]() ![]() ![]() ![]() 發表:87 回覆:143 積分:106 註冊:2005-06-27 發送簡訊給我 |
依Data sheet 看:
|
addn
高階會員 ![]() ![]() ![]() ![]() 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
如圖是我做的架構
|
ssejack
高階會員 ![]() ![]() ![]() ![]() 發表:87 回覆:143 積分:106 註冊:2005-06-27 發送簡訊給我 |
|
addn
高階會員 ![]() ![]() ![]() ![]() 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
引言: Hi Addn: 我有個建議,將 /WR 由 CLK latch 成 flag; counter & FSM 結合由 /CLK 同步(這樣子就不會 delay 一個 clock cycle),這 Tpwh of CLK 有 30ns (min) 應很足夠! 不知可行嗎? or 方便 po 您的 code 借我試一下?ssejack 大大 您願意幫我測試code當然好阿 我的code如下 http://addn98.myweb.hinet.net 我在測試時將兩個vhdl code用create symbal方式來測試 如下圖 |
ssejack
高階會員 ![]() ![]() ![]() ![]() 發表:87 回覆:143 積分:106 註冊:2005-06-27 發送簡訊給我 |
|
addn
高階會員 ![]() ![]() ![]() ![]() 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
|
ssejack
高階會員 ![]() ![]() ![]() ![]() 發表:87 回覆:143 積分:106 註冊:2005-06-27 發送簡訊給我 |
Hi Addn
以您標示之有問題之狀態機是由 gate_latch_flag 造成的,不是/WR 造成的,不曉得您有問題發生時的時間是多少(from rise edge of gate to rise edge of CLK) 因為您的 gate_latch_flag 是由 gate rise trigger 成 Logic"1" 這有tco, routing delay 到每一個 FSM register 有 tpd ,另 FSM register 的 tsu 不知道須要多少, 我用EPM3128-10 fit 出來 tco 要 8ns,tpd <3ns,tsu假設因 gate_latch_flag 和 CLK tpd 抵消;那至少須要 8ns的提前時間 rise edge of gate to rise edge of CLK !
我猜或許是因為如此發生的吧,只要定義出適當的setup time 限制就好了
|
addn
高階會員 ![]() ![]() ![]() ![]() 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
引言: Hi Addn 以您標示之有問題之狀態機是由 gate_latch_flag 造成的,不是/WR 造成的,不曉得您有問題發生時的時間是多少(from rise edge of gate to rise edge of CLK) 因為您的 gate_latch_flag 是由 gate rise trigger 成 Logic"1" 這有tco, routing delay 到每一個 FSM register 有 tpd ,另 FSM register 的 tsu 不知道須要多少, 我用EPM3128-10 fit 出來 tco 要 8ns,tpd <3ns,tsu假設因 gate_latch_flag 和 CLK tpd 抵消;那至少須要 8ns的提前時間 rise edge of gate to rise edge of CLK ! 我猜或許是因為如此發生的吧,只要定義出適當的setup time 限制就好了 另有一小疑問,8254 有定義一 TODG ( output delay from fall edge of gate),是否 load 動作是由 fall edge of gate 來 trigger ? 發表人 - ssejack 於 2005/11/01 10:03:53您好 /WR也會造成這個現象,可是我之前將CODE亂改了一下 後來我再對/WR做模擬時已經沒辦法出現原來有問題的狀態波形了 基本上/WR,gate的flag電路是一樣的所以會造成相同的問題 我才請您用mode1來測試 至於8254的真正架構內部電路其實偶是不知道啦,我只是依功能去猜 可能的架構再用vhdl code寫出,可不一定正確喔 以gate來說一波形圖看起來似乎是有定義出適當的setup time 限制 可是我們以使用8254的觀點來看 不是直接就灌給8254/WR與gate訊號,而不用去注意與clk之間的限制 的時間關西嗎?以單晶片來控制8254為例,規劃好8254寫入計數值,產生控制 的gate訊號,好像都不用管clk的狀況為何,且可能在任何時間點對8254做動作 所以我也覺得怪怪的,不曉得我的看法這樣對不對 |
ssejack
高階會員 ![]() ![]() ![]() ![]() 發表:87 回覆:143 積分:106 註冊:2005-06-27 發送簡訊給我 |
|
addn
高階會員 ![]() ![]() ![]() ![]() 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |