【正文】
ormbit : out std_logic_vector(4 downto 0) )。 normbit = temp_n。 empty : out std_logic )。use 。 when (wr_addr(4) /= rd_addr(4)) and (wr_addr(3 downto 0) = rd_addr(3 downto 0)) else 39。end。 process(c1) begin if rising_edge(c1) then temp = temp(6 downto 0) amp。 43 。 end if。entity shuiji is port( clk : in std_logic。architecture bhv of full_cmp isbegin full = 39。end。entity empty_cmp is port( wr_addr : in std_logic_vector(4 downto 0)。 for i in 3 downto 0 loop temp_n(i) := temp_g(i) xor temp_n(i+1)。use 。architecture bhv of sync issignal temp : std_logic_vector(4 downto 0)。end。 for i in 0 to 4 loop if (normal(i) = 39。 end process。architecture bhv of gray issignal reg_g : std_logic_vector(4 downto 0)。參 考 文 獻[1]韓進,程勇,[J].山東科技大學(xué)學(xué)報(自然科學(xué)版),2003.[2]孟慶海,[M].西安交通大學(xué)出版社,2008.[3]潘松,(第四版)[M].北京科學(xué)出版社,2010.[4]潘松,(修訂版)[M].成都電子科技大學(xué)出版社,2001.[5]任愛鋒,[M].西安電子科技大學(xué)出版社,2004.[6][D].西安電子科技大學(xué),2007.[7]張永安,李樹華,[J].內(nèi)蒙古大學(xué)學(xué)報(自然科學(xué)版),2004.[8]張維旭,[D].西安微電子技術(shù)研究所,2006.[9]赫曉莉,劉洪波,[J].計算機技術(shù)與發(fā)展,2007.[10]雷海衛(wèi),[J].中山大學(xué),2007.[11]Clifford . Simulation and Synthesis Techniques for Asynchronous FIFO Design[C]. SNUG 2002(Synopsys Users Group Conference,San Jose,CA,2002) User Papers. March 2002.[12]Kanoopoulos N,Hallenbeck J J. A First In,F(xiàn)irst out Memory for Signal Processing Applications[J]. IEE Transactions on Circuits and System,1986,CAS33(5):556558.附 錄1. 5 bit格雷碼計數(shù)器模塊的VHDL設(shè)計程序library ieee。(2) 由于調(diào)試電路裝載在另外一塊核心板上,這就增加了電路設(shè)計的成本和硬件測試時的復(fù)雜程度,可以考慮將調(diào)試電路模塊整合到異步FIFO電路開發(fā)板中,通過外部使能來控制調(diào)試電路模塊工作。完成的異步FIFO實物電路如圖516所示,外設(shè)電路板引腳功能與圖54所示電路的引腳說明相同。一段時間后異步FIFO電路間歇性處于寫滿狀態(tài),但始終不處于讀空狀態(tài),輸出數(shù)據(jù)隊列與輸入數(shù)據(jù)隊列相同,但會有一定的延時。從圖中可以看出,將1號撥碼開關(guān)置0,2號撥碼開關(guān)置1,即寫使能復(fù)位,讀使能置位,經(jīng)過一段時間后,數(shù)據(jù)始終無輸出,寫滿標志始終為0,讀空標志始終為1,這表明異步FIFO電路始終處于讀空狀態(tài)?,F(xiàn)通過Quartus II軟件中的嵌入式邏輯分析儀SignalTap II對異步FIFO功能測試電路進行硬件仿真,通過仿真結(jié)果測試異步FIFO電路的各部分功能,判斷其是否達到預(yù)期設(shè)計要求。結(jié)點選擇后,在Signal Configuration欄的Clock處選擇inclk0結(jié)點作為邏輯分析儀的工作時鐘,接著在Data欄的Sample Depth處選擇采樣深度為128 bit。圖56 調(diào)試電路仿真波形 調(diào)試電路引腳分配同前面章節(jié)異步FIFO電路引腳分配相似,使用Quartus II Planner工具欄對調(diào)試電路分配引腳,引腳表如表52所示。為了不影響完成的異步FIFO硬件電路的功能,該調(diào)試電路使用另一塊核心板裝載運行,將調(diào)試電路輸出的兩個異步時鐘和隨機數(shù)據(jù)隊列分別作為測試異步FIFO硬件電路的異步讀寫時鐘輸入和數(shù)據(jù)輸入。其中rst引腳分配為144引腳,其對應(yīng)為核心板的自帶按鍵,本設(shè)計使用此按鍵作為系統(tǒng)復(fù)位鍵。第5章 硬件仿真與實現(xiàn) 外部電路焊接由于本課題使用EP2C5T144C8N核心板最小系統(tǒng),其外設(shè)遠不能滿足設(shè)計要求,所以仍需焊接相應(yīng)的外設(shè)電路板來連接開發(fā)板以完成異步FIFO電路的硬件實物設(shè)計。對于圖45,將系統(tǒng)復(fù)位端置1,將讀寫使能均置位,一段時間后異步FIFO間歇性處于讀空狀態(tài),但始終不處于寫滿狀態(tài),輸出數(shù)據(jù)隊列與輸入數(shù)據(jù)隊列相同,但會有一定的延時。該仿真波形表明所設(shè)計的異步FIFO電路的復(fù)位鍵能控制系統(tǒng)的全局操作,復(fù)位功能達到了預(yù)期的設(shè)計要求。(5) 設(shè)置完存儲深度和數(shù)據(jù)寬度后進入時鐘設(shè)置界面,選擇獨立的讀寫時鐘,并添加讀使能??諠M標志產(chǎn)生模塊的頂層設(shè)計電路如圖37所示,其中empty_cmp模塊和full_cmp模塊分別是讀空標志判定模塊和寫滿標志判定模塊。139。按照此原理,當全局復(fù)位信號復(fù)位后,異步FIFO應(yīng)該處于讀空狀態(tài)??諠M標志產(chǎn)生的基本原則是無論在什么情況下,都不會出現(xiàn)存儲器對同一存儲地址同時進行讀寫操作的情況,也就是存儲器寫滿后不產(chǎn)生溢出,讀空后不進行多讀[2]。同步模塊的VHDL設(shè)計程序見附錄。 驗證異步FIFO電路整體功能系統(tǒng)復(fù)位后,將讀寫使能均置位,系統(tǒng)能同時進行讀寫操作。(2) 使用觸發(fā)器同步異步信號。 異步FIFO設(shè)計難點異步FIFO設(shè)計存在兩個難點:一是如何同步異步信號,降低亞穩(wěn)態(tài)發(fā)生概率;二是如何正確產(chǎn)生存儲器的空滿標志[8]。復(fù)位后,通過讀寫使能控制讀寫操作。 本課題主要研究內(nèi)容本課題基于FPGA技術(shù),在Cyclone II系列的EP2C5T144C8N芯片的基礎(chǔ)上,選用Quartus II軟件利用VHDL 硬件描述語言進行邏輯描述,并采用層次化、描述語言和圖形輸入相結(jié)合的方法設(shè)計了一個RAM深度為128 bit,數(shù)據(jù)寬度為8 bit的異步FIFO電路,并對其功能進行了時序仿真和硬件仿真驗證。目前,為了更大的提高芯片容量,其內(nèi)部存儲單元使用動態(tài)RAM代替靜態(tài)RAM,并在芯片內(nèi)部集成刷新電路,通過內(nèi)部仲裁單元控制器件的讀寫及自動刷新操作。異步FIFO是一種先進先出電路,常用來緩存數(shù)據(jù)和容納異步信號間的周期和相位差異,使用異步FIFO可以在兩個不同的時鐘系統(tǒng)之間進行快速準確的實時數(shù)據(jù)傳輸。 Metastability。江蘇科技大學(xué)本 科 畢 業(yè) 設(shè) 計(論文)學(xué) 院 專 業(yè) 學(xué)生姓名 班級學(xué)號 指導(dǎo)教師 二零壹叁年六月江蘇科技大學(xué)本科畢業(yè)論文基于FPGA的異步FIFO設(shè)計Asynchronous FIFO design based on FPGA江蘇科技大學(xué)本科畢業(yè)設(shè)計(論文)摘 要在現(xiàn)代集成電路芯片中,隨著設(shè)計規(guī)模的不斷擴大,一個系統(tǒng)往往包含多個時鐘,如何進行異步時鐘間的數(shù)據(jù)傳輸成為了一個很重要的問題。 Synchronization。異步FIFO(First In First Out)是解決這個問題的一個簡單有效的方案。這種芯片能在存儲寬度和深度上得到很大的發(fā)展。在大部分的EDA軟件中,都是通過綜合器來完成對EDA等硬件語言的編譯的,綜合器將硬件描述語言的描述轉(zhuǎn)變?yōu)槲锢砜蓪崿F(xiàn)的電路形式,由于FIFO是基于RAM結(jié)構(gòu)的,大部分的參考資料都是建立在數(shù)組存取的基礎(chǔ)上對FIFO進行描述的,然而綜合器對數(shù)組的綜合一般是將其轉(zhuǎn)變?yōu)榧拇嫫鞯慕Y(jié)構(gòu),這帶來的缺陷是綜合后的結(jié)構(gòu)會非常龐大,造成在大容量的FIFO設(shè)計時,會產(chǎn)生大量面積的浪費,甚至無法集成。第2章 異步FIFO設(shè)計要求及基本原理 設(shè)計要求本課題使用EP2C5T144C8N核心板最小系統(tǒng)設(shè)計一個RAM深度為128 bit,數(shù)據(jù)寬度為8 bit的異步FIFO電路,其外部接口如圖21所示,接口說明如表21所示。空滿標志產(chǎn)生邏輯通過比較同步后的讀寫地址來產(chǎn)生空滿標志信號,同時,產(chǎn)生的空滿標志信號又和輸入的讀寫使能信號一起控制讀寫時鐘域進行讀寫操作。格雷碼是一種錯誤最小化的編碼方式,使用格雷碼計數(shù)器進行計數(shù)時,每一次計數(shù)增加只有一位數(shù)據(jù)位改變,而使用自然二進制碼計數(shù)時,每一次計數(shù)增加都可能造成多位數(shù)據(jù)位的變動,這就使得數(shù)據(jù)位變動時,格雷碼計數(shù)器發(fā)生亞穩(wěn)態(tài)的概率大大低于自然二進制碼計數(shù)器。 驗證讀操作功能系統(tǒng)復(fù)位后,將讀使能置位,寫使能復(fù)位,則系統(tǒng)只能進行讀操作讀取數(shù)據(jù),由于雙端口RAM存儲器存儲單元數(shù)據(jù)被讀空,異步FIFO應(yīng)該始終處于讀空狀態(tài),數(shù)據(jù)輸出始終不變。在空滿標志模塊判斷寫滿標志時,同步模塊將讀指針與寫時鐘同步后,和寫指針比較產(chǎn)生寫滿標志;判斷讀空標志時,同步模塊將寫指針與讀時鐘同步后,和讀指針比較產(chǎn)生讀空標志。圖35 格雷碼∕自然碼轉(zhuǎn)換模塊圖36 格雷碼∕自然碼轉(zhuǎn)換模塊仿真波形 空滿標志產(chǎn)生模塊空滿標志產(chǎn)生模塊是整個異步FIFO系統(tǒng)的核心部分,該模塊設(shè)計的好壞直接決定了該異步FIFO的性能。當存儲器讀空后,讀空標志置位,暫停讀操作繼續(xù)讀取數(shù)據(jù),但仍可以執(zhí)行寫操作;當存儲器寫滿后,寫滿標志置位,暫停寫操作繼續(xù)寫入數(shù)據(jù),但仍可以執(zhí)行讀操作??諠M狀態(tài)的行為描述如下:full = 39。讀空、寫滿狀態(tài)判定的VHDL設(shè)計程序分別見附錄。(4) 雙端口RAM的存儲深度選擇128 bit,數(shù)據(jù)線寬度選擇8 bit。從圖中可以看出,當系統(tǒng)運行后,復(fù)位端置1,即