呂 滔,鄧玉嬌,陳蘭英,蔣 陽
(中國核動力研究設計院 核反應堆系統設計技術重點實驗室,成都 610213)
安全級DCS軟件分為固件及工程組態兩部分。固件是寫入EROM或EEPROM中的程序,是一個系統最基礎、最底層工作的軟件,應用軟件要在固件的基礎上運行。本文提到的模塊軟件下裝工作僅針對固件,也可稱為嵌入式軟件。安全級DCS模塊軟件開發與普通軟件有所不同,如GB 12172《核電廠安全級系統計算機軟件》中,通過控制和降低軟件復雜度,確保軟件運行行為的確定性[1]。因此,即使當前已有很多關于固件更新的方案[2],均需要經過充分的驗證后,才能用于安全級DCS。安全級DCS平臺目前還處于傳統的直接將下載線插入JTAG插座進行軟件下裝的方式,基于現有模式,探索一種簡單高效的方式,提升模塊軟件的下裝效率,保證產品質量。

表1 芯片下裝方式Table 1 Chip download method
嵌入式芯片的軟件下裝方式分為ICP(In Circuit Programing)在電路編程、ISP(In System Programing)在系統編程、IAP(In Applicating Programing)在應用編程3種。ICP為板級電路下裝,不需要通信協議,可通過電路直接將軟件灌入芯片中;ISP方式需要在芯片內部預先燒錄可執行Bootloader程序,這是利用系統級的通信將軟件傳輸到芯片,相對于ICP更方便,但第一次下載會比較復雜;IAP是在ISP的基礎上進一步優化,芯片內有可執行的應用程序。因此,在支持網絡通信的情況下,可以通過網絡獲取軟件,進行在線升級。
這3種下裝方式方便程度不同,但均區別于傳統的預先燒錄程序再裝上電路板的方式,可以在芯片焊接到電路板以后再進行靈活的編程調試。本文不再就這3種方式的具體細節進行展開,僅對它們的特點進行簡單的對比。
IAP方式可支持遠程在線更新,因其使用方便,目前在商業領域已廣泛應用。如手機的固件更新,不需要廠家額外提供任何硬件支持,只需要手機在有網絡的環境下進行固件下載更新即可。但安全級DCS的所有軟件均為自主開發,受開發周期等因素制約,目前仍使用第1種以實現最簡單的ICP方式,即通過專用下載器連接板上下載口進行下裝。
在ICP的下載模式下,每次更新程序時需要將模塊外殼拆開,連接板上的JTAG插座進行軟件下裝。基于現有安全級DCS平臺,其內部不止一個芯片,下載完一個芯片后還需要切換下載口再進行一次下裝,以安全級DCS某模塊為例,軟件下裝具體流程如圖1所示。

圖1 模塊軟件下裝流程圖Fig.1 Flow chart of module software download
從圖1可以看出,用這種方式進行下裝,每次更新程序都需要將模塊拆開,再挨個逐一按程序進行下裝,這樣手動操作復雜,效率低下。
從實踐中發現,軟件下裝的很多操作都是簡單重復的動作,如果可以實現自動化、批量化操作,可以大量節省時間。但下載口插拔、切換、外殼拆裝都受到下載接口在模塊內部的因素制約,因此下載接口引出是實現批量化下裝的關鍵,可以避免模塊外殼拆裝、下載線插拔等非必要的操作。
DCS系統采用模塊化的設計,從前面插入功能模塊,后面引出信號,模塊故障時只需將模塊拔出更換即可,不用重新接線。基于此特點,模塊的下載口可以通過后面引出,每次進行軟件下載時,不用再進行下載線的插拔動作,這種方式可以避免拆殼與下載線的插拔,節省大量時間,提升下裝穩定性。圖2為下載口引出的示意圖。

