楊金霖,張生春,王文艷
(1.西安電子工程研究所,陜西西安 710100;2.西安近代化學(xué)研究所,陜西西安 710065)
現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)是一種與專(zhuān)用集成電路(ASIC)相對(duì)應(yīng)的半定制的數(shù)字邏輯芯片,具有靈活性與高并行性,F(xiàn)PGA在數(shù)據(jù)接口、以太網(wǎng)、存儲(chǔ)陣列、移動(dòng)通信等領(lǐng)域[1-4]發(fā)揮重要作用。在毫米波雷達(dá)系統(tǒng)中,F(xiàn)PGA用于實(shí)現(xiàn)前端控制、數(shù)據(jù)接口以及信號(hào)處理等功能[5-6],例如GaN開(kāi)關(guān)、SiGe多功能芯片[7]、AD/DA等核心器件都需要根據(jù)廠家定義的協(xié)議加以控制。靈活的控制方式帶來(lái)了設(shè)計(jì)復(fù)用率低的問(wèn)題。此外,在民用、工業(yè)等低數(shù)據(jù)量場(chǎng)合為了簡(jiǎn)化接口設(shè)計(jì)并提高傳輸速率,也常采用自定義協(xié)議高速同步串口作為數(shù)據(jù)傳輸接口。因此,應(yīng)研究靈活簡(jiǎn)潔的控制協(xié)議建模與設(shè)計(jì)方法。
針對(duì)上述問(wèn)題,本文研究了一種基于Simulink和FPGA的收發(fā)單元控制協(xié)議建模與設(shè)計(jì)方法,并實(shí)現(xiàn)了自定義的高速同步串口發(fā)射模塊和UART模塊,結(jié)合FPGA對(duì)實(shí)例進(jìn)行了驗(yàn)證,為簡(jiǎn)化各種復(fù)雜、自定義控制協(xié)議的設(shè)計(jì)難度提供了技術(shù)參考。
射頻前端與控制器的控制協(xié)議包含了20個(gè)字節(jié)的控制指令,包括:1個(gè)字節(jié)幀頭、1個(gè)字節(jié)工作模式選擇、8個(gè)字節(jié)分別對(duì)應(yīng)8個(gè)射頻通道控制(1 bit使能碼、6 bit相位碼)、1個(gè)字節(jié)的校驗(yàn)、1個(gè)字節(jié)的幀尾,其余字節(jié)為保留字節(jié),留待后續(xù)升級(jí)使用。
控制接口協(xié)議上使用了包括2根線(SCK與SDO)的自定義高速同步串口[8],如圖1所示,系統(tǒng)時(shí)鐘設(shè)為10 MHz,LOAD為輸入的控制字節(jié)數(shù)據(jù)鎖存信號(hào),上升沿有效。LOAD_O為指令發(fā)送使能信號(hào),在鎖存完成后下一個(gè)時(shí)鐘周期變?yōu)楦唠娖剑瑫r(shí)使能總線時(shí)鐘SCK,SDO開(kāi)始輸出20個(gè)8 bit指令值,首先按照先低位后高位的順序輸出第1個(gè)字節(jié),之后是第2個(gè)字節(jié)的低位到高位,以此循環(huán),每個(gè)字節(jié)前設(shè)1個(gè)時(shí)鐘周期的低電平,每個(gè)字節(jié)完成后設(shè)2個(gè)時(shí)鐘周期的高電平,第1個(gè)字節(jié)和最后1個(gè)字節(jié)為規(guī)定的幀頭幀尾標(biāo)志。發(fā)送模塊在SCK上升沿將數(shù)據(jù)依次傳遞至總線上,被控模塊在下降沿對(duì)總線采樣。
圖1 收發(fā)組件控制器總線時(shí)序
圖2為控制器總體設(shè)計(jì)框圖,UART模塊實(shí)現(xiàn)FPGA與上位機(jī)之間的通信,發(fā)送控制模塊進(jìn)行接口協(xié)議轉(zhuǎn)換產(chǎn)生指令字節(jié)以及發(fā)送模塊所需的控制信號(hào),發(fā)送模塊將指令按照接口協(xié)議傳輸至被控模塊中對(duì)相控陣收發(fā)單元進(jìn)行控制。
圖2 收發(fā)單元控制器總體設(shè)計(jì)框圖
在Simulink環(huán)境中,同步串口模塊定義了22個(gè)8 bit的數(shù)組(2個(gè)為備份)作為指令數(shù)據(jù)的輸入端口[9],還包括1路鎖存信號(hào)txena、1路數(shù)據(jù)總線SDO和1路時(shí)鐘使能信號(hào)SCK_ENA[10],頂層模塊如圖3所示。
圖3 同步串口Simulink仿真電路圖
模塊由3個(gè)并發(fā)執(zhí)行的有限狀態(tài)機(jī)模型LOAD、LOAD_OK和TX組成,如圖4所示,“LOAD”為邊沿檢測(cè)器,觸發(fā)時(shí)檢測(cè)輸入信號(hào)txena的上升沿并將內(nèi)部信號(hào)loadtx設(shè)為1,檢測(cè)到txena下降沿后loadtx設(shè)為0?!癓OAD_OK”為指令鎖存器,將輸入指令鎖存在內(nèi)部寄存器中并產(chǎn)生產(chǎn)生發(fā)送使能信號(hào)。
圖4 同步串口發(fā)送模塊有限狀態(tài)機(jī)模型
“TX”為模塊核心,在s0狀態(tài)初始化位計(jì)數(shù)器和寄存器計(jì)數(shù)器,在鎖存完成后轉(zhuǎn)移至s1狀態(tài),使能時(shí)鐘總線SCK_ENA并在SDO上傳輸起始位,之后進(jìn)入s2狀態(tài),通過(guò)不斷遞減位計(jì)數(shù)器從低位到高位依次輸出當(dāng)前寄存器的值,當(dāng)位計(jì)數(shù)器減少為1時(shí),轉(zhuǎn)移至s3狀態(tài),傳輸當(dāng)前寄存器的最高位并將寄存器計(jì)數(shù)器減1以準(zhǔn)備傳輸下一個(gè)寄存器的值,之后進(jìn)入s4、s5狀態(tài)傳輸停止位,此時(shí)一個(gè)控制字節(jié)傳輸完畢。s5狀態(tài)后為條件判斷語(yǔ)句,當(dāng)寄存器計(jì)數(shù)器不為0時(shí),說(shuō)明此時(shí)還有指令沒(méi)有傳輸,回到s1狀態(tài)進(jìn)行下一次起始位的傳輸,當(dāng)所有數(shù)據(jù)傳輸完畢后,回到s0關(guān)閉時(shí)鐘總線并復(fù)位計(jì)數(shù)器,等待下一次發(fā)送使能。
Simulink中的數(shù)據(jù)默認(rèn)為雙精度類(lèi)型,需要對(duì)狀態(tài)機(jī)模型定點(diǎn)化便于數(shù)字硬件實(shí)現(xiàn),定點(diǎn)化后的數(shù)據(jù)類(lèi)型見(jiàn)表1。
表1 模型數(shù)據(jù)類(lèi)型表
根據(jù)圖3,使用基于采樣模式的Pulse Generator模塊產(chǎn)生鎖存脈沖,使用Data Type Conversion模塊將仿真環(huán)境的數(shù)據(jù)類(lèi)型進(jìn)行轉(zhuǎn)化以匹配定點(diǎn)化后的串口模型,使用Constant模塊作為指令字節(jié),邏輯分析儀得到的仿真結(jié)果見(jiàn)圖5。
圖5 同步串口時(shí)序仿真結(jié)果
在Simulink中使用HDL coder生成模型對(duì)應(yīng)的FPGA模塊。如圖6所示,在Vivado軟件中將其與接收模塊連接進(jìn)行環(huán)回驗(yàn)證,仿真波形見(jiàn)圖7,傳輸完畢后,接收模塊正確的接收到了指令數(shù)據(jù)[11]。
圖6 環(huán)回驗(yàn)證原理框圖
圖7 模塊環(huán)回驗(yàn)證輸出波形
將代碼下載至Artix-7 FPGA開(kāi)發(fā)板進(jìn)行進(jìn)一步驗(yàn)證,編寫(xiě)了上位機(jī)軟件實(shí)現(xiàn)了控制器與PC的通信,通過(guò)FPGA中集成的嵌入式邏輯分析儀觀察了相關(guān)信號(hào)[12-13],如圖8所示,UART模塊收到完整指令幀且校驗(yàn)通過(guò)后拉高rxflag信號(hào),同時(shí)串行總線上按照規(guī)定協(xié)議正確傳輸了數(shù)據(jù)。
圖8 硬件實(shí)現(xiàn)的輸出波形
本文基于Simulink設(shè)計(jì)了收發(fā)單元控制器中自定義控制協(xié)議并進(jìn)行了驗(yàn)證,這種控制協(xié)議設(shè)計(jì)方法具有通用性強(qiáng)、設(shè)計(jì)精準(zhǔn)的優(yōu)點(diǎn),為后續(xù)設(shè)計(jì)各種復(fù)雜、自定義控制協(xié)議提供了技術(shù)參考。