孫 濤,張華春
(1.中國(guó)科學(xué)院電子學(xué)研究所,北京 100190;2.中國(guó)科學(xué)院研究生院,北京 100189)
SUN Tao1,2,ZHANGHuachun1*
1.Institute of Electronics,The Chinese Academy of Sciences,Beijing 100190,China;
2.Graduate University,The Chinese Academy of Sciences,Beijing 100189,China
1553B總線協(xié)議是由美國(guó)軍方在上世紀(jì) 70年代制定的[1],被廣泛應(yīng)用于航空、航天等實(shí)時(shí)性和可靠性要求高的軍事領(lǐng)域。目前支持該標(biāo)準(zhǔn)的商用芯片有 HOLT公司的 HI-61XX系列,DDC公司的 BU-6517X,BU-615XX系列等,這些芯片都是由美國(guó)生產(chǎn)的,價(jià)格昂貴。而使用 FPGA設(shè)計(jì)實(shí)現(xiàn)相應(yīng)的遠(yuǎn)程終端協(xié)議[2],外接收發(fā)器完成 1553B遠(yuǎn)程終端的功能,可以降低成本,簡(jiǎn)化配置過(guò)程,增加使用靈活性。
1553B協(xié)議采用雙向曼徹斯特碼,數(shù)據(jù)在總線上以串行脈沖形式傳輸,其傳輸速率為 1 Mbit/s??偩€傳輸?shù)男畔⒆钟腥N,分別是命令字、數(shù)據(jù)字和狀態(tài)字,見表 1。1553B總線上連接的節(jié)點(diǎn)類型分為三類:總線控制器(BC)、遠(yuǎn)程終端(RT)和總線監(jiān)視器(MT)[3]。
遠(yuǎn)程終端節(jié)點(diǎn)支持的操作包括:①識(shí)別總線控制器的命令字是否有效,②對(duì)有效的命令字,按有效命令字所規(guī)定的方式做出響應(yīng)并進(jìn)行操作,③接收發(fā)送有效的數(shù)據(jù)字和狀態(tài)字,④實(shí)現(xiàn)與微處理器之間的信息交換。
表 1 1553B信息字的幀結(jié)構(gòu)
1553B協(xié)議遠(yuǎn)程終端節(jié)點(diǎn)的系統(tǒng)結(jié)構(gòu)框圖如圖1,一端通過(guò)接口管理模塊與微處理器相連接,一端通過(guò)編碼器與解碼器與總線相連接。位流控制模塊負(fù)責(zé)信息傳遞和數(shù)據(jù)交換,實(shí)現(xiàn)節(jié)點(diǎn)功能。
圖 1 系統(tǒng)結(jié)構(gòu)框圖
該模塊主要功能是實(shí)現(xiàn) FPGA模塊與微處理器之間的數(shù)據(jù)交換[4]。由于微處理器總線為 8位,1553B的信息字為 16位,因此該模塊需要在讀寫時(shí)實(shí)現(xiàn) 8位與 16位間的轉(zhuǎn)換。這就需要通過(guò)兩次置高地址鎖存,讀寫使能,規(guī)定第一次為高 8位,第二次為低 8位。讀取時(shí)第一次讀使能讀高 8位,第二次讀使能讀低 8位。
為保證可擴(kuò)展性,寄存器部分預(yù)留了 17組寄存器,包括配置寄存器、命令寄存器、中斷寄存器等[5]。這些寄存器主要用于狀態(tài)信息的存儲(chǔ)和功能參數(shù)的設(shè)置,如 RAM的 A/B區(qū)域選擇,復(fù)位,設(shè)置 RT地址,產(chǎn)生中斷。
內(nèi)存部分使用一個(gè) 16×4 096 bit的雙口 RAM,由微處理器和位流控制模塊進(jìn)行時(shí)分讀寫,完成微處理器與 1553B總線間的數(shù)據(jù)交換。RAM分為A、B兩個(gè)區(qū)域,當(dāng)前時(shí)刻只有一個(gè)處于激活狀態(tài),主要地址分配見表 2,堆棧用來(lái)存放消息描述符,每4個(gè)字描述一條消息。RT命令堆棧指針指向當(dāng)前消息的消息描述符的第一個(gè)字。查找表對(duì)應(yīng)的是子地址,存放的是指向數(shù)據(jù)塊的指針。整個(gè)查找表包括 32個(gè)接收子地址、發(fā)送子地址、廣播子地址和子地址控制字,其中子地址控制字指定了對(duì)應(yīng) RT子地址的內(nèi)存管理和中斷機(jī)制。數(shù)據(jù)塊用來(lái)存放數(shù)據(jù)字。
表 2 RT內(nèi)存映射
編碼器與解碼器相互獨(dú)立,由時(shí)鐘管理模塊提供時(shí)鐘,完成同步頭檢測(cè)、時(shí)鐘對(duì)準(zhǔn)、曼徹斯特編解碼、串并轉(zhuǎn)換和奇偶校驗(yàn)等功能。
解碼器的輸入是總線信息序列,輸出是信息字類型、16位信息字和奇校驗(yàn)結(jié)果。解碼器時(shí)鐘頻率為 8 MHz,由時(shí)鐘管理模塊對(duì) FPGA時(shí)鐘分頻得到。首先,來(lái)自總線的信息序列進(jìn)入移位寄存器,進(jìn)行同步頭檢測(cè)。得到一個(gè)有效的同步頭后,將同步頭類型緩存,開始進(jìn)行曼徹斯特解碼。對(duì)每位碼字采樣8次,在曼徹斯特跳變沿處取值,作為解碼值,同時(shí)每隔 1 000 ns采樣一次,與跳變沿處的取值對(duì)比,驗(yàn)證是否正確。對(duì)解碼得到的新序列計(jì)算奇校驗(yàn),將校驗(yàn)結(jié)果緩存。最后輸出信息字類型、16位信息字和校驗(yàn)結(jié)果。
編碼器的輸入是信息字類型和 16位信息數(shù)據(jù),輸出是串行編碼。命令字解析完畢后,需要回送狀態(tài)字或發(fā)送數(shù)據(jù)字,這個(gè)功能由編碼器完成。位流控制模塊先把需要發(fā)送的信息寫入相應(yīng)的 RAM區(qū),在得到發(fā)送命令后,位流控制模塊中的狀態(tài)機(jī)每次為編碼器輸入一個(gè)信息字,編碼器計(jì)算奇校驗(yàn),生成反相字,完成曼徹斯特編碼,根據(jù)信息字類型為序列添加同步頭,最后按照時(shí)鐘管理模塊提供的2 MHz時(shí)鐘按位發(fā)送,這樣就保證了總線上傳輸速率為 1 Mbit/s。
位流控制模塊是整個(gè)遠(yuǎn)程終端硬件系統(tǒng)的核心模塊,完成狀態(tài)機(jī)的跳轉(zhuǎn),實(shí)現(xiàn)各個(gè)邏輯模塊間的數(shù)據(jù)交換。位流控制模塊的流程見圖 2。
圖2 位流控制模塊的處理流程
進(jìn)入數(shù)據(jù)處理狀態(tài)后,如果要求遠(yuǎn)程終端接收數(shù)據(jù)字,則先從配置寄存器 1的 bit 13得到使用RAM區(qū)域 A還是區(qū)域 B,假設(shè)使用區(qū)域 A,則①?gòu)腞AM中地址為 0x0100的位置讀取本條消息的描述符堆棧地址,②從相應(yīng)查找表地址中讀取子地址控制字,判斷相應(yīng) RT子地址的 RAM管理和中斷機(jī)制,③從相應(yīng)查找表地址中讀取數(shù)據(jù)塊地址,④描述符堆棧的四個(gè)字由下向上一次寫入當(dāng)前命令字、數(shù)據(jù)塊地址、時(shí)間標(biāo)記字和塊狀態(tài)字,⑤在堆棧指針位置寫入本條消息堆棧描述符的地址,⑥向數(shù)據(jù)塊中寫入接收到的數(shù)據(jù)字,⑦數(shù)據(jù)字全部接收完畢后,返回相應(yīng)狀態(tài)字⑧產(chǎn)生中斷,通知微處理器數(shù)據(jù)接收完畢。如果命令字要求遠(yuǎn)程終端發(fā)送數(shù)據(jù),則執(zhí)行③后,在相應(yīng)位置寫入狀態(tài)字,從數(shù)據(jù)塊地址中讀取數(shù)據(jù)字,置發(fā)送使能,通過(guò)編碼器發(fā)送要求個(gè)數(shù)的數(shù)據(jù)字。不同狀態(tài)對(duì) RAM區(qū)域的訪問(wèn)如圖3所示。廣播處理狀態(tài)與數(shù)據(jù)收發(fā)類似,不做狀態(tài)字回復(fù)。方式代碼處理狀態(tài),根據(jù) 1553B總線標(biāo)準(zhǔn)對(duì)不同的方式代碼進(jìn)行相關(guān)的位操作。
1553B協(xié)議字為 16 bit,堆棧大小為 256 K,描述一條消息需要 4個(gè)字,因此 RAM區(qū)最多可緩存 32條消息。對(duì)于每條消息,又對(duì)應(yīng)著 32個(gè)子地址,可以存儲(chǔ) 32個(gè)數(shù)據(jù)字。微處理器對(duì) FPGA進(jìn)行初始配置時(shí)[6],先將數(shù)據(jù)塊地址,子地址控制字等信息寫入相應(yīng)的查找表固定地址內(nèi),當(dāng)接收到命令字后,按命令字要求,將接收到的數(shù)據(jù)按對(duì)應(yīng)子地址控制字要求的模式寫入相應(yīng)子地址的數(shù)據(jù)塊中,或者從相應(yīng)的子地址數(shù)據(jù)塊中讀取數(shù)據(jù)發(fā)送到總線上。
當(dāng)檢測(cè)出同步頭 111 000時(shí),則說(shuō)明檢測(cè)到了一個(gè)命令字,通過(guò)命令字解析,得到節(jié)點(diǎn)標(biāo)識(shí)符 RT_ID、接收發(fā)送標(biāo)識(shí)符 T/R、子地址(方式代碼)SUB_ADDR和數(shù)據(jù)字個(gè)數(shù)(方式代碼數(shù)據(jù))DW_NUM。首先由 RT地址識(shí)別子模塊驗(yàn)證 RT_ID,如果是11111,則進(jìn)入廣播處理狀態(tài);如果與節(jié)點(diǎn) id相同,則判斷子地址,若子地址是 00000或 11111,則是方式代碼,進(jìn)入方式代碼處理狀態(tài);若子地址在 00000與 11111之間,則是數(shù)據(jù)傳遞,進(jìn)入數(shù)據(jù)處理狀態(tài)。
圖 3 RT內(nèi)存的管理
本文采用 Xilinx公司的 Spartan3E系列XC3S500E芯片[7],設(shè)計(jì)過(guò)程采用 Verilog HDL硬件描述語(yǔ)言[8],并在 Xilinx ISE9.2平臺(tái)上完成整體模塊的設(shè)計(jì)、綜合,用 Modelsim SE 6.5完成仿真。
圖 4 接收數(shù)據(jù)過(guò)程仿真圖
圖 4是對(duì) RT接收數(shù)據(jù)的仿真結(jié)果:微處理器初始化堆棧指針和子地址查找表。clk為 16MHz的時(shí)鐘,rx為總線上的數(shù)據(jù),tx為 RT響應(yīng)的狀態(tài)字。接收完畢后,FGPA向微處理器發(fā)出中斷信號(hào),微處理器讀取中斷寄存器的信息后,從 RAM中以堆棧指針為起點(diǎn)讀取數(shù)據(jù),得到接收的兩個(gè)數(shù)據(jù)字是 0x1234和 0x5678,結(jié)果表明接收正確。圖 5是對(duì) RT回送數(shù)據(jù)的仿真結(jié)果,表明 RT對(duì)命令字做出正確響應(yīng)。
圖 5 發(fā)送數(shù)據(jù)過(guò)程仿真圖
本文闡述了一種基于 FPGA的 MIL-STD-1553B協(xié)議遠(yuǎn)程終端的設(shè)計(jì)方法。通過(guò)微處理器的配置,本模塊可以方便的實(shí)現(xiàn) 1553B總線網(wǎng)絡(luò)中遠(yuǎn)程終端節(jié)點(diǎn)的主要功能,發(fā)送接收數(shù)據(jù),廣播以及方式代碼等,有成本低、使用方便等優(yōu)點(diǎn)。設(shè)計(jì)中預(yù)留了寄存器結(jié)構(gòu),可以將其他功能擴(kuò)展到模塊上,從而實(shí)現(xiàn)較完整的支持 1553B總線協(xié)議的硬件模塊。
[1] CONDOE ENGINEERING INC.Mil-Std-1553 Tutorial[S].Santa Barbara,CA93103,2004.
[2] 張羽,胡玉貴,殷奎喜等.基于 FPGA的多串口擴(kuò)展實(shí)現(xiàn)[J].電子器件,2009,32(1):233-236.
[3] 張傳武,黃勤珍.Mil-Std-1553總線協(xié)議分析[J].西南民族大學(xué)學(xué)報(bào)自然科學(xué)版,2007,33(2):381-383.
[4] 羅一峰,蔡嵩.基于 1553B總線的接口設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2006,29(2):71-73,76.
[5]ACE/Mini-ACE Series BC/RT/MT Advanced Communication Engine Integrated 1553 Terminal User's Guide[S].Data Device Corporation.1999.
[6] 歐偉明.基于 FPGA和 MCU的 200通道 A/D轉(zhuǎn)換器的設(shè)計(jì)[J].電子器件,2007,30(4):1234-1238.
[7] 田耕,徐文波.Xilinx FPGA開發(fā)使用教程[M].清華大學(xué)出版社,2008,11.
[8] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程(第 2版)[M].北京:北京航空航天大學(xué)出版社,2008,1.