圖2 下載接口引出示意圖Fig.2 Schematic diagram of download interface lead
針對多模塊下裝的問題,初步提出了3個方案。方案一為多個下載器對多個芯片進行下載,方案二為下載完成后由下位機自動切換下載接口,方案三為JTAG鏈式配置[3]。如圖3所示(實際模塊內部有兩個相同芯片,示意圖僅展示一個芯片的情況,下同)。

圖3 批量下裝方案Fig.3 Batch downloading plan
1)多個下載器
準備多個下載器,將下載器一個個與芯片連接進行下裝,此方案最原始也最簡潔。但必須使用專用的下載器與下載軟件,且下載器價格不菲,在幾百到幾千不等,單純地增加下載器需要增加不少成本。僅5張模塊就需要10個下載器,如此多的下載器纏在一起,線路上容易混雜,出現問題時需要逐個進行排查,軟件操作上也會變得復雜,可能會出現部分模塊軟件更新遺漏。
2)切換下載口
同一時間只能對一個芯片進行下裝,下裝成功后切換到下一個芯片繼續下載,中途無插拔模塊的等待時間。此方案不能直接提升太多的效率,需要單獨開發專用的下位機軟、硬件與上位機軟件進行支持。但因為不用手動干預,中途可以騰出時間做標識整理等其他相關工作,也可一人操作多臺設備來提升效率。此方案的缺點為有下載口切換失敗的風險,開發工裝時需要做好切換成功確認的反饋機制,保證下裝的穩定性。
3)JTAG鏈式配置
現大多數芯片均支持JTAG接口下裝軟件,可將芯片的JTAG以菊花鏈的形式連接起來拓展,只需通過一個接口便可以對所有的芯片進行軟件下裝,下裝時接線數量少,簡潔美觀。雖然串聯會不穩定,但下裝失敗即所有模塊下裝失敗,省去了逐一進行下裝結果確認的步驟,反而有利于下裝結果的判斷。它的缺點是JTAG鏈必須保持完整,且JTAG鏈不能無限擴展。
經過綜合比對,決定嘗試最為簡單高效、開發難度低的JTAG鏈式配置方案。選用此方案需要對JTAG鏈可擴展數量進行確認,并且需要在模塊數量發生變化時同樣保持JTAG鏈路的完整性。
以安全級DCS平臺某模塊為例,每個模塊內有兩個EPM2210芯片,嘗試以5張模塊共10個芯片進行菊花鏈串聯。經過測試后,5張模塊可以穩定進行軟件下裝,基本能滿足軟件下裝效率提升的要求。對于JTAG鏈完整問題可采用手動切換的方式,因為生產環節一般為批量下裝,模塊數量基本都會大于5張,所以切換頻率不高,對軟件下裝影響不大。如果需要集成自動化,可以考慮換成模擬開關切換,需要注意的是選擇模擬開關時要關注開關內阻,內阻過大會影響信號傳輸。
批量下裝方案主要包括硬件與軟件兩部分。硬件上只需要將下載接口按線序連接好即可,需要做的設計較少;軟件上需要做一個界面進行簡單配置,不直接使用原生燒錄軟件進行操作,避免了復雜的操作,保證下裝操作的正確性。
3.2.1 硬件設計
JTAG(Joint Test Action Group,聯合測試行動組)是一種國際標準測試協議(IEEE 1149.1兼容)。標準的JTAG接口是4線——TMS、TCK、TDI、TDO,分別為模式選擇、時鐘、數據輸入和數據輸出線。在使用時,將TMS、TCK并聯連接接口,TDI、TDO是串行數據接口,下載時將所有芯片的TDI、TDO串聯起來即可完成菊花鏈的配置。
由于JTAG鏈必須保持完整,所以將10個芯片進行串聯連接后,每次下裝至少需要5張模塊,否則鏈路不完整,無法下裝。根據生產實際情況,一般生產過程為批量軟件下裝,一般工單數量都會大于5張,所以切換頻率并不高,因此直接采用多檔位的旋鈕開關方便手動切換,模塊數量變化時通過旋鈕即可輕松切換,不用重新進行接線。連接示意圖如圖4所示,根據模塊數量(x)的變化,將S觸點與Dx連接,即可使JTAG鏈路完整。

