周麗艷,劉波,馮丹,高瑛珂
(北京控制工程研究所,北京 100190)
隨著航天任務(wù)復(fù)雜性的日益提高,控制系統(tǒng)的日益復(fù)雜,要實(shí)現(xiàn)高精度智能控制,需要各種異構(gòu)多源的感知設(shè)備和操控機(jī)構(gòu),因此作為計(jì)算核心的高可靠星載片上系統(tǒng)芯片,除了具有高能效的計(jì)算能力外,還應(yīng)具備豐富的高低速存儲(chǔ)和通信接口,以滿足數(shù)量和種類日益增長(zhǎng)的敏感器和驅(qū)動(dòng)機(jī)構(gòu)接口通信需求。星載控制計(jì)算機(jī)是衛(wèi)星控制系統(tǒng)的核心,通常情況下,控制計(jì)算機(jī)數(shù)據(jù)采集、控制計(jì)算和控制輸出有一個(gè)共同的周期,稱為控制周期[1]。如圖1所示,在每個(gè)控制周期,控制計(jì)算機(jī):(1)在采集任務(wù)中,采集各敏感器姿態(tài)與軌道狀態(tài);(2)在計(jì)算任務(wù)中,完成控制規(guī)律的計(jì)算;(3)在輸出任務(wù)中,發(fā)出控制指令給執(zhí)行機(jī)構(gòu),并根據(jù)軌道運(yùn)行狀況實(shí)現(xiàn)控制模式轉(zhuǎn)換;(4)在遙測(cè)遙控任務(wù)中,從地面遙控指令或數(shù)管計(jì)算機(jī)注數(shù)中獲得軌道要求、工作狀態(tài)、系統(tǒng)參數(shù)修正等;采集部件和控制器自身信息,存儲(chǔ)并通過(guò)遙測(cè)通道下發(fā)到地面[2]。
控制周期T可表示為:
M為一個(gè)控制周期中采集信息的敏感器個(gè)數(shù)。ti1為控制計(jì)算機(jī)向第i個(gè)敏感器單機(jī)發(fā)送信息采集命令的發(fā)送時(shí)間,ti2為向第i個(gè)敏感器單機(jī)發(fā)送信息采集命令的傳輸時(shí)間;ti3為該敏感器單機(jī)的響應(yīng)時(shí)間;ti4為該敏感器單機(jī)的信息傳送時(shí)間[3],ti5代表了控制算法的運(yùn)行時(shí)間,N為一個(gè)控制周期中驅(qū)動(dòng)的執(zhí)行機(jī)構(gòu)個(gè)數(shù)。tj6為控制計(jì)算機(jī)向第j個(gè)執(zhí)行機(jī)構(gòu)發(fā)送控制命令的發(fā)送時(shí)間,tj7為控制計(jì)算機(jī)向第j個(gè)執(zhí)行機(jī)構(gòu)發(fā)送控制命令的傳輸時(shí)間,tj8為第j個(gè)執(zhí)行機(jī)構(gòu)響應(yīng)時(shí)間,tj9為CPU讀取第j個(gè)執(zhí)行機(jī)構(gòu)運(yùn)行狀態(tài)并對(duì)其進(jìn)行狀態(tài)檢查的時(shí)間[4]。
可見,在一個(gè)控制周期內(nèi),CPU利用率為:
實(shí)際中,由于I/O速度很慢,因此CPU利用率非常低,大部分時(shí)間在等待I/O部件完成輸入/輸出;另一方面,目前I/O抗干擾能力和容錯(cuò)性差,針對(duì)控制計(jì)算機(jī)的容錯(cuò)設(shè)計(jì)一直是控制系統(tǒng)研究的重點(diǎn)和熱點(diǎn)[5]。因此,為了提升CPU利用率并提高I/O容錯(cuò)性,本論文設(shè)計(jì)基于軟件定義的I/O控制器,下文稱為 SDRIOC(software-defined reconfigurable I/O controller),CPU將I/O控制權(quán)利下放給I/O控制器,只需對(duì)控制器進(jìn)行配置,控制器可完全管理I/O過(guò)程,根據(jù)配置完成輸入輸出數(shù)據(jù)交換。
基于軟件定義的可重構(gòu)I/O控制器的整體框圖如圖2所示。硬件部分由16KB雙口RAM、調(diào)度器、ROM指令存儲(chǔ)器、RAM數(shù)據(jù)存儲(chǔ)器、硬件邏輯組成。雙口RAM用于主機(jī)CPU與控制器進(jìn)行數(shù)據(jù)傳遞和信息交換。調(diào)度器負(fù)責(zé)配置信息的解析和I/O任務(wù)的處理,通過(guò)雙口RAM獲取需要執(zhí)行收發(fā)操作的接口相關(guān)信息和要發(fā)送的數(shù)據(jù)。ROM是指令存儲(chǔ)器,RAM是數(shù)據(jù)存儲(chǔ)器。硬件邏輯基于北京控制工程研究所電子中心開發(fā)的IO_ASIC實(shí)現(xiàn),其集成了多種外設(shè)接口,包括同步串口、SPI、CAN控制器、UART等。
雙口RAM存儲(chǔ)區(qū)域分成三部分:標(biāo)志位區(qū)、配置區(qū)和數(shù)據(jù)區(qū)。標(biāo)志位區(qū)存放:各接口的接收和發(fā)送使能標(biāo)志位,是主機(jī)CPU“通知”調(diào)度器進(jìn)行收發(fā)的重要配置位,調(diào)度器檢測(cè)到某一位使能標(biāo)志位置1后,立即根據(jù)配置區(qū)的相關(guān)接口配置信息對(duì)對(duì)應(yīng)的接口進(jìn)行配置??刂破髅?biāo)志代表控制器正在執(zhí)行前一次配置的收/發(fā)操作,主CPU暫時(shí)無(wú)法寫入新的接收使能或發(fā)送使能標(biāo)志位。接口接收完成標(biāo)志代表控制器完成了對(duì)應(yīng)接口的收數(shù)據(jù)過(guò)程,主CPU可從數(shù)據(jù)區(qū)對(duì)應(yīng)地址處讀取收到的數(shù)據(jù)了。配置區(qū)存放了對(duì)接口的配置信息,256B可以同時(shí)存放32個(gè)接口的配置信息,每個(gè)接口占8Bytes。接口類型包括UART/SPI/CAN/同步串口,調(diào)度器會(huì)根據(jù)接口類型解析其余的配置信息。
雙口RAM的配置由主機(jī)CPU進(jìn)行,寫入先后順序?yàn)榕渲脜^(qū)→數(shù)據(jù)區(qū)→標(biāo)志位區(qū)。在一個(gè)控制周期內(nèi),主機(jī)CPU首先查詢控制器的忙標(biāo)志是否未置位,如被置位則進(jìn)行數(shù)據(jù)解碼和計(jì)算[6],以及其他控制算法所需的其它計(jì)算任務(wù)[7],否則向雙口RAM配置區(qū)寫入一個(gè)控制周期中要進(jìn)行收發(fā)的所有接口的相關(guān)配置信息。對(duì)于要發(fā)送數(shù)據(jù)的接口,向數(shù)據(jù)區(qū)寫入要發(fā)送的數(shù)據(jù),必須小于8KB。然后將所需接口的發(fā)送/接收使能標(biāo)志位置1。若有接口配置為接收,則不斷查詢接收完成標(biāo)志位是否置位,期間可進(jìn)行計(jì)算任務(wù)。當(dāng)接收完成標(biāo)志置位且所有計(jì)算任務(wù)都完成后,清除接收標(biāo)志位,從雙口RAM中讀取接收到的數(shù)據(jù)。
調(diào)度器負(fù)責(zé)I/O任務(wù)的調(diào)度。調(diào)度器有三種模式:發(fā)送、接收、自回環(huán)。調(diào)度器會(huì)按順序處理接口的發(fā)送、接收、自回環(huán)。優(yōu)先檢查發(fā)送標(biāo)志,其次檢查接收標(biāo)志,最后檢查自回環(huán)標(biāo)志。調(diào)度器如果檢測(cè)到接口被配置為發(fā)送后,則立即配置相關(guān)接口,并從雙口RAM搬運(yùn)數(shù)據(jù)到接口;若未檢測(cè)到接口配置為發(fā)送,則檢查是否有接口配置為接收,若有,則配置接口并將數(shù)據(jù)從接口搬運(yùn)到雙口RAM;最后檢查接口是否被配置為自回環(huán),該模式僅用于測(cè)試,令接口發(fā)送的數(shù)據(jù)由它自身接收,若接口被配置為自回環(huán),則將接口配置為發(fā)送和接收,每發(fā)送FIFO_DEPTH數(shù)據(jù)后從接收FIFO讀出FIFO_DEPTH個(gè)字節(jié),避免由于發(fā)送數(shù)據(jù)超出FIFO容量而導(dǎo)致FIFO溢出[8-9]。
如圖3所示是實(shí)驗(yàn)使用的驗(yàn)證板。實(shí)驗(yàn)用到了驗(yàn)證板上的SiP2115處理器與一片CYCLONEⅢFPGA器件。基于軟件定義的可重構(gòu)I/O控制器設(shè)計(jì)下載到CYCLONEⅢ中,用SiP2115處理器模擬主機(jī)CPU。
如圖4所示是SignalTypeⅡ中抓取的CPU向雙口RAM寫入配置信息的波形。
實(shí)驗(yàn)結(jié)果表明,增設(shè)I/O控制器后,CPU用于處理I/O的時(shí)間大大減少。如圖5所示為波特率9600時(shí),發(fā)送(接收)數(shù)據(jù)量隨時(shí)間變化關(guān)系。從圖中可看出,不帶控制器時(shí),隨發(fā)送數(shù)據(jù)量增加,時(shí)間線性增長(zhǎng)。這是由于發(fā)送數(shù)據(jù)的工作全部由CPU完成,因此發(fā)送數(shù)據(jù)越多,CPU所需時(shí)間越長(zhǎng)。帶控制器時(shí),隨發(fā)送數(shù)據(jù)量增加時(shí)間只有0.003的增長(zhǎng),這是因?yàn)镃PU對(duì)雙口RAM寫速度很快,因此當(dāng)數(shù)據(jù)量增大時(shí)CPU時(shí)間會(huì)增長(zhǎng)但增長(zhǎng)量非常小。當(dāng)波特率921600時(shí),發(fā)送(接收)數(shù)據(jù)量隨時(shí)間變化關(guān)系。折線走勢(shì)與波特率9600相同,但由于波特率較大,因此發(fā)送相同數(shù)據(jù)量時(shí)時(shí)間更短。
本文設(shè)計(jì)一種基于軟件定義的可重構(gòu)I/O控制器,CPU將I/O處理任務(wù)全權(quán)交給控制器處理,從而有更多的時(shí)間執(zhí)行其他計(jì)算任務(wù)。實(shí)驗(yàn)結(jié)果表明,將可重構(gòu)I/O控制器加入整機(jī)后,有效提高了CPU的利用率,提升了整機(jī)的性能和容錯(cuò)性。