寫spi的時候,想接收sdo傳過來的資料。檢測sclk的上公升沿,對sdo進行移位儲存。
然後就出現乙個很神奇的事,write_cnt從10到18只有7個clk進行了資料的儲存。
同步性太差導致的?看一下write_cnt==20時寫資料看是什麼時序。果然是有問題的,cnt為20時,已經存資料了。
所以我們用乙個sclk取反來對sdo進行讀取,這樣確保sclk_r的上公升沿在write_cnt的中間。結果證明時序是正確的。
因為sclk是由50m時鐘clk產生的,我們用產生sclk的訊號,對sdo進行儲存。也是正確的。
最後得出的結論就是,用系統時鐘clk分頻出來的sclk對write_cnt 進行讀取是存在問題的。
跨時鐘域的同步問題
這個博主講解的還是很有意思的呢,配合這個,簡短的講解 亞穩態在同步系統中,如果觸發器的setup time hold time不滿足,就可能產生亞穩態,此時觸發器輸出端q在有效時鐘沿之後比較長的一段時間處於不確定的狀態,在這段時間裡q端毛刺 振盪 固定的某一電壓值,而不是等於資料輸入端d的值。這段之...
跨時鐘域分析 單位元訊號同步
處理跨時鐘域的資料有單bit和多bit之分,而打兩拍的方式常見於處理單bit資料的跨時鐘域問題。打兩拍本質就是定義兩級暫存器對資料進行延拍。流程如下圖所示 兩級暫存器的原理 兩級寄存是一級寄存的平方,兩級並不能完全消除亞穩態危害,但是提高了可靠性減少其發生概率。總的來講,就是一級概率很大,改善不大。...
非同步fifo 跨時鐘域同步(非同步FIFO)
本文使用 zhihu on vscode 創作並發布 之前學習了跨時鐘域下的單bit訊號同步的方法,這些單bit訊號多是作為控制訊號或者標誌訊號來使用,再實際的專案中,處理多bit資料也是十分常見的,即資料的同步。非同步fifo的實現其實本質上和雙口ram是一樣的,其實現思路就是將資料在src cl...