圖4 下載接口引出示意圖Fig.4 Schematic diagram of download interface lead
3.2.2 軟件設計
1)TCL腳本
如果直接使用原生燒錄軟件進行下裝操作,每次都需要根據芯片數量重新配置下載文件,存在操作失誤的隱患。EPM2210芯片下載使用的軟件為QuartusⅡ[4],該軟件支持TCL(Tool Command Language)控制[5],因此可以使用腳本對QuartusⅡ進行操作,從而實現軟件下裝工作。
TCL是一種非常簡單易學的語言,能夠快速上手,幾乎能在所有的環境下運行,通用性好,因此用來編寫一些短小的腳本語言非常適用。
QuartusⅡ一段關于下裝的指令如下:
quartus_pgm.exe -c USB-Blaster[0]-m JTAG -o"PV;%1%"。
各指令的含義為:
-c<jtagserver cable number>:選擇下載器編號。
-m<programming mode>:下載模式。
-o<programming operation> :下載操作。
"PV;%1%":選擇文件必須選一個參數;P<Program>:下載;V<Verify>:校驗;%1為命令行的傳遞參數,最多支持0~9,共10個參數的輸入,此處需要輸入下裝文件路徑。如果需要在JTAG模式下進行多張模塊下裝,只需要將-o "PV;%1%"指令進行復制粘貼即可。
將指令編輯好后,存為擴展名“.BAT”的腳本文件即可直接運行,但實際使用時會根據下裝文件的更改,腳本也需要隨之修改。直接修改腳本命令存在改錯命令等情況,操作不方便。因此,還需要開發一個可視化界面,固定不變的指令存入腳本,需要配置的信息由可視化界面完成,并下發給腳本。
2)可視化界面
界面設計采用QT,QT擁有友好豐富的界面庫,用戶可以從工具欄直接拖拽界面元素直接使用,而不用通過代碼去實現,節省了大量的開發時間,可以快速開發軟件。
界面軟件向腳本傳遞參數部分代碼如下所示:
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);
}
這里根據下載芯片數量不同,分別保存為“Altera1~Altera5”的腳本,上位機根據下載數量i選擇不同的腳本進行調用,然后將下載文件“U_File”傳入腳本進行下載。完成后的操作界面如圖5所示。

圖5 下裝操作界面Fig.5 Download operation interface
經過軟件優化,簡化了操作,可以有效避免軟件下裝過程中過多操作帶來的人因失誤,同時在一定程度上提高軟件下裝的效率。工裝搭建完成后,經過一段時間的試用,驗證了其下裝功能的穩定性,在使用中明顯提高了效率。改進后以5張批量下裝,統計對比5張模塊所用時間見表2。
由表2可見,經過改進,模塊的軟件下裝效率得到了顯著提升。模塊不再進行拆裝,不光節省了大量的時間,還減少了拆裝過程對模塊的損失,提升了模塊軟件升級過程中的產品質量。

表2 改進前后下裝對照Table 2 Comparison of download before and after improvement
安全級DCS出于對安全問題等因素的考慮,其技術會有一定的局限性,有時會為了穩定性舍棄一定的便利性。因此,基于現有的平臺技術特點,尋求簡單可行的方案,低成本、高效地開發過渡性工裝以解決安全級DCS模塊軟件下裝效率低、風險大的問題,對安全級DCS產品生產效率提升與質量保證有著積極的意義。因為平臺模塊型號眾多,各自使用的芯片不盡相同,軟件下裝方式也不完全相同,現只針對其中一種數量最大的模塊進行試驗,在適用穩定后,還會逐步探索,實現對所有模塊軟件的批量化下裝。