呂 滔,鄧玉嬌,陳蘭英,蔣 陽
(中國核動力研究設(shè)計院 核反應(yīng)堆系統(tǒng)設(shè)計技術(shù)重點實驗室,成都 610213)
安全級DCS軟件分為固件及工程組態(tài)兩部分。固件是寫入EROM或EEPROM中的程序,是一個系統(tǒng)最基礎(chǔ)、最底層工作的軟件,應(yīng)用軟件要在固件的基礎(chǔ)上運行。本文提到的模塊軟件下裝工作僅針對固件,也可稱為嵌入式軟件。安全級DCS模塊軟件開發(fā)與普通軟件有所不同,如GB 12172《核電廠安全級系統(tǒng)計算機軟件》中,通過控制和降低軟件復(fù)雜度,確保軟件運行行為的確定性[1]。因此,即使當(dāng)前已有很多關(guān)于固件更新的方案[2],均需要經(jīng)過充分的驗證后,才能用于安全級DCS。安全級DCS平臺目前還處于傳統(tǒng)的直接將下載線插入JTAG插座進(jìn)行軟件下裝的方式,基于現(xiàn)有模式,探索一種簡單高效的方式,提升模塊軟件的下裝效率,保證產(chǎn)品質(zhì)量。
表1 芯片下裝方式Table 1 Chip download method
嵌入式芯片的軟件下裝方式分為ICP(In Circuit Programing)在電路編程、ISP(In System Programing)在系統(tǒng)編程、IAP(In Applicating Programing)在應(yīng)用編程3種。ICP為板級電路下裝,不需要通信協(xié)議,可通過電路直接將軟件灌入芯片中;ISP方式需要在芯片內(nèi)部預(yù)先燒錄可執(zhí)行Bootloader程序,這是利用系統(tǒng)級的通信將軟件傳輸?shù)叫酒?,相對于ICP更方便,但第一次下載會比較復(fù)雜;IAP是在ISP的基礎(chǔ)上進(jìn)一步優(yōu)化,芯片內(nèi)有可執(zhí)行的應(yīng)用程序。因此,在支持網(wǎng)絡(luò)通信的情況下,可以通過網(wǎng)絡(luò)獲取軟件,進(jìn)行在線升級。
這3種下裝方式方便程度不同,但均區(qū)別于傳統(tǒng)的預(yù)先燒錄程序再裝上電路板的方式,可以在芯片焊接到電路板以后再進(jìn)行靈活的編程調(diào)試。本文不再就這3種方式的具體細(xì)節(jié)進(jìn)行展開,僅對它們的特點進(jìn)行簡單的對比。
IAP方式可支持遠(yuǎn)程在線更新,因其使用方便,目前在商業(yè)領(lǐng)域已廣泛應(yīng)用。如手機的固件更新,不需要廠家額外提供任何硬件支持,只需要手機在有網(wǎng)絡(luò)的環(huán)境下進(jìn)行固件下載更新即可。但安全級DCS的所有軟件均為自主開發(fā),受開發(fā)周期等因素制約,目前仍使用第1種以實現(xiàn)最簡單的ICP方式,即通過專用下載器連接板上下載口進(jìn)行下裝。
在ICP的下載模式下,每次更新程序時需要將模塊外殼拆開,連接板上的JTAG插座進(jìn)行軟件下裝?;诂F(xiàn)有安全級DCS平臺,其內(nèi)部不止一個芯片,下載完一個芯片后還需要切換下載口再進(jìn)行一次下裝,以安全級DCS某模塊為例,軟件下裝具體流程如圖1所示。
圖1 模塊軟件下裝流程圖Fig.1 Flow chart of module software download
從圖1可以看出,用這種方式進(jìn)行下裝,每次更新程序都需要將模塊拆開,再挨個逐一按程序進(jìn)行下裝,這樣手動操作復(fù)雜,效率低下。
從實踐中發(fā)現(xiàn),軟件下裝的很多操作都是簡單重復(fù)的動作,如果可以實現(xiàn)自動化、批量化操作,可以大量節(jié)省時間。但下載口插拔、切換、外殼拆裝都受到下載接口在模塊內(nèi)部的因素制約,因此下載接口引出是實現(xiàn)批量化下裝的關(guān)鍵,可以避免模塊外殼拆裝、下載線插拔等非必要的操作。
DCS系統(tǒng)采用模塊化的設(shè)計,從前面插入功能模塊,后面引出信號,模塊故障時只需將模塊拔出更換即可,不用重新接線?;诖颂攸c,模塊的下載口可以通過后面引出,每次進(jìn)行軟件下載時,不用再進(jìn)行下載線的插拔動作,這種方式可以避免拆殼與下載線的插拔,節(jié)省大量時間,提升下裝穩(wěn)定性。圖2為下載口引出的示意圖。
圖2 下載接口引出示意圖Fig.2 Schematic diagram of download interface lead
針對多模塊下裝的問題,初步提出了3個方案。方案一為多個下載器對多個芯片進(jìn)行下載,方案二為下載完成后由下位機自動切換下載接口,方案三為JTAG鏈?zhǔn)脚渲肹3]。如圖3所示(實際模塊內(nèi)部有兩個相同芯片,示意圖僅展示一個芯片的情況,下同)。
圖3 批量下裝方案Fig.3 Batch downloading plan
1)多個下載器
準(zhǔn)備多個下載器,將下載器一個個與芯片連接進(jìn)行下裝,此方案最原始也最簡潔。但必須使用專用的下載器與下載軟件,且下載器價格不菲,在幾百到幾千不等,單純地增加下載器需要增加不少成本。僅5張模塊就需要10個下載器,如此多的下載器纏在一起,線路上容易混雜,出現(xiàn)問題時需要逐個進(jìn)行排查,軟件操作上也會變得復(fù)雜,可能會出現(xiàn)部分模塊軟件更新遺漏。
2)切換下載口
同一時間只能對一個芯片進(jìn)行下裝,下裝成功后切換到下一個芯片繼續(xù)下載,中途無插拔模塊的等待時間。此方案不能直接提升太多的效率,需要單獨開發(fā)專用的下位機軟、硬件與上位機軟件進(jìn)行支持。但因為不用手動干預(yù),中途可以騰出時間做標(biāo)識整理等其他相關(guān)工作,也可一人操作多臺設(shè)備來提升效率。此方案的缺點為有下載口切換失敗的風(fēng)險,開發(fā)工裝時需要做好切換成功確認(rèn)的反饋機制,保證下裝的穩(wěn)定性。
3)JTAG鏈?zhǔn)脚渲?/p>
現(xiàn)大多數(shù)芯片均支持JTAG接口下裝軟件,可將芯片的JTAG以菊花鏈的形式連接起來拓展,只需通過一個接口便可以對所有的芯片進(jìn)行軟件下裝,下裝時接線數(shù)量少,簡潔美觀。雖然串聯(lián)會不穩(wěn)定,但下裝失敗即所有模塊下裝失敗,省去了逐一進(jìn)行下裝結(jié)果確認(rèn)的步驟,反而有利于下裝結(jié)果的判斷。它的缺點是JTAG鏈必須保持完整,且JTAG鏈不能無限擴展。
經(jīng)過綜合比對,決定嘗試最為簡單高效、開發(fā)難度低的JTAG鏈?zhǔn)脚渲梅桨?。選用此方案需要對JTAG鏈可擴展數(shù)量進(jìn)行確認(rèn),并且需要在模塊數(shù)量發(fā)生變化時同樣保持JTAG鏈路的完整性。
以安全級DCS平臺某模塊為例,每個模塊內(nèi)有兩個EPM2210芯片,嘗試以5張模塊共10個芯片進(jìn)行菊花鏈串聯(lián)。經(jīng)過測試后,5張模塊可以穩(wěn)定進(jìn)行軟件下裝,基本能滿足軟件下裝效率提升的要求。對于JTAG鏈完整問題可采用手動切換的方式,因為生產(chǎn)環(huán)節(jié)一般為批量下裝,模塊數(shù)量基本都會大于5張,所以切換頻率不高,對軟件下裝影響不大。如果需要集成自動化,可以考慮換成模擬開關(guān)切換,需要注意的是選擇模擬開關(guān)時要關(guān)注開關(guān)內(nèi)阻,內(nèi)阻過大會影響信號傳輸。
批量下裝方案主要包括硬件與軟件兩部分。硬件上只需要將下載接口按線序連接好即可,需要做的設(shè)計較少;軟件上需要做一個界面進(jìn)行簡單配置,不直接使用原生燒錄軟件進(jìn)行操作,避免了復(fù)雜的操作,保證下裝操作的正確性。
3.2.1 硬件設(shè)計
JTAG(Joint Test Action Group,聯(lián)合測試行動組)是一種國際標(biāo)準(zhǔn)測試協(xié)議(IEEE 1149.1兼容)。標(biāo)準(zhǔn)的JTAG接口是4線——TMS、TCK、TDI、TDO,分別為模式選擇、時鐘、數(shù)據(jù)輸入和數(shù)據(jù)輸出線。在使用時,將TMS、TCK并聯(lián)連接接口,TDI、TDO是串行數(shù)據(jù)接口,下載時將所有芯片的TDI、TDO串聯(lián)起來即可完成菊花鏈的配置。
由于JTAG鏈必須保持完整,所以將10個芯片進(jìn)行串聯(lián)連接后,每次下裝至少需要5張模塊,否則鏈路不完整,無法下裝。根據(jù)生產(chǎn)實際情況,一般生產(chǎn)過程為批量軟件下裝,一般工單數(shù)量都會大于5張,所以切換頻率并不高,因此直接采用多檔位的旋鈕開關(guān)方便手動切換,模塊數(shù)量變化時通過旋鈕即可輕松切換,不用重新進(jìn)行接線。連接示意圖如圖4所示,根據(jù)模塊數(shù)量(x)的變化,將S觸點與Dx連接,即可使JTAG鏈路完整。
圖4 下載接口引出示意圖Fig.4 Schematic diagram of download interface lead
3.2.2 軟件設(shè)計
1)TCL腳本
如果直接使用原生燒錄軟件進(jìn)行下裝操作,每次都需要根據(jù)芯片數(shù)量重新配置下載文件,存在操作失誤的隱患。EPM2210芯片下載使用的軟件為QuartusⅡ[4],該軟件支持TCL(Tool Command Language)控制[5],因此可以使用腳本對QuartusⅡ進(jìn)行操作,從而實現(xiàn)軟件下裝工作。
TCL是一種非常簡單易學(xué)的語言,能夠快速上手,幾乎能在所有的環(huán)境下運行,通用性好,因此用來編寫一些短小的腳本語言非常適用。
QuartusⅡ一段關(guān)于下裝的指令如下:
quartus_pgm.exe -c USB-Blaster[0]-m JTAG -o"PV;%1%"。
各指令的含義為:
-c<jtagserver cable number>:選擇下載器編號。
-m<programming mode>:下載模式。
-o<programming operation> :下載操作。
"PV;%1%":選擇文件必須選一個參數(shù);P<Program>:下載;V<Verify>:校驗;%1為命令行的傳遞參數(shù),最多支持0~9,共10個參數(shù)的輸入,此處需要輸入下裝文件路徑。如果需要在JTAG模式下進(jìn)行多張模塊下裝,只需要將-o "PV;%1%"指令進(jìn)行復(fù)制粘貼即可。
將指令編輯好后,存為擴展名“.BAT”的腳本文件即可直接運行,但實際使用時會根據(jù)下裝文件的更改,腳本也需要隨之修改。直接修改腳本命令存在改錯命令等情況,操作不方便。因此,還需要開發(fā)一個可視化界面,固定不變的指令存入腳本,需要配置的信息由可視化界面完成,并下發(fā)給腳本。
2)可視化界面
界面設(shè)計采用QT,QT擁有友好豐富的界面庫,用戶可以從工具欄直接拖拽界面元素直接使用,而不用通過代碼去實現(xiàn),節(jié)省了大量的開發(fā)時間,可以快速開發(fā)軟件。
界面軟件向腳本傳遞參數(shù)部分代碼如下所示:
QProcess*m_process;
QStringstr=QDir::currentPath()+"/Down/Script";//腳本路徑
m_process->setWorkingDirectory(str);
QStringcommand=QString("%1/Altera%2.bat %3")
.arg(str)
.arg(i)
.arg(U_File);
if(m_process)
{
m_process->start(command);
m_process->waitForFinished(TIMEOUT);
}
這里根據(jù)下載芯片數(shù)量不同,分別保存為“Altera1~Altera5”的腳本,上位機根據(jù)下載數(shù)量i選擇不同的腳本進(jìn)行調(diào)用,然后將下載文件“U_File”傳入腳本進(jìn)行下載。完成后的操作界面如圖5所示。
圖5 下裝操作界面Fig.5 Download operation interface
經(jīng)過軟件優(yōu)化,簡化了操作,可以有效避免軟件下裝過程中過多操作帶來的人因失誤,同時在一定程度上提高軟件下裝的效率。工裝搭建完成后,經(jīng)過一段時間的試用,驗證了其下裝功能的穩(wěn)定性,在使用中明顯提高了效率。改進(jìn)后以5張批量下裝,統(tǒng)計對比5張模塊所用時間見表2。
由表2可見,經(jīng)過改進(jìn),模塊的軟件下裝效率得到了顯著提升。模塊不再進(jìn)行拆裝,不光節(jié)省了大量的時間,還減少了拆裝過程對模塊的損失,提升了模塊軟件升級過程中的產(chǎn)品質(zhì)量。
表2 改進(jìn)前后下裝對照Table 2 Comparison of download before and after improvement
安全級DCS出于對安全問題等因素的考慮,其技術(shù)會有一定的局限性,有時會為了穩(wěn)定性舍棄一定的便利性。因此,基于現(xiàn)有的平臺技術(shù)特點,尋求簡單可行的方案,低成本、高效地開發(fā)過渡性工裝以解決安全級DCS模塊軟件下裝效率低、風(fēng)險大的問題,對安全級DCS產(chǎn)品生產(chǎn)效率提升與質(zhì)量保證有著積極的意義。因為平臺模塊型號眾多,各自使用的芯片不盡相同,軟件下裝方式也不完全相同,現(xiàn)只針對其中一種數(shù)量最大的模塊進(jìn)行試驗,在適用穩(wěn)定后,還會逐步探索,實現(xiàn)對所有模塊軟件的批量化下裝。