1553B總線遠(yuǎn)程端點(diǎn)數(shù)據(jù)鏈路層協(xié)議的FPGA實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
0 引 言
用于車輛、艦船、飛機(jī)等機(jī)動(dòng)平臺(tái)上的電子設(shè)備越來(lái)越多,并且越來(lái)越復(fù)雜。將電子設(shè)備加以有效的綜合,使之達(dá)到資源和功能共享已成為必然趨勢(shì)。電子綜合的支撐技術(shù)是聯(lián)網(wǎng)技術(shù),而機(jī)動(dòng)平臺(tái)上的聯(lián)網(wǎng)技術(shù)不同于一般的局域網(wǎng)技術(shù),它特別強(qiáng)調(diào)網(wǎng)絡(luò)的可靠性和實(shí)時(shí)性。1553B總線是在20世紀(jì)70年代末為適應(yīng)飛機(jī)的發(fā)展,由美國(guó)提出的飛機(jī)內(nèi)部的電子系統(tǒng)聯(lián)網(wǎng)標(biāo)準(zhǔn);其后由于它的高可靠性和靈活性而在其他機(jī)動(dòng)平臺(tái)上得到了廣泛應(yīng)用。國(guó)內(nèi)上世紀(jì)80年代中期已開始接觸這類技術(shù),目前它的研究與應(yīng)用范圍正在迅速擴(kuò)大。
1553B總線標(biāo)準(zhǔn)由美國(guó)軍方制定。支持該標(biāo)準(zhǔn)的協(xié)議芯片有DDC公司的BU一6517X,BU一615XX系列;HOLT公司的HI一61XX系列;UTMC公司的BCRTM等。這些芯片都集成了BC,RT,BM的功能,但是這些芯片都由美國(guó)公司生產(chǎn),價(jià)格非常昂貴。為了能低成本地使用這種可靠性非常好的數(shù)據(jù)總線,采用FPGA設(shè)計(jì)并實(shí)現(xiàn)遠(yuǎn)程端點(diǎn)的數(shù)據(jù)鏈路層協(xié)議,通過外接一個(gè)總線收發(fā)器完成1553B遠(yuǎn)程端點(diǎn)協(xié)議芯片功能。
在電子設(shè)計(jì)領(lǐng)域,可編程邏輯器件的廣泛應(yīng)用為數(shù)字系統(tǒng)的設(shè)計(jì)帶來(lái)極大的靈活性,1片F(xiàn)PGA芯片可代替上百個(gè)IC電路。Altera公司開發(fā)的Cyclone系列FPGA芯片價(jià)格便宜,功能強(qiáng)大,而且配套的開發(fā)軟件QuartusⅡ更是集成了時(shí)序仿真、編譯、綜合、優(yōu)化等功能,這為實(shí)現(xiàn)1553B總線遠(yuǎn)程節(jié)點(diǎn)通信協(xié)議提供了有利條件。文中所實(shí)現(xiàn)的1553B總線遠(yuǎn)程端點(diǎn)數(shù)據(jù)鏈路層協(xié)議采用VerilogHDL語(yǔ)言編寫;采用ModelSim仿真;采用QuartusⅡ編譯、綜合、優(yōu)化,并在A1tera的EPlC6系列FPGA上實(shí)現(xiàn)。
1 1553B總線及其接口功能
1553B的全稱是:飛機(jī)內(nèi)部時(shí)分制指令/響應(yīng)式多路傳輸數(shù)據(jù)總線。它對(duì)物理層,如:傳輸介質(zhì)、屏蔽條件、耦合方式、阻抗匹配以及輸入輸入兼容性等都做了嚴(yán)格規(guī)范。1553B總線是以串行數(shù)據(jù)脈沖的形式進(jìn)行傳輸?shù)模鋽?shù)據(jù)用雙相曼徹斯特碼的形式來(lái)表示,其傳輸速率為1 Mb/s。1553B數(shù)據(jù)總線上連接有3種類型的節(jié)點(diǎn):
(1)總線控制器(BC):控制總線上的數(shù)據(jù)傳輸;
(2)遠(yuǎn)程終端(RT):響應(yīng)BC命令,執(zhí)行相關(guān)操作;
(3)總線監(jiān)視器(BM):有選擇地接收數(shù)據(jù)總線上的信息并保存。
飛機(jī)上的每個(gè)子系統(tǒng)可以通過1553B總線連接到任何一個(gè)系統(tǒng)中并與其通信。
在總線上傳輸字有3種類型:命令字、狀態(tài)字和數(shù)據(jù)字。每種字的字長(zhǎng)為20位,有效信息位為16位,每個(gè)字的前三位為同步字頭,最后一位為奇偶校驗(yàn)位。有效信息(16位)及奇偶校驗(yàn)位在總線上以曼徹斯特碼的形式進(jìn)行編碼,每位占的時(shí)間為1μs。同步字頭占3位,或先正后負(fù)(命令字、狀態(tài)字)或先負(fù)后正(數(shù)據(jù)字),正、負(fù)電平各占1.5μs,即占同步頭位場(chǎng)的50%。
由于系統(tǒng)類型的不同,可辨別出命令字和狀態(tài)字,命令字由總線控制器發(fā)出,而狀態(tài)字由遠(yuǎn)程終端RT發(fā)出。
作為1553B總線的遠(yuǎn)程端點(diǎn),應(yīng)完成以下功能:
(1)將總線上的串行信息流轉(zhuǎn)換成微控制器可以處理的并行信息或者與之相反;
(2)接收或者發(fā)送信息時(shí),能夠識(shí)別或生成標(biāo)準(zhǔn)的1553B信息字;
(3)完成與微控制器之間的信息交換,包括1553B信息地址的分配、命令字的譯碼或返回狀態(tài)字、發(fā)送數(shù)據(jù)字等。
1553B遠(yuǎn)程端點(diǎn)數(shù)據(jù)鏈路層協(xié)議需要完成上述的1553B遠(yuǎn)程端點(diǎn)的大部分功能,包括同步頭添加與檢測(cè),曼徹斯特碼編解碼,命令字譯碼與接收數(shù)據(jù)字,狀態(tài)字反饋與收發(fā)數(shù)據(jù)字,數(shù)據(jù)緩沖以及與微控制器之間的接口等。整個(gè)數(shù)據(jù)鏈路層協(xié)議內(nèi)部采用寄存器控制的方式進(jìn)行操作,上層微控制器通過讀寫實(shí)現(xiàn)程序的寄存器,以完成對(duì)協(xié)議的控制,而內(nèi)部操作也是根據(jù)相關(guān)寄存器的狀態(tài)來(lái)進(jìn)行的,因此設(shè)計(jì)時(shí),首先定義相關(guān)寄存器,根據(jù)數(shù)據(jù)線的寬度,所有寄存器都定義為16位。
(1)控制寄存器:它完成內(nèi)部時(shí)鐘、總線端口選擇、節(jié)點(diǎn)狀態(tài)設(shè)定、狀態(tài)字保留位、節(jié)點(diǎn)ID以及全局復(fù)位等狀態(tài)的設(shè)置和操作。
(2)錯(cuò)誤寄存器(ER):當(dāng)通信協(xié)議中出現(xiàn)了奇偶校驗(yàn)錯(cuò)誤,數(shù)據(jù)不連續(xù)錯(cuò)誤,接收數(shù)據(jù)個(gè)數(shù)錯(cuò)誤,接收FIFO錯(cuò)誤,發(fā)送FIFO錯(cuò)誤時(shí)就會(huì)置位其相關(guān)位,上層微控制器通過讀取ER就知道錯(cuò)誤的類型。
(3)狀態(tài)寄存器(SR):SR中反映了當(dāng)前數(shù)據(jù)鏈路層協(xié)議的狀態(tài),包括接收數(shù)據(jù)狀態(tài)、接收FIFO長(zhǎng)度、發(fā)送FIFO長(zhǎng)度、接收錯(cuò)誤狀態(tài)、中斷信號(hào)狀態(tài)nINT和nINTD。
(4)接收命令字寄存器(RCR):RCR用于保存當(dāng)前接收到的命令字。
(5)發(fā)送矢量字寄存器(SVWR):該寄存器用于存放總線控制器要求的矢量字,這個(gè)矢量字由微控制器寫入。
(6)接收同步字寄存器(SYNDR):用于存放接收到的帶數(shù)據(jù)字同步命令中的數(shù)據(jù)字。
(7)自測(cè)結(jié)果寄存器(STRR):STRR用于存放上次自測(cè)的結(jié)果。為了方便地址分配,設(shè)計(jì)中把發(fā)送和接收FIFO都作為一個(gè)16位寄存器來(lái)對(duì)待。
2 1553B遠(yuǎn)程端點(diǎn)數(shù)據(jù)鏈路層協(xié)議的FPGA實(shí)現(xiàn)的總體設(shè)計(jì)
1553B遠(yuǎn)程端點(diǎn)數(shù)據(jù)鏈路層協(xié)議的FPGA實(shí)現(xiàn)一共分為4個(gè)模塊:序列解析模塊、命令解析模塊、發(fā)送模塊和上層交互模塊。整個(gè)協(xié)議實(shí)現(xiàn)采用時(shí)序驅(qū)動(dòng)的方式進(jìn)行,時(shí)鐘頻率為8 MHz,下面就按照數(shù)據(jù)進(jìn)入的順序介紹整個(gè)協(xié)議的FPGA實(shí)現(xiàn)過程。
2.1 序列解析模塊
這個(gè)模塊接收從收發(fā)器接收的信號(hào)序列,先后進(jìn)行同步頭檢測(cè),曼碼解碼,奇偶校驗(yàn),ID檢測(cè)等步驟,最后給命令解析模塊一個(gè)只包含命令信息的16位數(shù)據(jù),以及其字特性。其實(shí)現(xiàn)流程如圖1所示。
序列解析模塊首先對(duì)進(jìn)入的總線序列進(jìn)行同步頭檢測(cè),如果有效,則進(jìn)行曼徹斯特碼解碼。曼徹斯特碼解碼是在同步頭檢測(cè)有效時(shí)同步開始的,它在同步頭檢測(cè)有效后每隔1 000μs對(duì)序列采樣一次,并把采樣值作為解碼值,同時(shí)判斷在采樣時(shí)序列是否發(fā)生了跳變,如果發(fā)生,則說(shuō)明序列滿足曼徹斯特碼編碼,否則認(rèn)定序列存在編碼錯(cuò)誤,停止解碼并置位錯(cuò)誤寄存器,而第一次采樣是在同步頭檢測(cè)有效后250ns。解碼完成后進(jìn)行奇偶校驗(yàn),接收模塊對(duì)有效序列進(jìn)行奇偶校驗(yàn),如果奇偶校驗(yàn)錯(cuò)誤,則丟棄這個(gè)序列,同時(shí)置位消息差錯(cuò)位;如果奇偶校驗(yàn)正確,則進(jìn)入ID檢測(cè)部分。奇偶校驗(yàn)在VerilogHDL中通過位異或就可以實(shí)現(xiàn)。
當(dāng)奇偶校驗(yàn)正確以后,接收模塊就根據(jù)從同步頭檢測(cè)得到的字類型進(jìn)行不同操作。對(duì)于數(shù)據(jù)字,接收模塊收到序列后就檢測(cè)等待數(shù)據(jù)字寄存器的值,如果不為零,則把這個(gè)數(shù)據(jù)放入到接收緩沖器中,如果等待數(shù)據(jù)字寄存器的值為1,則首先把寄存器清零,然后把中斷請(qǐng)求信號(hào)置位,最后把狀態(tài)寄存器的值放入發(fā)送緩沖器中,并通知發(fā)送模塊發(fā)送以及復(fù)位等待數(shù)據(jù)字寄存器,否則把等一待數(shù)據(jù)字寄存器的值減1,等待下一個(gè)字的到來(lái)。如果等待數(shù)據(jù)字寄存器值為零,則認(rèn)為傳輸錯(cuò)誤,丟棄這個(gè)數(shù)據(jù)字。對(duì)于命令字,接收模塊進(jìn)行ID驗(yàn)證,檢查所收到的命令是否是總線控制器發(fā)給本節(jié)點(diǎn)的。它提取所收到的16位有效信息序列中的高5位,與本節(jié)點(diǎn)的ID比較,如果不相同,則丟棄這個(gè)序列,等待下一個(gè)序列的到來(lái);如果相同,則表示這個(gè)序列是總線控制器發(fā)給本節(jié)點(diǎn)的命令,保存命令,啟動(dòng)命令解析模塊。
2.2 命令解析模塊
命令解析模塊完成對(duì)收到的命令字進(jìn)行解析,對(duì)收到的數(shù)據(jù)進(jìn)行存儲(chǔ)的工作。命令解析模塊是整個(gè)協(xié)議的核心,它負(fù)責(zé)把總線控制器傳給本節(jié)點(diǎn)的命令翻譯成本節(jié)點(diǎn)的操作,并執(zhí)行相關(guān)動(dòng)作。其工作流程如圖2所示。
假設(shè)命令字存放在寄存器CMD—REG[15:0]中,則命令解析模塊首先檢測(cè)CMD REG[9:5],如果CMD REG[9:5]不為全1或者全0,就表示總線控制器給節(jié)點(diǎn)的是數(shù)據(jù)傳輸命令;命令解析模塊則繼續(xù)檢測(cè)CMD REG[10]位,如果為1,則表示總線控制器要求本節(jié)點(diǎn)發(fā)送數(shù)據(jù),同時(shí)用CMD REG[4:0]指定了需要發(fā)送的數(shù)據(jù)長(zhǎng)度;命令解析模塊在收到這個(gè)命令后就把相關(guān)的數(shù)據(jù)和狀態(tài)寄存器的值裝入發(fā)送緩沖器中,并通知發(fā)送模塊進(jìn)行發(fā)送。如果CMD REG[10]位為O,則表示總線控制器要求本節(jié)點(diǎn)接收數(shù)據(jù),同時(shí)也用CMD REG[4:0]指定了接收數(shù)據(jù)的長(zhǎng)度,而用CMD REG[9:5]指定了數(shù)據(jù)接收子節(jié)點(diǎn)的ID,命令解析模塊在收到這個(gè)命令以后就把CMD REG[4:O]裝入等待數(shù)據(jù)字寄存器中,等待后繼數(shù)據(jù)字的到來(lái)。如果CMD REG[9:5]為全1或者全O,則表示總線控制器傳輸?shù)目刂泼钭郑⑼ㄟ^CMD REG[4:0]指定了相應(yīng)的命令方式代碼。對(duì)于命令方式代碼,命令解析模塊根據(jù)1553B總線標(biāo)準(zhǔn)對(duì)不同方式代碼進(jìn)行相關(guān)的寄存器置位操作。
2.3 發(fā)送模塊
命令解析完成后都需要進(jìn)行狀態(tài)反饋或者數(shù)據(jù)發(fā)送,而完成這個(gè)功能的是發(fā)送模塊,發(fā)送模塊負(fù)責(zé)把命令解析模塊和接收模塊裝載到發(fā)送緩沖器中的數(shù)據(jù)發(fā)送到總線上去,如圖3所示,它包括讀取數(shù)據(jù),產(chǎn)生反相字,曼徹斯特碼編碼,添加同步頭,2 MHz時(shí)鐘數(shù)據(jù)發(fā)送等幾個(gè)部分,同時(shí)由于發(fā)送緩沖器中數(shù)據(jù)有可能多于2個(gè)字節(jié),因此還可能需要循環(huán)進(jìn)行這個(gè)操作。下面就根據(jù)發(fā)送的具體流程設(shè)計(jì)每個(gè)部分。首先是發(fā)送緩沖器部分,當(dāng)接收到發(fā)送命令后,發(fā)送模塊就第一次讀取發(fā)送緩沖器的前兩個(gè)字節(jié),因?yàn)檫@兩個(gè)字節(jié)肯定是狀態(tài)字,然后把這兩個(gè)字節(jié)貼上狀態(tài)字標(biāo)簽,繼續(xù)傳給后繼單元,待完成以后就把接收發(fā)送緩沖器的發(fā)送數(shù)據(jù)長(zhǎng)度寄存器減1,并把發(fā)送緩沖器中的數(shù)據(jù)向前移動(dòng)2個(gè)字節(jié)。如果發(fā)送數(shù)據(jù)長(zhǎng)度寄存器不為零,則繼續(xù)等待下一次的發(fā)送。
2.4 上層交互模塊
最后一個(gè)模塊是上層交互模塊,這個(gè)模塊負(fù)責(zé)與上層微控制器進(jìn)行信息交互,它負(fù)責(zé)把微控制器寫入的數(shù)據(jù)放入相應(yīng)的寄存器中,或者按上層微控制器的命令回傳相關(guān)的數(shù)據(jù)。上層交互模塊主要包括邊沿信號(hào)與電平信號(hào)轉(zhuǎn)換、地址解碼和讀寫寄存器。因?yàn)閰f(xié)議實(shí)現(xiàn)模塊中采用的是邊沿信號(hào)觸發(fā),而上層微控制器給FPGA的信號(hào)是電平信號(hào),要順利地完成通信,就需要進(jìn)行轉(zhuǎn)換,這里通過鎖存器和計(jì)數(shù)器來(lái)完成。地址解碼就是把收到的地址解碼成相應(yīng)寄存器的地址,然后寫入收到的數(shù)據(jù)或者把寄存器中的數(shù)據(jù)讀出放入到數(shù)據(jù)總線上。
3 仿真及FPGA實(shí)現(xiàn)
為了確保設(shè)計(jì)的可行性,必須對(duì)設(shè)計(jì)進(jìn)行時(shí)序仿真。整個(gè)協(xié)議VerilogHDL實(shí)現(xiàn)程序在Altera公司的FPGA開發(fā)軟件QuartusⅡ中編寫、編譯、綜合。整個(gè)程序的仿真在Modelsim 6.0中進(jìn)行,其仿真過程如下:
(1)接收數(shù)據(jù)??偩€控制器發(fā)送給實(shí)現(xiàn)程序兩個(gè)數(shù)據(jù):0x1234和Ox5678,上層微控制器在實(shí)現(xiàn)程序接收數(shù)據(jù)后通過上層交互模塊把數(shù)據(jù)讀出,其中第一個(gè)數(shù)據(jù)包含了接收數(shù)據(jù)長(zhǎng)度,通過圖4可以看出整個(gè)過程順利進(jìn)行,完成了預(yù)定目標(biāo)。
(2)發(fā)送數(shù)據(jù)??偩€控制器間隔地發(fā)送給實(shí)現(xiàn)程序兩個(gè)發(fā)送數(shù)據(jù)的命令,讓實(shí)現(xiàn)程序反饋相關(guān)的數(shù)據(jù),這些數(shù)據(jù)是通過上層交互模塊提前寫入到實(shí)現(xiàn)程序中的,其仿真過程如圖5。通過圖5也可以看出在實(shí)現(xiàn)程序接收到命令到發(fā)送出數(shù)據(jù)的延時(shí)時(shí)間大約為4μs,完全符合1553B總線對(duì)遠(yuǎn)程端點(diǎn)反饋信號(hào)延時(shí)的規(guī)定。
(3)一般命令??偩€控制器發(fā)送給實(shí)現(xiàn)程序一般的方式代碼命令,代碼分別為:000ll,10010,01111和00001,其仿真過程如圖6所示??梢姡瑢?shí)現(xiàn)程序正確地反饋了相關(guān)信息,符合設(shè)計(jì)要求。
該設(shè)計(jì)在仿真正確以后,通過QuartusⅡ優(yōu)化、綜合,最后在Altera公司的Cyclone系列FPGA上進(jìn)行了具體的實(shí)現(xiàn),并與Freescale公司的16位單片機(jī)MC9S12XDP512一起組成了1553B遠(yuǎn)程端點(diǎn),通過1553B收發(fā)器聯(lián)入到了1553B總線系統(tǒng)中,成功地完成了遠(yuǎn)程端點(diǎn)的協(xié)議。這說(shuō)明采用FPGA實(shí)現(xiàn)程序設(shè)計(jì)的1553B遠(yuǎn)程端點(diǎn)通信協(xié)議完全正確,達(dá)到了預(yù)期的目的。
4 總結(jié)及設(shè)計(jì)通用性
用于1553B遠(yuǎn)程端點(diǎn)數(shù)據(jù)鏈路層協(xié)議的FPGA實(shí)現(xiàn)程序采用自頂向下和自下向上相結(jié)合的方式進(jìn)行設(shè)計(jì),用Veri1ogHDL語(yǔ)言編寫;用Modelsim和QuartusⅡ進(jìn)行仿真和綜合。在最后,針對(duì)特定器件做了再一次的優(yōu)化,縮短了設(shè)計(jì)周期,提高了系統(tǒng)性能,并且大大提高了芯片資源的利用率。
該設(shè)計(jì)具有較高的通用性,與外部的接口采用標(biāo)準(zhǔn)的通信接口方式進(jìn)行。它對(duì)于上層微控制器來(lái)說(shuō)就是一個(gè)內(nèi)存單元,上層微控制器通過對(duì)相關(guān)地址的讀寫即可完成對(duì)整個(gè)通信協(xié)議的控制,應(yīng)用非常簡(jiǎn)便,還可以封裝成模塊,嵌入到NiosⅡ等處理器中,成為其內(nèi)部的一個(gè)控制器。