狀態機同步問題 |
答題得分者是: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
www.ldxy.com.cn/dmtkj/lzq/dzkj/chap-4.PPT 簡體 使用IEEE符號 發表人 - 阿信 於 2005/10/26 11:22:12
|
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 看:
Tww : Pulse width of /WR 95ns (min).
Tdw : Data setup time befor rise edge of /WR. 95ns (min).
Twd : Data hold time after rise edge of /WR. 0ns (min).
worse-case Tww =95ns = Tdw & Twd =0;
如在 /WR rise edge latch 有可能 hold time variation 造成
誤動作,且由 pin define 文字中解釋比較像
/WR = 0 transparent, /WR = 1 hold. 且由 Twg : Gate delay for sample -5ns (min.),如由 /WR rise edge latch.那 Gate 又可提前 5ns 做 load 動作,故 counter 有可能是 double bank. bank1: asynchronous register for initial value load by /WR (level trigger not edge trigger ).
bank2: synchronous load/counting counter. 如改成兩組 register, 一組作 write buffer ( asynchronous load).
再由Gate,CLK 做 synchronous load/count 動作??
|
addn
高階會員 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
如圖是我做的架構 /WR 上緣及條件符和寫入Register及觸動flag為1
control SM clk上緣動作
16 bit counter clk下緣動作 由於/WR可能發生在任何時間點 將Register改成level trigger 一樣要產生flag信號來讓 control SM 來判斷資料已寫入,flag信號也可能發生在任何的時間點上 gate信號也一樣 我將flag及gate信號直接接到control SM 這樣就會發生我第一篇文章 所出現的問題 如果將flag及gate接一D FF與CLK做同步在接到control SM 是可以解決 這個問題可是這樣就跟Data sheet 時序有一點不一樣 會差一個CLOCK去做載入跟HOLD動作 我要怎麼做才能完全符合8254時序,又不會有hold time variation 造成 誤動作呢 還是我的架構要做更動呢 謝謝
|
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方式來測試 如下圖 關於您的建議將 /WR 由 CLK latch 成 flag 可能也會與時序不符,因為/WR訊號是獨立於CLK 就算CLK沒來Register還是要能被寫入 |
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 限制就好了 另有一小疑問,8254 有定義一 TODG ( output delay from fall edge of gate),是否 load 動作是由 fall edge of gate 來 trigger ? 發表人 - ssejack 於 2005/11/01 10:03:53
|
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. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |