◆趙航 錢(qián)博
(沈陽(yáng)理工大學(xué)信息科學(xué)與工程學(xué)院遼寧 110159)
FPGA設(shè)計(jì)靈活,接口眾多,可以實(shí)現(xiàn)多種接口的功能。串口是一種最常見(jiàn)的接口,其設(shè)計(jì)簡(jiǎn)單,應(yīng)用廣泛。由于串口輸入數(shù)據(jù)率可能存在與后繼處理電路數(shù)據(jù)率不匹配的問(wèn)題,確保不同處理過(guò)程間數(shù)據(jù)完整性變得尤為重要。乒乓操作是數(shù)字電路設(shè)計(jì)中一種常用的技巧,通過(guò)切換緩沖模塊可有效地實(shí)現(xiàn)高速數(shù)據(jù)流的緩存[1,2]。
為了解決串口輸入數(shù)據(jù)率與后繼 FPGA處理模塊處理數(shù)據(jù)率不匹配的問(wèn)題,本文基于FPGA平臺(tái),選用雙FIFO模塊作為緩沖模塊,利用乒乓操作作為數(shù)據(jù)流的處理技術(shù),設(shè)計(jì)了基于雙FIFO乒乓操作的數(shù)據(jù)緩沖電路。
如圖1所示,乒乓操作的數(shù)據(jù)處理過(guò)程為:首先,數(shù)據(jù)流的輸入模塊將輸入的數(shù)據(jù)流發(fā)送到選擇模塊。選擇模塊將輸入數(shù)據(jù)等數(shù)據(jù)量的分配到兩個(gè)FIFO模塊中,將整個(gè)數(shù)據(jù)處理流程分為3個(gè)分配區(qū)間。在第一個(gè)分配區(qū)間,輸入數(shù)據(jù)被選擇模塊分配到FIFO模塊1中。在第二個(gè)分配區(qū)間,將FIFO模塊1切換至FIFO模塊2,輸入數(shù)據(jù)被選擇模塊分配至FIFO模塊2中,并且選擇模塊將分配到FIFO模塊1中的數(shù)據(jù)送到后續(xù)數(shù)據(jù)流處理模塊。在第三個(gè)分配區(qū)間,將 FIFO模塊2切換至FIFO模塊1,輸入數(shù)據(jù)被選擇模塊分配至FIFO模塊1中,并且將選擇模塊分配到FIFO模塊2中的數(shù)據(jù)經(jīng)過(guò)輸出選擇模塊后,送到運(yùn)算處理模塊進(jìn)行運(yùn)算處理。經(jīng)過(guò)以上三個(gè)分配區(qū)間的不間斷循環(huán),就可以實(shí)現(xiàn)對(duì)數(shù)據(jù)流的高速無(wú)縫傳輸與緩沖。
圖1 乒乓操作原理圖
在整個(gè)乒乓操作過(guò)程中,輸入數(shù)據(jù)流連續(xù)不斷通過(guò)輸入數(shù)據(jù)模塊,輸出數(shù)據(jù)流連續(xù)不斷的被送到數(shù)據(jù)處理模塊,達(dá)到了沒(méi)有間隔處理數(shù)據(jù)的效果,同時(shí)節(jié)省時(shí)間,提高了數(shù)據(jù)處理速率[3]。
如圖 2所示,該設(shè)計(jì)主要由數(shù)據(jù)輸入模塊、乒乓操作模塊以及FPGA處理模塊三部分構(gòu)成。
圖2 總體設(shè)計(jì)框圖
首先,在數(shù)據(jù)輸入模塊中,通過(guò)上位機(jī)利用串口助手工具輸入一串?dāng)?shù)據(jù),串口rx接收到數(shù)據(jù)后將其發(fā)送至乒乓操作模塊,用作乒乓操作模塊的輸入數(shù)據(jù)。其次,在乒乓操作模塊中,兩個(gè)FIFO模塊作為數(shù)據(jù)緩存模塊,將輸入的數(shù)據(jù)緩存到兩個(gè)FIFO模塊中,通過(guò)兩個(gè)計(jì)數(shù)器不斷對(duì)FIFO的輸入輸出進(jìn)行控制,將緩存到兩個(gè)FIFO模塊中的緩存數(shù)據(jù)不間斷的送至FPGA處理模塊。
在數(shù)據(jù)輸入模塊中,包括上位機(jī)、串口以及時(shí)鐘管理三部分。在該設(shè)計(jì)中,將串口的波特率設(shè)置為38400Bd,有1位起始位,8位信息位以及1位停止位,因此可得到串口數(shù)據(jù)率為38400bps,由于串口有8位信息位,所以將8bit數(shù)據(jù)視為一幀數(shù)據(jù),一次發(fā)送144bit數(shù)據(jù),即18幀數(shù)據(jù)。
在上位機(jī)上,利用串口助手發(fā)送數(shù)據(jù),通過(guò)串口的rx接收上位機(jī)發(fā)來(lái)的數(shù)據(jù)。在串口部分,由于串口的數(shù)據(jù)率為38400bps,因此rx的時(shí)鐘為 38.4KHz。rx將從上位機(jī)上接收到的數(shù)據(jù)發(fā)送至乒乓操作模塊。在時(shí)鐘管理部分,通過(guò)選用差分時(shí)鐘IP核產(chǎn)生各模塊所需要的時(shí)鐘。由于串口時(shí)鐘和FPGA處理模塊的時(shí)鐘分別為38.4KHz和15KHz,因此通過(guò)輸入200MHz的差分時(shí)鐘產(chǎn)生38.4KHz和15KHz兩種時(shí)鐘,38.4KHz的時(shí)鐘用于串口模塊,F(xiàn)IFO模塊以及計(jì)數(shù)器1模塊,15KHz的時(shí)鐘用于FPGA處理模塊,F(xiàn)IFO模塊以及計(jì)數(shù)器2模塊。
在乒乓操作模塊中,主要包括兩個(gè)FIFO模塊,兩個(gè)計(jì)數(shù)器模塊以及一個(gè)二選一模塊。由于串口模塊的時(shí)鐘和 FPGA處理模塊的時(shí)鐘分別為為 38.4KHz和15KHz,所以?xún)蓚€(gè)FIFO的寫(xiě)時(shí)鐘和讀時(shí)鐘分別為38.4KHz和15KHz,由于讀寫(xiě)時(shí)鐘不同,所以為異步FIFO。首先,第一個(gè)計(jì)數(shù)器在 38.4KHz的寫(xiě)時(shí)鐘驅(qū)動(dòng)下通過(guò)計(jì)數(shù)控制兩個(gè)FIFO的寫(xiě)使能,通過(guò)控制寫(xiě)使能有效將串口發(fā)來(lái)的數(shù)據(jù)寫(xiě)入FIFO。然后,第二個(gè)計(jì)數(shù)器在 15KHz的讀時(shí)鐘驅(qū)動(dòng)下通過(guò)計(jì)數(shù)控制兩個(gè)FIFO的讀使能,通過(guò)控制讀使能有效,將寫(xiě)入FIFO中的數(shù)據(jù)讀出。最后,通過(guò)二選一模塊將兩個(gè)FIFO模塊中緩存的數(shù)據(jù)發(fā)送至FPGA處理模塊。
設(shè)計(jì)的具體參數(shù)如下:兩個(gè)FIFO模塊的深度設(shè)計(jì)為256位,進(jìn)行一次讀寫(xiě)的數(shù)據(jù)為144位,所以完全滿(mǎn)足其深度要求。由于串口和FPGA處理模塊的數(shù)據(jù)率分別為38.4KHz和15KHz,所以通過(guò)差分時(shí)鐘模塊產(chǎn)生的寫(xiě)時(shí)鐘和讀時(shí)鐘分別為38.4KHz和15KHz。因此一次寫(xiě)入144bit數(shù)據(jù)由于讀寫(xiě)時(shí)鐘不同,且寫(xiě)時(shí)鐘大于讀時(shí)鐘,則寫(xiě)入144bit數(shù)據(jù)所用的時(shí)間小于讀出144bit數(shù)據(jù)所用的時(shí)間。為了保證數(shù)據(jù)在寫(xiě)入和讀出過(guò)程不丟失,需要準(zhǔn)確設(shè)計(jì)數(shù)據(jù)寫(xiě)入和讀出的時(shí)間。
已知FIFO模塊的讀寫(xiě)時(shí)鐘和一次讀寫(xiě)的數(shù)據(jù)位數(shù),可得數(shù)據(jù)寫(xiě)入和讀出時(shí)間為t=N/B。
式中t為時(shí)間,N為數(shù)據(jù)位數(shù),B為數(shù)據(jù)率。該設(shè)計(jì)中,寫(xiě)時(shí)鐘為38.4Khz,則數(shù)據(jù)率為38.4Kbps,數(shù)據(jù)位數(shù)為144bit,則一次寫(xiě)入144位數(shù)據(jù)需要的時(shí)間為 3.75ms。讀時(shí)鐘為 15Khz,則數(shù)據(jù)率為15Kbps,數(shù)據(jù)位數(shù)為 144bit,則一次讀出 144位數(shù)據(jù)需要的時(shí)間為9.6ms。由于寫(xiě)入數(shù)據(jù)的時(shí)間小于讀取數(shù)據(jù)的時(shí)間,因此若同時(shí)不間斷進(jìn)行讀取數(shù)據(jù),則 FIFO中的數(shù)據(jù)未完全讀取就被寫(xiě)入新的數(shù)據(jù),會(huì)造成數(shù)據(jù)溢出。因此一次寫(xiě)入144bit數(shù)據(jù)后不能立馬寫(xiě)入數(shù)據(jù),需要等待一段時(shí)間,這段時(shí)間內(nèi)數(shù)據(jù)是空閑狀態(tài),不寫(xiě)入FIFO。讀出數(shù)據(jù)時(shí)間從等待時(shí)間開(kāi)始直到第二次寫(xiě)入數(shù)據(jù)完成結(jié)束,由于數(shù)據(jù)寫(xiě)入時(shí)間和數(shù)據(jù)讀取時(shí)間已知,因此等待時(shí)間可求得為5.85ms。
如圖3所示,對(duì)數(shù)據(jù)時(shí)隙進(jìn)行分析,首先通過(guò)計(jì)數(shù)器1控制寫(xiě)使能1有效向FIFO1模塊中寫(xiě)入144bit數(shù)據(jù),時(shí)間為3.75ms,然后開(kāi)始等待5.85ms,在等待過(guò)程中不寫(xiě)入數(shù)據(jù),而是通過(guò)計(jì)數(shù)器 2控制讀使能1有效開(kāi)始讀取緩存在FIFO1模塊中的數(shù)據(jù)。等待時(shí)間結(jié)束后,通過(guò)計(jì)數(shù)器1控制寫(xiě)使能2有效向FIFO2模塊中寫(xiě)入144bit數(shù)據(jù),時(shí)間為3.75ms,在寫(xiě)入數(shù)據(jù)期間繼續(xù)讀取FIFO1中的數(shù)據(jù),寫(xiě)入完成后,F(xiàn)IFO1中的數(shù)據(jù)也讀取完成。之后繼續(xù)等待5.85ms,此時(shí)通過(guò)計(jì)數(shù)器2控制讀使能2有效開(kāi)始讀取緩存在FIFO2模塊中的數(shù)據(jù),其過(guò)程和讀取FIFO1模塊中的數(shù)據(jù)相同。
圖3 數(shù)據(jù)時(shí)隙圖
本次設(shè)計(jì)采用Virtex6系列XC6VLX240T芯片,利用ML605開(kāi)發(fā)板進(jìn)行硬件開(kāi)發(fā),開(kāi)發(fā)板實(shí)物圖如圖4所示。
圖4 開(kāi)發(fā)板實(shí)物圖
在設(shè)計(jì)系統(tǒng)模塊的基礎(chǔ)上,基于 Xilinx軟件及其板上測(cè)試平臺(tái)對(duì)數(shù)據(jù)流的寫(xiě)入與讀出進(jìn)行仿真與平臺(tái)測(cè)試分析。在ISE Design Suite 14.7開(kāi)發(fā)環(huán)境下,使用Verilog硬件描述語(yǔ)言,調(diào)用第三方仿真工具M(jìn)odelsim,對(duì)整個(gè)數(shù)據(jù)緩沖系統(tǒng)行仿真綜合分析。調(diào)用板上測(cè)試工具Chipscope,對(duì)整個(gè)數(shù)據(jù)存儲(chǔ)系統(tǒng)行綜合分析與測(cè)試。輸入數(shù)據(jù)仿真圖、測(cè)試圖如圖5、圖6所示,F(xiàn)IFO模塊讀寫(xiě)使能仿真圖如圖7所示,乒乓操作輸出仿真圖、測(cè)試圖如圖8、圖9所示。
圖5 輸入數(shù)據(jù)仿真圖
圖6 輸入數(shù)據(jù)測(cè)試圖
由圖5輸入數(shù)據(jù)仿真圖可知,串口的rx在38.4KHz的時(shí)鐘下,將上位機(jī)發(fā)送的一串?dāng)?shù)據(jù)位寬為1bit的數(shù)據(jù)流發(fā)送至乒乓操作模塊,為乒乓操作模塊提供數(shù)據(jù),圖 6測(cè)試圖則驗(yàn)證了輸入數(shù)據(jù)與仿真圖中的數(shù)據(jù)一致。
圖7 FIFO模塊讀寫(xiě)使能仿真圖
由圖7讀寫(xiě)使能仿真圖可知,乒乓操作模塊在寫(xiě)時(shí)鐘38.4KHz,讀時(shí)鐘15KHz的驅(qū)動(dòng)下,通過(guò)計(jì)數(shù)器對(duì)兩個(gè)FIFO的讀寫(xiě)使能進(jìn)行控制。首先在FIFO1的寫(xiě)使能3.75ms有效后,開(kāi)始進(jìn)入5.85ms的等待時(shí)間,之后FIFO2的寫(xiě)使能持續(xù)3.75ms有效,然后進(jìn)入5.85ms的等待時(shí)間,依次循環(huán)。而FIFO2的讀使能在FIFO1寫(xiě)使能有效結(jié)束,開(kāi)始等待時(shí)間后有效,持續(xù)9.6ms,直到FIFO2的寫(xiě)使能有效結(jié)束,F(xiàn)IFO2的讀使能依此類(lèi)推。
圖8 乒乓操作輸出仿真圖
圖9 乒乓操作輸出測(cè)試圖
由圖8仿真圖可知,兩個(gè)FIFO模塊的輸出數(shù)據(jù)與輸入數(shù)據(jù)一致,并且兩個(gè)FIFO模塊之間的輸出連續(xù),實(shí)現(xiàn)了數(shù)據(jù)的無(wú)縫傳輸,圖9測(cè)試圖則證明了仿真圖的正確性。
本文基于FPGA,利用其靈活設(shè)計(jì)、處理速度快的優(yōu)點(diǎn),設(shè)計(jì)了雙FIFO乒乓操作的數(shù)據(jù)緩沖電路,Modeslim仿真和Chipscope板上測(cè)試結(jié)果表明,所設(shè)計(jì)的模塊存儲(chǔ)速度快、可靠性較高,在串口輸入數(shù)據(jù)率為38.4KHz和處理模塊處理數(shù)據(jù)率15KHz條件下,實(shí)現(xiàn)了數(shù)據(jù)的連續(xù)無(wú)縫傳輸,確保了數(shù)據(jù)傳輸?shù)恼_性。
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2020年12期