資源描述:
《重讀《異步fifo結構》》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、重讀《異步FIFO結構》[CPLD/FPGA]發(fā)布時間:2009-06-1815:09:18項目中多處需要用到FIFO,傻瓜式的調(diào)用Altera的庫即可完成設計。為了深入了解FIFO的結構,上網(wǎng)找了些資料。異步FIFO只能自己寫。一、關于同步FIFO1、在前面的日志里貼出了一個從網(wǎng)上找的同步FIFO的原代碼,本人進行了稍微修改,原始的文章為:http://space.ednchina.com/Upload/2009/6/18/30d4e845-8448-42fc-bd8d-ce6543759ac5.rar,文章名字叫“同步FIFO原理
2、剖析”。根據(jù)其介紹的同步FIFO原理修改的代碼以及測試激勵:http://space.ednchina.com/Upload/2009/6/18/575687b3-0cbf-4e1b-b3be-12766daa84f7.rar。2、今天有時間重新拜讀了異步FIFO結構(翻譯),文章中講述異步FIFO之前先講述了同步(單時鐘)FIFO。原理雖然和上述的同步FIFO一致,但是有些論述特別是對于"空"和"滿"的判斷個人覺得講的非常精辟。特摘錄一些重點:1)、寫指針指向下一個將要寫入的位置;讀指針指向下一個將要讀取的位置。2)、"空"和"滿"
3、寫指針和讀指針是相等的。但是"滿"或者"空"的決定并不僅僅基于指針的值,而是基于引起指針值相等的操作。如果指針相等的原因是復位或者讀操作,F(xiàn)IFO認為是空;如果原因是寫操作,那么FIFO認為是滿。3)、一般情況下(指非臨界狀況下)讀操作和寫操作同時都在使其指針增加,但是不改變空標志和滿標志的狀態(tài)。在空或滿的臨界狀態(tài)同時讀操作和寫操作都是不允許的。由以上幾點得出"空"和"滿"標志狀態(tài)變化的條件(未包含復位條件):寫操作無條件的清除空標志;write_pointer=(read_pointer+1),讀操作置"空";讀操作無條件的清除滿標
4、志;read_pointer=(write_pointer+1),寫操作置"滿"(包括read_pointer=0,而write_pointer=depth-1的情況,這里與"同步FIFO原理剖析"中稍有不同)。將以上空滿判斷條件稍加改動:a、臨界狀態(tài)下如果同時有讀和寫操作,如果FIFO空,那么只允許寫,如果滿則只允許讀;b、對于空和滿置位操作,文章中論述的基礎是FIFO的深度-depth為2的冪,將深度改為可參數(shù)化的任意整數(shù)的時候,需要對讀和寫到depth-1的位置進行判決。根據(jù)以上改動將文章中提供的FIFO原代碼修改如下(文章中提
5、供的原代碼本身就有問題):http://space.ednchina.com/Upload/2009/6/19/266ec7ec-7779-4780-a9ba-8db4b4e46450.rar;FIFO的測試激勵:http://space.ednchina.com/Upload/2009/6/19/17819c8c-72d0-4130-a0db-ca01fe42e8b0.rar。以下是ModelSim的仿真波形,包含了“寫滿”,以及“讀空”:另外,F(xiàn)IFO的almost_empty,almost_full以及usedw(有效字)信號可
6、以參考我修改的《同步fifo原理剖析》源碼。最后在板子上跑的結果如下:附上QII工程:http://space.ednchina.com/Upload/2009/6/19/3cd341ed-f5c8-4e41-998d-e064122a7544.rar。二、關于異步FIFO異步FIFO的接口信號包括異步的寫時鐘(wr_clk)和讀時鐘(rd_clk)、與寫時鐘同步的寫有效(wren)和寫數(shù)據(jù)(wr_data)、與讀時鐘同步的讀有效(rden)和讀數(shù)據(jù)(rd_data)。為了實現(xiàn)正確的讀寫和避免FIFO的上溢或下溢,通常還應該給出與讀時
7、鐘和寫時鐘同步的FIFO的空標志(empty)和滿標志(full)以禁止讀寫操作。下面給出異步FIFO的功能模塊圖:由上圖可以看出,寫地址產(chǎn)生模塊根據(jù)寫時鐘和寫有效信號產(chǎn)生遞增的寫地址,讀地址產(chǎn)生模塊根據(jù)讀時鐘和讀有效信號產(chǎn)生遞增的讀地址。FIFO的操作如下:在寫時鐘wr_clk的上升沿,當wren有效時,將wr_data寫入雙口RAM中寫地址對應的位置中;始終將讀地址對應的雙口RAM中的數(shù)據(jù)輸出到讀數(shù)據(jù)總線上。這樣就實現(xiàn)了先進先出的功能。寫地址產(chǎn)生模塊還根據(jù)讀地址和寫地址關系產(chǎn)生FIFO的滿標志。當wren有效時,若寫地址+2=讀地
8、址時,full為1;當wren無效時,若寫地址+1=讀地址時,full為1。讀地址產(chǎn)生模塊還根據(jù)讀地址和寫地址的差產(chǎn)生FIFO的空標志。當rden有效時,若寫地址-1=讀地址時,empty為1;當rden無效時,若寫地址