同步fifo的串并_同步FIFO设计Spec(示例代码)
為什么要寫Spec文檔:
記得剛進公司實習的時候,導師安排我寫一個SM4算法AHB接口模塊,要求寫代碼前
寫出詳細的設計文檔,詳細到什么程度呢,看著文檔就能把代碼寫好,作為一個只
在學校寫過數字鐘的小白來說有點不太理解,后面看的Spec多了,好的Spec的確能夠看
著Spec把代碼給敲了,能夠方便別人理解你的設計思路,特別是當你遇到一份注釋不太
清楚,邏輯難懂的代碼時,是多么渴望來一份Spec幫助理解。
網頁上編輯圖和格式不是很方便,就寫的簡單點吧
1.同步FIFO(First In First Out):一種先進先出的數據緩存器,同步FIFO是指讀寫為同一時鐘,
主要做數據緩存。本設計用8*256的雙口RAM來做,主要是對RAM的控制,產生空、滿信號。
2.總體模塊劃分
子模塊dpram.v 雙口RAM的描述
子模塊fifo_ctrl.v 對RAM的控制,產生空滿信號
Top層 fifo_sync.v 對兩個子模塊的例化
(這里能用圖來描述最好了)
3.dpram模塊
信號列表
clk?????? IN???????? 時鐘
rst_n??? IN???????? 復位
wr_en??? IN??????? 寫使能
rd_en??? IN??????? 讀使能
wr_data[7:0]? IN ?? 寫數據
wr_addr[7:0]? IN ?? 寫地址
rd_addr[7:0]?? IN??? 讀地址
rd_data[7:0]? OUT? 讀數據
定義一塊memory? 8*256
電路圖:
(這里用電路把讀寫操作的電路圖畫好,公司服務器上無法編輯就用文字代替了)
寫操作,wr_en控制wr_data寫到相應地址的memory里
讀操作,rd_en控制相應地址的memory里的數據給rd_data,寄存器輸出
4.fifo_ctrl模塊
信號列表:
clk?????? IN???????? 時鐘
rst_n??? IN???????? 復位
wr_en??? IN??????? 寫使能
rd_en??? IN??????? 讀使能
wr_addr[7:0]? OUT? 輸出寫地址
rd_addr[7:0]? OUT? 輸出讀地址
empty????? OUT?????? FIFO空信號
full ? ?? ???? OUT?????? FIFO滿信號
電路圖:
寫地址計數器,寫使能和非滿時計數器計數,寫計數器滿時清零,讀地址計數器同理
空滿信號的生成通過多用一位標志位的方式來實現,即地址信號加最高位標志位得到讀寫指針
讀寫標志位復位清零,讀寫使能有效&&讀寫計數器滿 時翻轉
空信號:讀寫指針相同時產生
滿信號:讀寫地址相同&&最高位讀寫標志不同產生
//注:為什么這樣可以 實現空滿信號產生:
//(1)讀寫地址相同時產生空或滿信號
//(2)讀指針追上寫指針時為空信號,寫指針追上讀指針時為滿信號
//(3)FIFO是先進先出,先寫進來的數據先讀出去,所以空滿信號不能反
5.fifo_sync模式
例化上面兩個子模塊
信號列表:
clk?????? IN???????? 時鐘
rst_n??? IN???????? 復位
wr_en??? IN??????? 寫使能
rd_en??? IN??????? 讀使能
wr_data[7:0] IN?? 寫數據
rd_data[7:0] OUT ? 讀數據
wr_full????? OUT??????? FIFO滿信號
rd_empty OUT??????? FIFO空信號
Test plan暫時還沒寫,先占個坑,后續補上,如果覺得哪里有問題或者說得不清楚評論指出來,我及時修改
總結
以上是生活随笔為你收集整理的同步fifo的串并_同步FIFO设计Spec(示例代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wget连接指定端口_新技能:wget参
- 下一篇: Java-if选择结构