勇敢的芯伴你玩轉(zhuǎn)Altera FPGA連載88:FPGA片內(nèi)片內(nèi)FIFO實(shí)例 特權(quán)同學(xué),版權(quán)所有 配套例程和更多資料下載鏈接: http://pan.baidu.com/s/1i5LMUUD ![]() 該工程實(shí)例內(nèi)部系統(tǒng)功能框圖如圖9.56所示。我們通過IP核例化一個(gè)FIFO,定時(shí)寫入數(shù)據(jù),然后再讀出所有數(shù)據(jù)。通過QuartusII集成的在線邏輯分析儀SignalTap II,我們可以觀察FPGA片內(nèi)FIFO的讀寫時(shí)序。 ![]() 圖9.56 FIFO實(shí)例功能框圖 功能仿真Quartus II中,點(diǎn)擊菜單“Tools à Run Simulation Tool à RTL Simulation”進(jìn)行仿真。接著,Modelsim中我們可以查看讀FIFO的波形。 如圖9.65所示,這是一組的FIFO讀寫測試波形,左邊f(xié)ifo_wren拉高時(shí)執(zhí)行FIFO寫入操作,右邊f(xié)ifo_rden拉高時(shí)執(zhí)行FIFO讀操作。 ![]() 圖9.65 FIFO讀寫時(shí)序波形 如圖9.66所示,這是FIFO寫入操作波形的放大,依次寫入數(shù)據(jù)0x56,0x57,0x58……。在第一個(gè)FIFO數(shù)據(jù)0x56寫入后,隨后的一個(gè)時(shí)鐘周期fifo_empty指示信號(hào)立刻拉低,表示FIFO已經(jīng)不是出于空狀態(tài)了。 ![]() 圖9.66 FIFO 寫時(shí)序波形 如圖9.67所示,這是FIFO讀操作波形的放大,在fifo_rden信號(hào)拉高后,其后的一個(gè)時(shí)鐘周期(此時(shí)fifo_rdrdy信號(hào)拉高了)就出現(xiàn)了第一個(gè)數(shù)據(jù)0x56,隨后是0x57,0x58……。這和我們寫入FIFO的數(shù)據(jù)是一致的。由于在我們執(zhí)行讀操作前,F(xiàn)IFO的32個(gè)數(shù)據(jù)出于滿狀態(tài),因此fifo_full信號(hào)高電平,在第一個(gè)FIFO數(shù)據(jù)讀出后,fifo_full指示信號(hào)立刻拉低,表示FIFO已經(jīng)不是出于滿狀態(tài)了。 ![]() 圖9.67 FIFO讀時(shí)序波形 FIFO操作的規(guī)則大體可以歸納如下: ● 寫使能信號(hào)fifo_wren拉高時(shí),當(dāng)前的寫入數(shù)據(jù)fifo_wrdb有效,即fifo_wrdb被存儲(chǔ)到FIFO中,如測試波形中依次寫入的數(shù)據(jù)56、57、58……。 ● FIFO為空時(shí),指示信號(hào)fifo_empty為高電平,一旦寫入數(shù)據(jù)后的第2個(gè)時(shí)鐘周期,fifo_empty為低電平,表示當(dāng)前FIFO不空。 ● 讀使能信號(hào)fifo_rden拉高時(shí),第2個(gè)時(shí)鐘周期讀出數(shù)據(jù)出現(xiàn)在fifo_rddb有效,如測試波形中依次寫入的數(shù)據(jù)56、57、58……。 ● FIFO為滿時(shí),指示信號(hào)fifo_full為高電平,一旦讀出數(shù)據(jù)后的第2個(gè)時(shí)鐘周期,fifo_full為低電平,表示當(dāng)前FIFO不滿。 連接好下載線,給CY4開發(fā)板供電。 點(diǎn)擊菜單“Tools à SignalTap II Logic Analyzer”,進(jìn)入邏輯分析儀主頁面。 在右側(cè)的“JTAG ChinaConfiguration”窗口中,建立好USB Blaster的連接后,點(diǎn)擊“SOF Manager”后面的Programmer按鈕進(jìn)行下載。 如圖9.68所示,在“trigger”下面羅列了我們已經(jīng)添加好的需要觀察的信號(hào),尤其是在fifo_empty信號(hào)的TriggerConditions一列,我們?cè)O(shè)置了值下降沿,表示fifo_empty下降沿(FIFO不為空)時(shí)我們將觸發(fā)采集。另外,我們用鼠標(biāo)點(diǎn)擊選中Instance下面的唯一一個(gè)選項(xiàng),然后單擊InstanceManager后面的運(yùn)行按鈕,執(zhí)行一次觸發(fā)采集。 ![]() 圖9.68 波形采樣觸發(fā)設(shè)置 波形如圖9.69所示。兩組密密麻麻的數(shù)據(jù),前面一組fifo_wren拉高了,表示這是一組寫入FIFO的數(shù)據(jù);而后面一組fifo_rden為高電平,表示從FIFO讀出數(shù)據(jù)。 ![]() 圖9.69 FIFO讀寫時(shí)序波形 將寫入的頭幾個(gè)數(shù)據(jù)放大,如圖9.70所示。連續(xù)寫入了數(shù)據(jù)56h、57h、58h、5Ah……。 ![]() 圖9.70 FIFO寫時(shí)序波形 頭幾個(gè)讀數(shù)據(jù)的時(shí)序放大,如圖9.71所示。FIFO在讀時(shí)能信號(hào)fifo_wren拉高后,通常數(shù)據(jù)默認(rèn)是在其后的一個(gè)時(shí)鐘周期出現(xiàn),即它所對(duì)應(yīng)的數(shù)據(jù)是滯后1個(gè)時(shí)鐘周期出現(xiàn),這里我們使用了信號(hào)fifo_rdrdy拉高對(duì)應(yīng)FIFO讀出數(shù)據(jù)有效,因此首先的讀出的數(shù)據(jù)依次為56h、57h、58h、5Ah……。 ![]() 圖9.71 FIFO讀時(shí)序波形 |