由於本人一直使用的是a家的晶元,所以本次針對fifo的讀寫操作也僅僅是在呼叫quartus ii上的ip核上進行。
針對fifo有兩種使用方式,同步fifo和非同步fifo,同步的不想多說。以下所有操作均為非同步fifo即dcfifo。
針對fifo讀操作的兩種不同設計做一下解釋:normal mode 和show-ahead mode,前者為先來讀請求訊號,接下來乙個時鐘才將q端資料讀出。後者來讀請求訊號,這即將q讀資料讀出。
ip核設定如圖(1)
兩種時序操作如下圖:
normal mode
normal mode:將讀訊號rdreq置高後,下個時鐘才能將q端資料讀出。
show-ahead mode
show-ahead mode:將讀訊號rdreq置高後,該時鐘才能將q端資料讀出,即資料已經在q埠準備好,讀請求一到資料即讀出。
2.針對rdusedw和rdempty的使用。
一般讀取操作判斷fifo中資料都是根據rdusedw和rdempty來決定是否開啟讀操作的。當你讀完fifo內資料的同時,讀埠狀態並不會馬上響應,即rdusedw不會在緊接的時鐘為0,rdempty不會高電平有效。這是由於fifo有讀保護邏輯,所以更新才會慢上兩拍,如果此時再更具該訊號判斷fifo是否可讀必然會處錯誤,所以解決辦法延時乙個時鐘之後再判斷reusedw是否大於0來決定能否開啟下一讀取操作(有先決條件)。
前方高能預警:上述操作針對的情況是讀時鐘 rdclk >= 2wrclk,如果不滿足條件就會導致fifo滿。
因為通過判斷reusedw大於0,開啟讀操作,之後再延時1個時鐘等待reusedw變化,本次讀操作需要兩個時鐘才完成,若不滿足 rdclk >= 2wrclk必然會導致fifo滿狀況的出現。
針對 wrclk < rdclk < 2wrclk情況,一般操作是可以讓fifo中快取一定數量的資料,之後在開始進行讀取操作,這樣fifo中的資料一段一段的讀出就不會有問題。
問題公升級:前提是讀操作和寫操作沒有任何關係:針對wrclk
解決辦法還沒想到,待續!
非同步fifo的讀寫
這裡不討論非同步fifo是如何實現的,而是在實現fifo的前提下,對fifo的讀寫。如下 接收到的資料位00.可能是時序約束問題,在之前我確實沒有約束。改了解碼的編寫後就好了,在此,沒有解碼必須是1個1的解碼,不然就會出錯。但是,位址不夠,我要如何改,現在還不確定。但是解碼必須是1 個 1.控制三態...
實現EasyExcel對Excel讀寫操作
com.alibaba easyexcel 2.1.1 org.apache.poi poi3.17 org.apache.poi poi ooxml 3.17 注意api和easyexcel的版本對應 easyexcel對excel寫操作 1.建立表對應的實體類 import com.alibab...
對UART的FIFO的理解
fifo的必要性。在進行uart通訊時,中斷方式比輪詢方式要簡便且效率高。但是,如果沒有收發fifo,則每傳輸乙個資料 5 8位 都要中斷處理一次,效率仍然不高。如果有了收發fifo,則可以在連續收發若干個資料 可多至14個 後才產生一次中斷,然後一起處理。這就大大提高了收發效率。接收超時問題。如果...