引 言
面對我國航天型號任務發(fā)展與需求的快速變化,空間站、深空探測、北斗導航等軟件密集型系統(tǒng)迅速擴大,智能化、網絡化需求越來越多。由于系統(tǒng)復雜度提高,設計難度變大、周期變長、文檔復雜度提高,代碼規(guī)模的快速膨脹給設計和驗證都帶來了巨大的挑戰(zhàn)。通常意義的軟件又可以分為應用軟件、嵌入式軟件和可編程邏輯代碼,現場可編程門陣列(FPGA)即是可編程邏輯代碼的載體,FPGA因其設計周期短、并行處理能力強、穩(wěn)定性好等優(yōu)勢,在系統(tǒng)中承擔了越來越多的控制、算法、處理任務,相應的硬件描述語言HDL代碼量也成倍甚至指數級增長。使用編程語言直接建模存在代碼冗長和在不同設計階段重新利用模型時很難更改的問題,在團隊間用于交流的需求、技術規(guī)范、測試等其他文檔也可能引起歧義和誤解。
基于高層次抽象的建模和可綜合的邏輯代碼自動生成技術成為被重點關注和研究的領域?;谀P偷脑O計方法從設計階段進行系統(tǒng)建模,自頂而下展開設計,開發(fā)過程中迭代驗證并通過工具實現代碼自動生成,國外相關領域在上個世紀八十年代開始相關研究,相應的陸續(xù)有成熟的應用案例產生,涉及到航天、汽車、通信、醫(yī)療、大數據等各個領域,國內在近十年也開始開展基于模型的設計方法的理論研究和工程實踐,但目前較多的成熟應用都是基于模型設計后自動生成C代碼等嵌入式軟件方面,由于現場可編程門陣列的特殊性,導致對自動代碼生成有可綜合性的要求,因此在自動生成HDL代碼方面的應用還很有限。本文分析了國內外近幾年基于模型的設計及HDL代碼自動生成技術使用到的工具及工程應用情況,在調研了大量的理論、應用案例的基礎上,總結了基于模型的設計自動生成的HDL代碼和傳統(tǒng)手動編寫HDL代碼的效率、優(yōu)勢,比較了較成熟的工具和方法,闡述了HDL代碼自動生成的應用需求和現狀,為航天型號系統(tǒng)開發(fā)設計人員開展相關工作提供參考。
01、基于模型設計的HDL代碼自動生成技術應用需求
近年來,現場可編程門陣列(FPGA)被廣泛應用于航空航天、汽車、通信、工業(yè)自動化、電機控制、醫(yī)學成像等嵌入式應用領域。傳統(tǒng)的FPGA上的數字設計實現依賴于硬件描述語言(VHDL和Verilog),并使用相應的工具生成FPGA目標代碼。這種方法仍然是當今各行業(yè)應用中使用最廣泛的方法。然而隨著半導體技術的進步和系統(tǒng)復雜性的不斷增加,代碼規(guī)模指數級增長,給開發(fā)和驗證工作都帶來了巨大的挑戰(zhàn),基于模型的系統(tǒng)級設計方法成為更理想的選擇。
傳統(tǒng)的FPGA軟件開發(fā)方法為算法工程師編寫算法文檔,程序員根據算法文檔手寫代碼,代碼完成之后下載到硬件中驗證算法、軟件是否正確,根據相關文獻報道,有60%的錯誤是在編制技術規(guī)范階段引入的,而這時能夠發(fā)現的錯誤僅有8%,大部分的錯誤需要到測試階段才能發(fā)現。系統(tǒng)設計過程中分為若干個階段,每個階段都會有對應的工程師,每個工程師在開發(fā)過程中會針對性地解決某幾個關鍵的技術問題,當前系統(tǒng)的開發(fā)主要有以下幾個方面的問題主要存在以下幾方面問題:
1) 開發(fā)的盲目性:對系統(tǒng)實現細節(jié)缺乏把握的情況下已經完成的硬件電路的設計,此階段無法明確先前的設計能否滿足實際應用需求,而此時已經投入了較大的硬件成本。
2) 不同開發(fā)環(huán)節(jié)對文檔的描述和理解的偏差問題:在設計開發(fā)過程中會涉及到大量用文字描述的文檔。文字本身就是人對于一種事物,一個概念的抽象,難免不同工程師對于文字的理解出現差錯,造成工程師之間產生分歧,從而導致整個系統(tǒng)的功能與實際目標功能出現偏差。
3) 手工編程會產生代碼不可靠的問題:在設計后期集中測試過程中一旦測出問題,就很難排查是方案不理想還是軟件代碼編寫的錯誤。手工編程費時費力,調試周期較長,開發(fā)風險很高;即使軟件編程不存在問題,如果想要在后期修改方案,則又要開始新的一輪改進工作將耗費時間在軟件的手工修改和調試上。
4) 設計缺陷發(fā)現過晚而產生重大損失的問題:設計過程中的缺陷發(fā)現得越早,則修正的難度越低,花費的成本越少。比如汽車的設計缺陷有可能給公司帶來幾億甚至與上百億美元的損失,而在汽車投放市場之前即可修正各種缺陷,那么可以將損失降低到最小。
5) 真實樣件測試的高成本和低效率:成功開發(fā)一個產品必然要經過大量的測試和實驗,需要大量的實驗臺架,而這些工作必然會花費大量的人力和金錢。產品中存在錯誤和缺陷往往是測試的不充分,因為有些情況在系統(tǒng)的實際工作中沒有出現,出現了就是災難性的,要在實驗室條件下完成這些極端條件的測試,使得實驗測試費用異常的昂貴,甚至于高達上億美元。
為了很好的解決上述開發(fā)過程中遇到的問題,先進完善的開發(fā)流程起到了關鍵的作用。國外的控制系統(tǒng)開發(fā)的主流模式已由上世紀六七十年代的“瀑布式”開發(fā)流程過渡到了自上世紀八十年代才開始的“基于模型”的開發(fā)流程,且在各個行業(yè)推廣開來。本世紀初,應用實施仿真系統(tǒng)運行大規(guī)模系統(tǒng)模型的開發(fā)測試模式開始普及,而國內的“基于模型”的開發(fā)模式和實施仿真技術同時自本世紀初開始起步,經過了十余年的推廣,也被廣大的企業(yè)和科研院所接受[9]。基于模型的設計通過早期驗證,消除了在測試中發(fā)現的問題并回歸修正,在開發(fā)的過程中進行持續(xù)驗證,降低了最后系統(tǒng)集成后再進行測試的復雜性。當模型發(fā)生變化時,可以通過模型比對進行分析,提升了對需求變更的適應性,同時使變更點易于比對,降低了設計遺漏的可能性。
02、基于模型的設計
基于模型的設計流程,亦稱為“V”模式,依托計算機輔助控制系統(tǒng)設計(CACSD:
Computer-Aided Control System Design),將計算機支持工具貫穿于控制系統(tǒng)開發(fā)測試的全過程。該流程以模型為核心,流程中每一個步驟的開展都依賴于模型,其中“V”代表著“Verification”(驗證)和“Validation”(確認)。這樣一套完整的系統(tǒng)開發(fā)流程,一般包含幾個步驟:
圖2-1 V流程設計步驟
從整個基于模型的現代控制系統(tǒng)設計開發(fā)流程看,主要有兩大特點:
第一,以系統(tǒng)數學模型為核心,充分發(fā)揮仿真技術的優(yōu)勢。該流程可以分為離線仿真 → 快速原型 → 代碼生成 → 半實物測試 → 標定,每一個步驟都依賴于系統(tǒng)模型。由于采用了仿真技術,控制器在實物測試之前所有的開發(fā)測試工作均可在虛擬環(huán)境下進行,在實驗室條件下完成關鍵的開發(fā)測試工作。
第二,設計和確認至始至終貫穿于整個開發(fā)流程。該流程的每一個步驟中,開發(fā)和測試是并重的。每一個步驟中的開發(fā)成果只有經過完整可靠的測試才能進入下一步,將各種錯誤缺陷盡可能多的在早期發(fā)現,避免帶入后期的開發(fā)環(huán)節(jié)。
其基本思想是讓具體開發(fā)工作從編程轉移到高級別的模型抽象中去,模型本身就是一個可執(zhí)行的規(guī)格書,開發(fā)人員修改優(yōu)化模型就是對設計的修改完善,同時可以開展設計驗證,無須到編碼實現之后再通過測試進行系統(tǒng)驗證。由于具有圖形化設計、早期驗證、代碼自動生成、文檔自動化等優(yōu)勢,成為解決FPGA代碼規(guī)??焖倥蛎泦栴}的手段。利用開發(fā)驗證一體化套件及兼容的第三方工具能夠完成基于模型的產品開發(fā)流程,包括建立基于需求的系統(tǒng)模型,并通過仿真驗證和系統(tǒng)的設計,然后自動將模型生成代碼,進行代碼測試和軟硬件集成后的系統(tǒng)級測試和驗證。
03、HDL代碼自動生成
通過對基于模型設計方法的分析,可以看到該方法中的重要一環(huán)就是將模型直接轉換為可執(zhí)行代碼,把高級抽象語言描述的系統(tǒng)轉換為可綜合的邏輯代碼是近年來被廣泛研究的一個領域,目前有很多工具能夠將C/C++和Matlab描述的模型或代碼轉換為VHDL和Verilog代碼,工程師們可以很容易的通過這些工具從更高抽象層次的系統(tǒng)層面進行模型的設計和仿真,并生成代碼。通過工具對模型的翻譯自動生成代碼有效的減少了人為引入的理解誤差及錯誤實現的可能性,同時自動化的驗證和確認使測試工程師能夠開發(fā)完整的、基于需求并可在自動產生的代碼上重用的測試用例。產品的代碼生成和驗證過程留給工具軟件自動完成,可以大大縮短開發(fā)周期和成本,降低開發(fā)難度,并且軟件的一致性好,軟硬件整合簡單,可靠性高。
目前市場上,建模工具和代碼生成工具都很多,但能夠提供一體化建模、仿真和代碼生成解決方案的很少,能夠生成FPGA可用的可綜合邏輯代碼的更少[6]。目前,HDL代碼自動生成,常用的工具包括Catapult CSPARK、ROCCC and DWARV(C to VHDL)、Xilinx為MATLAB定制的System Generator、AccelDSP 等。這些方法非常受系統(tǒng)工程師的青睞,因為他們不必深入實際的硬件描述細節(jié),可以從高級規(guī)范開始構建系統(tǒng),把關注點更多的投入到系統(tǒng)設計上。
3.1 基于Matlab/Simulink的HDL代碼自動生成
二十一世紀以來隨著應用的不斷深入,高速復雜控制系統(tǒng)開發(fā)的需求日益增大,因此FPGA和“模型”的聯系越來越緊密。本世紀初Matlab便已應用于控制器的開發(fā),利用模型的離線仿真來保證控制算法在設計初期就有較好的正確性[10]。之后Matlab工具軟件對FPGA的支持力度日益增強,Mathworks和各大FPGA生產商合作推出了直接利用模型生成FPGA代碼的System Generator(支持Xilinx公司FPGA)和DSP Builder(支持Ahera 公司 FPGA)等工具包很大程度上推進了FPGA在基于模型的設計流程中的使用率。從 2007年的Matlab2007a開始,Mathwork 提供了一個 Simulink 工具HDL Coder,可以實現從Simulink 模型生成可綜合的HDL代碼,并提供從模型到具體變量的追蹤,實現代碼控制,HDL Coder技術使FPGA和Matlab的配合使用更加廣泛 ,相對于前面兩種工具包,它擺脫了FPGA制造廠商的束縛,使軟硬件接口更加通用化。
Matlab/Simulink基于模型設計的工具流程系統(tǒng)框圖如圖3-1所示。
圖3-1 Matlab/Simulink基于模型的設計流程圖
Simulink是建立在Matlab之上的系統(tǒng)級建模仿真基本環(huán)境,是一個圖形化的建模工具,從某種意義上講,凡是能夠用數學方式描述的系統(tǒng),都可以用Simulink建模,容易搭建的包括:通信系統(tǒng)物理層和數據鏈路層,控制系統(tǒng),數字信號處理系統(tǒng),動力學系統(tǒng)。Real-Time Workshop(RTW)是基于Simulink的目標代碼生成工具。HDL Verifier是用于驗證的工具套件,提供的驗證功能主要關注在模型仿真與生成HDL代碼的仿真結果一致性比對。在MATLAB開發(fā)環(huán)境中,要自動生成面向FPGA的目標代碼,需要使用simulink搭建算法或者系統(tǒng)的模型,然后通過RTW或者RTW提供給第三方代碼自動生成工具(如HDL Coder、Xilinx System Generator、Altera DSP Builder等)的開放接口。
3.2 基于UML/MARTE模型的VHDL代碼生成方法
近年來,模型驅動設計和統(tǒng)一建模語言(UML :Unified Modeling Language)作為一種與平臺無關的建模方法,在電子系統(tǒng)設計中得到了廣泛的關注?,F存的幾種UML配置文件在UML級別建模硬件組件,并自動生成代碼。其中實時和嵌入式系統(tǒng)的建模和分析[15](MARTE:Modeling and Analysis of Real-time and Embedded Systems),在UML圖中使用了時序的屬性。在實時嵌入式系統(tǒng)建模中最常用的UML圖之一是序列圖。序列圖表示應用程序功能、不同組件之間的交互,并允許指定“時間不變量”。圖3-2中為基于UML/MARTE建模、驗證和代碼生成流程。起點是UML/MARTE序列圖,它描述了系統(tǒng)的行為(在組件之間的數據交換)和時序約束。從這個描述中,生成了SystemC/TLM和VHDL模型,包含檢查約束的斷言調用。因為序列圖指定實體之間的數據交換,但不指定實體內部的處理代碼;因此,生成的代碼要用于仿真還需要鏈接到可用的知識產權(IP)核心庫。仿真輸入一組合適的測試臺,并生成一個約束報告。驗證過程產生的結果,一方面,將仿真中獲得的新的信息反饋,用于細化UML模型及其約束。另一方面,將生成的VHDL代碼合成為硬件組件(如FPGA),從而獲得UML應用的實際實現。GenERTiCA工具支持從UML模型自動生成VHDL代碼[6]。
圖3-2 基于UML/MARTE建模、驗證和代碼生成流程
3.3 基于Web的VHDL代碼自動生成工具DiaHDL[5]
DiaHDL是一款基于Web的VHDL代碼自動生成工具,旨在尋找一種快速的直接方法,基于Web將可視化設計轉換為可綜合的VHDL代碼,設計實現了特殊圖形用戶界面(GUI),允許用戶選擇數字組建、定制參數并生成VHDL代碼,基于GUI的庫包含基本數字器件,基本的門電路,也包括復雜的FIR濾波器和DCT,同時支持用戶自定義的復雜電路系統(tǒng)。軟件通過JAVA腳本提取VHDL代碼參數。成功的案例包括圖像的JPEG編碼器等,完成從組件到比特文件的完整設計流程。圖3-3是工具的用戶界面截圖。
圖3-3 DiaHDL用戶界面
04、基于Matlab/Simulink的建模和HDL代碼自動生成應用現狀
Matlab/Simulink是目前在對全流程支持最完整的一套工具,能夠提供高性能動態(tài)系統(tǒng)的仿真、分析和測試,并能夠完成從模型到代碼的轉換。通過圖形界面和基于語言的方法,使系統(tǒng)設計變得靈活易懂,易于開發(fā)和測試人員設計和調試,在國內也有大量的技術支持并提供解決方案,因此本章節(jié)重點介紹基于Matlab/Simulink的建模和HDL代碼自動生成應用技術。目前,基于Matlab/Simulink的模型驅動開發(fā)和HDL代碼生成技術已成功應用于航天、航空、航海、醫(yī)療、電力、紅外成像、固態(tài)存儲、機器人控制等眾多領域,具體應用包括無線數字收發(fā)器、音視頻處理、編解碼器、雷達信號處理、閃存控制器等,從原型設計到代碼實現平均開發(fā)時間縮短50%,典型的成功應用情況如下:
1) Reutech 雷達系統(tǒng)公司采用基于模型的設計流程,開發(fā)艦載??账阉骼走_核心信號處理子系統(tǒng),完成系統(tǒng)級的仿真,自動生成75,000多行HDL代碼,節(jié)省了兩個工程師人年,該雷達系統(tǒng)最后完成了探索性的海上試驗。
2)美國的紅外熱成像技術領導企業(yè)FLIR在紅外攝像機的熱成像算法中應用了模型驅動開發(fā)的方法,從概念到現場可測試原型的時間減少了60%,重大算法更改從重新部署到代碼實現,由幾周縮短為幾小時,HDL代碼重用從零增加到30%。
3) Semtech通過基于模型的設計生成VHDL代碼,加快了無線RF設備優(yōu)化的數字接收器鏈的開發(fā),驗證時間從數周縮短為幾天,并且最終交付的代碼性能更佳。
4)日本半導體生產商Siglead使用HDL Coder從定點Simulink模型生成VHDL代碼,并將其部署在Xilinx Spartan-6FPGA上,開發(fā)時間由4個月變?yōu)?個月,縮短了75%,設計迭代修改從三天變?yōu)槿齻€多小時,設計人員能夠把更多的時間花在富有成效的算法開發(fā)和探索優(yōu)化設計上。
5)為了幫助心臟病學家檢測脂質核心斑塊LCP(患有LCP更容易罹患冠心病),紅外線公司開發(fā)了TVC成像系統(tǒng)。美國的Infraredx使用Matlab/Simulink和HDL編碼器加速TVC成像系統(tǒng)中IVUS信號和圖像處理算法的開發(fā)和FPGA實現,自動生成的代碼與手寫的代碼使用了相同數量的乘法器,同時使用的邏輯減少了9%,使用的內存減少了3%。
6) Philips Healthcare的工程師使用Simulink來建模由數字RF接收機、比較器、RF波形發(fā)生器和放大器組成的架構。引入基于模型的設計方案后,使設計問題能夠早發(fā)現早解決,由于HDL Coder生成代碼具有很好的規(guī)范性,使代碼生成相對于手工編寫代碼的不一致性風險降低。
7)Renesas半導體的工程師為圖像處理算法開發(fā)和實施采用了基于模型的設計,探索了多個設計優(yōu)化和替代方案并生成了高效的HDL代碼,該公司的工程師稱:“在進行優(yōu)化后,自動生成的代碼與我們最好的手工編寫代碼相比,基本上具有相同的區(qū)域和速度特性。由 HDL Coder生成的HDL代碼與手工編寫的同等HDL代碼相比,在120 MHz和275 MHz目標時鐘頻率上使用的資源稍微少一些。并且,通過使用Simulink和HDL Coder,早前沒有硬件經驗的工程師在大概六個月內學會了RTL設計?!?
05、結論與展望
基于模型設計的HDL代碼生成技術目前還有很多有待研究和解決的技術問題,包括模型的建立、與系統(tǒng)代碼的融合、模型和自動生成代碼的驗證等等,雖然目前相關的方法和工具很多,比如Matlab/Simulink作為一套流程相對完整、友好的工具套件,已經在各個領域有了成功的應用案例,但是目前還存在很多應用的局限性,相信通過不斷的學習和探索,并結合實際應用進行研究,一定能夠基于模型設計的HDL代碼自動生成技術使得到更廣闊、深入的應用。