全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2446
推到 Plurk!
推到 Facebook!

狀態機同步問題

答題得分者是:ssejack
addn
高階會員


發表:64
回覆:221
積分:202
註冊:2005-03-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-25 21:07:18 IP:218.171.xxx.xxx 未訂閱
各位大大    請問如下圖 我用VHDL寫一狀態機 只要有偵測到INPUT=1時就由idle跳到下一個狀態 可是在clk上緣瞬間,INPUT同時為1 會發生跳到一個未定義的狀態 正常的話不是應該為idle或是下一個狀態嗎 為什麼會這樣呢 我用的軟體max+plusII,在模擬時INPUT以1ns去趨近clk正緣

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-25 22:19:11 IP:203.203.xxx.xxx 未訂閱
你是用模擬的還是實驗結果? 建議你提高 clk 的頻率, 一般至少必須是被取樣信號的2倍以上.
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
阿信
版主


發表:111
回覆:983
積分:813
註冊:2005-03-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-26 11:02:10 IP:211.21.xxx.xxx 未訂閱
要避免這種狀況發生 要使用主從式架構 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-26 13:13:12 IP:59.105.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-26 20:50:38 IP:218.171.xxx.xxx 未訂閱
各位大大     那如果我的INPUT訊號沒辦法與CLK去同步那我該怎麼做呢    請參考下圖 我是要用VHDL來寫8254功能 依照8254的時序圖,我的做法/WR訊號沒有與CLK同步 /WR上緣讓FLAG為1,然後狀態機在CLK正緣偵測到FLAG=1時 就由IDLE狀態跳到LOAD狀態產生讓COUNTER載入的控制訊號,COUNTER在CLK下緣動 作,可是我這樣的做法就有機會讓FLAG=1發生在有問題的時間點 請問實際的8254這部分是怎麼做的呢,可以避免掉我所遇到的問題呢
ssejack
高階會員


發表:87
回覆:143
積分:106
註冊:2005-06-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-10-27 11:36:03 IP:59.105.xxx.xxx 未訂閱
依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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-10-27 20:16:46 IP:218.171.xxx.xxx 未訂閱
    如圖是我做的架構     /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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-10-28 09:10:26 IP:59.105.xxx.xxx 未訂閱
Hi Addn: 我有個建議,將 /WR 由 CLK latch 成 flag; counter & FSM 結合由 /CLK 同步(這樣子就不會 delay 一個 clock cycle),這 Tpwh of CLK 有 30ns (min) 應很足夠! 不知可行嗎? or 方便 po 您的 code 借我試一下?
addn
高階會員


發表:64
回覆:221
積分:202
註冊:2005-03-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-10-28 19:55:53 IP:218.171.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-10-31 08:48:28 IP:59.105.xxx.xxx 未訂閱
Hi Addn:   您的 out_state.vhd 沒有看到耶!是否也方便po 上 simulation waveform (有問題之時間點做個標示!thanks).小的不才,沒看出啥端倪!
addn
高階會員


發表:64
回覆:221
積分:202
註冊:2005-03-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-10-31 18:56:29 IP:218.171.xxx.xxx 未訂閱
引言: Hi Addn: 您的 out_state.vhd 沒有看到耶!是否也方便po 上 simulation waveform (有問題之時間點做個標示!thanks).小的不才,沒看出啥端倪! < face="Verdana, Arial, Helvetica"> 您好 out_state.vhd檔案已加上連結 在測試時請用mode1 以下是我模擬的波形第一張為正常,第二張出現錯誤之波形 正常 錯誤 請參考謝謝
ssejack
高階會員


發表:87
回覆:143
積分:106
註冊:2005-06-27

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-11-01 09:52:45 IP:59.105.xxx.xxx 未訂閱
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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-11-01 19:32:00 IP:218.171.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-11-02 09:19:28 IP:59.105.xxx.xxx 未訂閱
Hi Addn:    我個人的關點是從 8254 data sheet 的時序圖來的, command/load 動作應是非同步的,才會定義出沒有和 CLK 相關之時序限制,counter 的動作就明確限制了這時間的關係,而且CLK 和 /WR & GATE 有定義了幾個特殊條件:    
addn
高階會員


發表:64
回覆:221
積分:202
註冊:2005-03-21

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-11-03 19:09:09 IP:218.171.xxx.xxx 未訂閱
引言: Hi Addn: 我個人的關點是從 8254 data sheet 的時序圖來的, command/load 動作應是非同步的,才會定義出沒有和 CLK 相關之時序限制,counter 的動作就明確限制了這時間的關係,而且CLK 和 /WR & GATE 有定義了幾個特殊條件:
ssejack 大大 看來我得再將8254的時序,從新仔細研究清楚囉 謝謝大大不厭其煩的回覆我的問題 再次謝謝大家的回覆及建議
系統時間:2024-08-29 1:21:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!