基于Verilog HDL語(yǔ)言的32X8 FIFO設(shè)計(jì)
摘要:介紹了FIFO的基本概念、設(shè)計(jì)方法和步驟,采用了一種新穎的讀、寫地址寄存器和雙體存儲(chǔ)器的交替讀、寫機(jī)制,實(shí)現(xiàn)了FIFO的基本功能,同時(shí)使本32X8 FIFO擁有可同時(shí)讀、寫的能力,完全基于Verilog HDL語(yǔ)言實(shí)現(xiàn)了電路功能并應(yīng)用Synopsys公司的DesignCompiler和VCS對(duì)其進(jìn)行綜合、仿真。
本文引用地址:http://www.biyoush.com/article/189963.htm對(duì)基于單體存儲(chǔ)器的FIFO,作為一種數(shù)據(jù)緩沖器,其數(shù)據(jù)存放結(jié)構(gòu)和RAM是一致的,只是存取方式有所不同。因RAM中的各存儲(chǔ)單元可被隨機(jī)讀寫,故FIFO的隊(duì)首位置及隊(duì)列長(zhǎng)度均可浮動(dòng)。為此,需要用兩個(gè)地址寄存器,分別存儲(chǔ)讀地址(即隊(duì)首元素地址)和寫地址(即隊(duì)尾元素地址加1)。在讀寫過程中FIFO所存儲(chǔ)的信息并不移動(dòng),而是通過改變讀地址或?qū)懙刂穪碇甘娟?duì)首隊(duì)尾。
本32X8 FIFO的設(shè)計(jì),采用了雙體存儲(chǔ)器的交替讀寫機(jī)制,使得在對(duì)其中一個(gè)存儲(chǔ)器寫操作的同時(shí)可以對(duì)另一個(gè)存儲(chǔ)器進(jìn)行讀操作;對(duì)其中一個(gè)存儲(chǔ)器讀操作的同時(shí)可以對(duì)另一個(gè)存儲(chǔ)器進(jìn)行寫操作。實(shí)現(xiàn)了高速數(shù)據(jù)緩沖,速度比單體存儲(chǔ)器的FIFO提高了一倍。
1 指針以及滿空信號(hào)的產(chǎn)生
空/滿標(biāo)志的產(chǎn)生是FIFO的核心部分。如何正確設(shè)計(jì)此部分的邏輯,直接影響到FIFO的性能。
對(duì)于同步FIFO,讀寫指針都指向一個(gè)內(nèi)存的初始位置,每進(jìn)行一次讀寫操作,相應(yīng)的指針就遞增一次,指向下一個(gè)內(nèi)存位置。當(dāng)指針移動(dòng)到了內(nèi)存的最后一個(gè)位置時(shí),它又重新跳回初始位置。在FIFO非滿或非空的情況下,這個(gè)過程將隨著讀寫控制信號(hào)的變化一直進(jìn)行下去。如果FIFO處于空的狀態(tài),下一個(gè)讀動(dòng)作將會(huì)導(dǎo)致向下溢出(underflow),一個(gè)無(wú)效的數(shù)據(jù)被讀出;同樣,對(duì)于一個(gè)滿了的FIFO,進(jìn)行寫動(dòng)作將會(huì)導(dǎo)致向上溢出(overflow),一個(gè)有用的數(shù)據(jù)被新寫入的數(shù)據(jù)覆蓋。這兩種情況都屬于誤動(dòng)作,因此需要設(shè)置滿和空兩個(gè)信號(hào),對(duì)滿信號(hào)置位表示FIFO處于滿狀態(tài),對(duì)滿信號(hào)復(fù)位表示FIFO非滿,還有空間可以寫入數(shù)據(jù);對(duì)空信號(hào)置位表示FIFO處于空狀態(tài),對(duì)空信號(hào)復(fù)位表示FIFO非空,還有有效的數(shù)據(jù)可以讀出。當(dāng)讀指針和寫指針相等也就是指向同一個(gè)內(nèi)存位置的時(shí)候,FIFO可能處于滿或空兩種狀態(tài)。可以通過不同的方法判斷或區(qū)分FIFO究竟是處于滿狀態(tài)還是空狀態(tài),也就是究竟是寫指針從后趕上了讀指針,還是讀指針從后趕上了寫指針。
本文所應(yīng)用的方法是分別將讀、寫地址寄存器擴(kuò)展一位,將最高位設(shè)置為狀態(tài)位,其余低位作為地址位,指針由地址位以及狀態(tài)位組成。巧妙地應(yīng)用地址位和狀態(tài)位的結(jié)合實(shí)現(xiàn)對(duì)空、滿標(biāo)志位的控制。當(dāng)讀寫指針的地址位和狀態(tài)位全部吻合的時(shí)候,讀寫指針經(jīng)歷了相同次數(shù)的循環(huán)移動(dòng),也就是說,FIFO處于空狀態(tài)(圖1(a));如果讀寫指針的地址位相同而狀態(tài)位相反,寫指針比讀指針多循環(huán)一次,標(biāo)志FIFO處于滿狀態(tài)(圖1(b))。
圖1 FIFO處于的狀態(tài)
評(píng)論