徐光輝,劉文佳
(上海航天電子技術(shù)研究所,上海 201109)
本文采用將所有子系統(tǒng)模塊的總線數(shù)據(jù)全部集合到基于FPGA實現(xiàn)的總線轉(zhuǎn)換橋模塊。通過在模塊內(nèi)部對數(shù)據(jù)進(jìn)行控制和管理,解決各個子系統(tǒng)模塊中數(shù)據(jù)交換問題,避免傳統(tǒng)方法中效率低下的缺點。
各系統(tǒng)間的總線轉(zhuǎn)換效率直接影響整個雷達(dá)系統(tǒng)的性能,本文設(shè)計的總線轉(zhuǎn)換橋IP核的結(jié)構(gòu)如圖1所示,它在外圍實現(xiàn)所需總線接口功能,利用FPGA的可編程的特點及并行運行的特點,所有的外部總線設(shè)備都能同時進(jìn)行數(shù)據(jù)的發(fā)送和接收,所有的數(shù)據(jù)在交換模塊里面實現(xiàn)數(shù)據(jù)的交換,隨后分發(fā)到對應(yīng)的總線模塊上。
圖1 總線轉(zhuǎn)換橋結(jié)構(gòu)
交換模塊是總線交換橋的核心模塊,它的效率直接影響系統(tǒng)的運行。本文所設(shè)計轉(zhuǎn)換橋的交換模塊可以將數(shù)據(jù)交換到各個目的總線上,交換模塊的結(jié)構(gòu)圖如圖2所示,但是需要用戶遵循固定的數(shù)據(jù)封裝格式。
圖2 交換模塊的結(jié)構(gòu)圖
圖2是交換模塊的結(jié)構(gòu)圖,其中數(shù)據(jù)交換單元負(fù)責(zé)將所有通路上的數(shù)據(jù)傳送到對應(yīng)的FIFO存儲上,以便目的設(shè)備來讀取相應(yīng)的數(shù)據(jù)。中斷控制單元的八路中斷分別連接到六個總線外設(shè)上,當(dāng)任何一個總線設(shè)備需要給其他設(shè)備發(fā)送數(shù)據(jù)時必須先產(chǎn)生中斷通知目的設(shè)備。目的設(shè)備根據(jù)狀態(tài)輸出來識別時哪個設(shè)備需要發(fā)送數(shù)據(jù),然后向該設(shè)備申請讀數(shù)。數(shù)據(jù)解析狀態(tài)寄存器決定該數(shù)據(jù)的目的地。
通用異步收發(fā)器是一種異步串行通信總線,通信的發(fā)送方和接收方各自有獨立的時鐘,傳輸速度由雙方約定。
該串口模塊主要由接收中斷和串口中斷實現(xiàn)數(shù)據(jù)的收發(fā)。接收FIFO和接收控制共同組成接收邏輯,功能主要是從轉(zhuǎn)換橋模塊接收32位的數(shù)據(jù),通過產(chǎn)生接收中斷將分解后8位數(shù)據(jù)傳送到OS中,隨后OS將數(shù)據(jù)發(fā)送到串口設(shè)備上。發(fā)送FIFO和發(fā)生控制組成發(fā)送邏輯單元,OS接收到出口中斷后,讀取串口設(shè)備的8位數(shù)據(jù),并發(fā)送請求給發(fā)送邏輯。發(fā)送邏輯將數(shù)據(jù)打包成32位數(shù)據(jù)傳送到轉(zhuǎn)換橋模塊。
轉(zhuǎn)換橋中SPI模塊用來控制CAN總線數(shù)據(jù)收發(fā)。初始化配置和控制,數(shù)據(jù)管理模塊負(fù)責(zé)CAN總線上數(shù)據(jù)的解包打包處理,然后分發(fā)到控制模塊或者外圍的CAN節(jié)點上。
發(fā)送邏輯的功能主要是從總線轉(zhuǎn)換橋的控制模塊上接收32位的數(shù)據(jù),然后存儲到接收FIFO上,由于一個CAN標(biāo)準(zhǔn)幀需要3個32位的數(shù)據(jù)字組成,因此數(shù)據(jù)管理連續(xù)讀取3次FIFO的數(shù)據(jù)組成一個標(biāo)準(zhǔn)幀。同樣接收邏輯的功能主要是從CAN總線上接收完整的一個標(biāo)準(zhǔn)幀,然后在數(shù)據(jù)管理里面對進(jìn)行解包取出有效數(shù)據(jù),將其拆分成32位存儲到接收FIFO里面。
數(shù)據(jù)管理主要集中在控制邏輯的設(shè)計上,本文采用oneshot編碼的有限狀態(tài)機作為控制,分別定義了9個工作狀態(tài)。
SPI模塊的控制狀態(tài)機開始處于Idle狀態(tài),根據(jù)不同條件狀態(tài)機轉(zhuǎn)移到其他狀態(tài),狀態(tài)機轉(zhuǎn)換條件有不同優(yōu)先級,復(fù)位具有最高優(yōu)先級。
(1)當(dāng)收到復(fù)位信號時,狀態(tài)機跳轉(zhuǎn)到Initial狀態(tài),此狀態(tài)進(jìn)行初始化操作。
(2)當(dāng)收到數(shù)據(jù)時進(jìn)入RX_state狀態(tài),此狀態(tài)時處理接收到的標(biāo)準(zhǔn)幀數(shù)據(jù),并將其發(fā)送到數(shù)據(jù)管理模塊。
(3)當(dāng)需要發(fā)送數(shù)據(jù)時進(jìn)入Read_State狀態(tài),此狀態(tài)時先讀取三個發(fā)送緩沖區(qū)的當(dāng)前狀態(tài),當(dāng)至少存在一個空閑的發(fā)送緩沖區(qū)時從數(shù)據(jù)管理模塊讀取封裝好的標(biāo)準(zhǔn)幀數(shù)據(jù),并且將標(biāo)準(zhǔn)幀通過并串轉(zhuǎn)換模塊發(fā)送。
本文將PCI模塊劃分為三個設(shè)備,PCI模塊的結(jié)構(gòu)圖如圖3所示。三個設(shè)備都有各自的初始化功能和數(shù)據(jù)處理功能,因此VxWorks會設(shè)別到三個中斷源:中斷A、中斷B和中斷C。在本設(shè)計模塊中,VxWork分別給三個模塊分配了5、10和12號中斷。
圖3 PCI模塊的結(jié)構(gòu)圖
初始化功能主要是設(shè)置子設(shè)備的設(shè)備號、分類號和設(shè)備商信息,向系統(tǒng)申請空間大小等。當(dāng)以上的信息設(shè)置成功之后,操作系統(tǒng)設(shè)別到該唯一性設(shè)備,并能對其進(jìn)控制與數(shù)據(jù)收發(fā)。
數(shù)據(jù)處理功能主要就是處理PCI總線的數(shù)據(jù),負(fù)責(zé)將接收的32位數(shù)據(jù)發(fā)送總線上或者將總線上屬于自己的數(shù)據(jù)取出并發(fā)送到指定外圍設(shè)備。
基于雷達(dá)系統(tǒng)的實際需求,本文設(shè)計了一種總線轉(zhuǎn)換IP核的結(jié)構(gòu),它能夠很好的滿足使用不同總線的模塊間交換數(shù)據(jù),實際結(jié)果表明該設(shè)計能高效、可靠的完成該型號雷達(dá)系統(tǒng)的模塊間的數(shù)據(jù)交換,簡化了雷達(dá)系統(tǒng)中的分系統(tǒng)的復(fù)雜性。另外將其封裝成IP核后,可以直接應(yīng)用到其它的工程中,加快工程的開發(fā)進(jìn)度。