基于FPGA的PEX8311的LBS控制器的實(shí)現(xiàn)
2.4 LBS狀態(tài)機(jī)設(shè)計(jì)
LBS共設(shè)計(jì)有4個(gè)狀態(tài):IDLE,START,DO,BUSY。其狀態(tài)轉(zhuǎn)移圖如圖2所示。本文引用地址:http://www.ex-cimer.com/article/190888.htm
IDLE:空閑狀態(tài)。
START:當(dāng)ADS地址選通有效時(shí)進(jìn)入此狀態(tài),進(jìn)行地址空間判斷。
DO:當(dāng)?shù)刂房臻g有效,并且傳輸條件滿足時(shí)進(jìn)入傳輸狀態(tài),每個(gè)時(shí)鐘判斷條件,當(dāng)條件滿足時(shí)繼續(xù)該狀態(tài),當(dāng)條件不滿足時(shí),進(jìn)入BUSY等待狀態(tài),傳輸結(jié)束(BLAST有效)進(jìn)入IDLE狀態(tài)。
BUSY:當(dāng)數(shù)據(jù)沒(méi)準(zhǔn)備好時(shí),在BUSY狀態(tài)等待,當(dāng)數(shù)據(jù)準(zhǔn)備好后進(jìn)入DO狀態(tài),當(dāng)超時(shí)后進(jìn)入IDLE狀態(tài),實(shí)時(shí)退出。
2.5 LBS狀態(tài)機(jī)工作流程
FPGA作為L(zhǎng)BS的邏輯控制器,負(fù)責(zé)協(xié)調(diào)好與DDR_FIFO數(shù)據(jù)和PEX8311之間的時(shí)序關(guān)系。系統(tǒng)接收數(shù)據(jù)時(shí),首先由驅(qū)動(dòng)程序向PEX8311發(fā)送復(fù)位信號(hào),通過(guò)LRESET復(fù)位LBS本地端的FPGA,清空FPGA內(nèi)部DDR_FIFO內(nèi)部數(shù)據(jù),并將HF和FF標(biāo)志置為無(wú)效,然后等待數(shù)據(jù)的輸入。FPGA讀入DDR數(shù)據(jù)后,首先將DDR數(shù)據(jù)寫(xiě)入DDR_FIFO中,當(dāng)DDR_FIFO中的數(shù)據(jù)達(dá)到半滿狀態(tài)時(shí),HF標(biāo)志位有效,通過(guò)FPGA向PEX8311發(fā)出DMA中斷請(qǐng)求。PC機(jī)響應(yīng)中斷后,設(shè)置DMA傳輸模式,傳輸字節(jié)數(shù)及地址信號(hào)等。PEX8311通過(guò)LHOLD申請(qǐng)控制本地總線,此時(shí)FPGA發(fā)出的LHOLDA響應(yīng)信號(hào)后獲得本地總線的控制權(quán),并立即進(jìn)入連續(xù)字節(jié)突發(fā)模式的Block DMA周期即由IDLE狀態(tài)到START狀態(tài)。FPGA在收到有效的LW/R讀信號(hào)和ADS地址選通信號(hào)后,進(jìn)入DO狀態(tài),同時(shí)發(fā)出Ready本地準(zhǔn)備好應(yīng)答信號(hào),使能DDR_FIFO的讀允許REN和輸出允許OE。在傳輸最后一個(gè)數(shù)據(jù)時(shí),PEX8311發(fā)出BLAST信號(hào),F(xiàn)PGA配置DDR_FIFO讀使能和輸出使能無(wú)效,并取消Ready從而結(jié)束DMA周期。PC系統(tǒng)發(fā)送數(shù)據(jù)時(shí),F(xiàn)PGA將計(jì)算機(jī)通過(guò)PCIe傳過(guò)來(lái)的LBS數(shù)據(jù)寫(xiě)入PC_FIFO中,再輸出寫(xiě)入到DDR中。
2.6 LBS狀態(tài)機(jī)核心編碼設(shè)計(jì)
按照上述4個(gè)狀態(tài)進(jìn)行Verilog設(shè)計(jì),經(jīng)過(guò)仿真和上板調(diào)試,效果很好,下面是狀態(tài)機(jī)設(shè)計(jì)程序,仿真時(shí)序圖如圖3,圖4所示。
評(píng)論