基于FPGA的雙口RAM與PCI9O52接口設(shè)計(jì)
2 PCI和雙口RAM之間的接口設(shè)計(jì)
為了解決PCI9052和雙口RAM之間讀寫(xiě)時(shí)序不匹配的問(wèn)題,采用可編程邏輯器件CYCLONE-II來(lái)實(shí)現(xiàn)它們之間的接口電路,其信號(hào)連接關(guān)系如圖1所示。
PCI9052對(duì)雙口RAM發(fā)出讀寫(xiě)指令需在FPGA配置完之后,這可以通過(guò)查詢(xún)CONF_DONE(和USERl相連)和INIT_DONE(和USER3相連)來(lái)確定FPGA是否配置完成。如采樣INIT_DONE信號(hào),當(dāng)其為高,表明FPGA配置完成;如采樣CONF_DONE,當(dāng)其為高,則PCI9052還需要等待tCD2UM(min=18 μs,max=40 μs)時(shí)間后,才能對(duì)雙口RAM進(jìn)行讀寫(xiě)操作雙口RAM使用的是IDT70V28L,它的存取時(shí)間大于20ns。PCI9052采用非復(fù)用、單周期讀/寫(xiě)模式,工作于25MHz時(shí)鐘,PCI訪(fǎng)問(wèn)存儲(chǔ)器是以32位位寬,每讀寫(xiě)操作一次在Local Bus上都對(duì)應(yīng)2次16位位寬的操作,為了防止相鄰二次交易的沖突,每次狀態(tài)機(jī)都是以檢測(cè)ADS信號(hào)有效開(kāi)始一次讀寫(xiě)訪(fǎng)問(wèn),且插入一個(gè)NXDA等待周期。具體讀寫(xiě)操作實(shí)現(xiàn)過(guò)程如下。
2.1 PCI9052寫(xiě)過(guò)程
寫(xiě)過(guò)程是用狀態(tài)機(jī)加以描述,該狀態(tài)機(jī)有6個(gè)狀態(tài),分別是寫(xiě)空閑、寫(xiě)開(kāi)始、寫(xiě)等待數(shù)據(jù)、寫(xiě)過(guò)程、寫(xiě)過(guò)程等待和寫(xiě)結(jié)束。具體的狀態(tài)轉(zhuǎn)移圖如圖2所示。
當(dāng)系統(tǒng)復(fù)位后,BTERM、M S被拉高,LHOLD、MODE拉低,寫(xiě)控制信號(hào)無(wú)效,狀態(tài)機(jī)處于寫(xiě)空閑狀態(tài)。
當(dāng)狀態(tài)機(jī)處于寫(xiě)空閑狀態(tài)時(shí),在每次上升沿采樣到ADS有效和LW R為高電平,且訪(fǎng)問(wèn)雙口RAM空間(CS0或CSl有效),狀態(tài)機(jī)就進(jìn)入寫(xiě)開(kāi)始狀態(tài)。在寫(xiě)開(kāi)始狀態(tài),狀態(tài)機(jī)等待未進(jìn)行一定的操作。接著是寫(xiě)等待數(shù)據(jù)狀態(tài),此時(shí)根據(jù)片選信號(hào)CS0和CSl的值譯出SEML、CEOL、CElL,并輸出有效的地址和控制信號(hào)R WL、UBL、LBL到雙口RAM。接著是寫(xiě)過(guò)程狀態(tài),為了得到有效的數(shù)據(jù),該過(guò)程未對(duì)輸入輸出操作。然后是寫(xiě)過(guò)程等待狀態(tài),此時(shí),置LRDY信號(hào)有效且輸出有效的數(shù)據(jù)到雙口RAM。最后是寫(xiě)結(jié)束狀態(tài),將片選信號(hào)CEOI。、CElL、SEMI。置位無(wú)效,在該過(guò)程的下一個(gè)周期將其余的寫(xiě)控制信號(hào)置為無(wú)效,狀態(tài)機(jī)恢復(fù)為寫(xiě)空閑狀態(tài)。
2.2 PCI9052讀過(guò)程
讀過(guò)程也是用狀態(tài)機(jī)加以描述,該狀態(tài)機(jī)有6個(gè)狀態(tài),分別是讀空閑、讀開(kāi)始、讀等待數(shù)據(jù)、讀過(guò)程、讀過(guò)程等待和讀結(jié)束。其狀態(tài)轉(zhuǎn)移如圖3所示。
當(dāng)系統(tǒng)復(fù)位后,BTERM、M S被拉高,LHOLD、MODE拉低,讀控制信號(hào)無(wú)效,狀態(tài)機(jī)處于寫(xiě)空閑狀態(tài)。
評(píng)論