張鳴蕓,王 薇,王立民
(中國電子科技集團第五十四研究所,河北 石家莊 050081)
星載解調器代碼的驗證
張鳴蕓,王 薇,王立民
(中國電子科技集團第五十四研究所,河北 石家莊 050081)
專用集成電路(ASIC)在衛(wèi)星通信系統(tǒng)的應用使得設計開發(fā)周期變短,為了保證可靠性則需要對代碼進行充分的測試驗證,這將耗用較多時間。為了解決這個問題,在有限的時間內(nèi)對星上代碼進行快速有效的驗證,介紹了一種覆蓋率引導的功能驗證方法。采用該方法對星上解調器代碼進行了驗證,詳細介紹了驗證過程。測試結果表明,該方法可有效加速代碼驗證過程,保證可靠性。
ASIC;解調器代碼;覆蓋率
隨著數(shù)字化調制解調技術的發(fā)展,目前現(xiàn)場可編程門陣列(FPGA)因其編程的靈活性在衛(wèi)星通信系統(tǒng)中廣泛使用。然而近年來,在空間環(huán)境中使用大規(guī)模數(shù)字邏輯電路而發(fā)生的單粒子事件愈加頻繁。而FPGA抗單粒子能力較弱[1,2],使用ASIC代替FPGA成為星上抗單粒子的技術手段之一。但是由于ASIC一經(jīng)流片,便不能更改,因此相對以往基于FPGA的開發(fā)流程,留給設計修改驗證的時間大幅縮短。傳統(tǒng)的驗證方法是根據(jù)功能需求逐個編寫測試激勵,通過仿真得到測試結果,當測試結果全部通過后即認為驗證結束。然而由于星上產(chǎn)品高可靠性要求的特性,對驗證的完備性極為關注。一般而言,更加充分的驗證也就需要耗費更多的時間,而傳統(tǒng)的驗證方法基于開環(huán)流程的特點無法評估代碼的驗證程度。為了加速驗證過程,幫助評估驗證程度,在對星載解調器代碼進行測試驗證的時候以傳統(tǒng)的功能驗證為基礎,引入了覆蓋率測試作為反饋和引導。在進行驗證時,測試激勵的全部通過并不意味著驗證結束,而是以覆蓋率測試的結果為導向,有針對性地開始下一輪驗證過程,以此形成一個不斷改進的閉環(huán)過程,直至驗證的完備性達到預期。這種方法可以達到加速代碼的問題收斂及縮短驗證過程的目的。
集成電路的驗證指檢測硬件語言設計是否滿足設計需求的過程,具體來說就是在設計需求規(guī)定下施加激勵,驗證電路是否產(chǎn)生了符合功能要求的輸出,以及在設計規(guī)定的條件下,電路是否完成正常的功能。目前驗證的常用方法有基于仿真的驗證方法以及形式驗證方法[3]。其中形式驗證發(fā)展還未成熟,基于仿真的驗證方法是主流模式?;诜抡娴尿炞C是以設計的功能需求為基本出發(fā)點,對設計進行仿真,檢測設計實現(xiàn)的功能是否達到了功能需求。
基于仿真的驗證流程如下:首先依據(jù)設計需求設計測試用例[4],每一個測試用例通常包含測試點和測試數(shù)據(jù)2部分。測試點是指測試用例要測的特性,測試數(shù)據(jù)包括激勵數(shù)據(jù)和標準的響應輸出數(shù)據(jù)[5]。然后根據(jù)測試用例設計相應的激勵和標準輸出,經(jīng)過仿真后,將仿真輸出結果與標準輸出結果進行比較,從而驗證設計的正確性。
上述驗證過程的出發(fā)點是系統(tǒng)的功能,因此每一個測試用例都需要精心設計。在系統(tǒng)較為簡單時,足夠詳盡的測試用例可以查出大部分錯誤。但是隨著系統(tǒng)功能日益復雜,測試用例的設計難度隨之不斷增大,測試用例的質量受限于設計者的經(jīng)驗,即使所有的用例都通過測試,也無法保證沒有異常出現(xiàn)或者沒有考慮到的情況發(fā)生,因此衡量驗證的完備程度成為驗證的關鍵。
2.1 覆蓋率
鑒于傳統(tǒng)驗證無法評估驗證程度的缺點,引入了覆蓋率測試作為傳統(tǒng)驗證方法的補充。覆蓋率測試包括功能覆蓋率測試和代碼覆蓋率測試,功能覆蓋率用于反映測試用例執(zhí)行測試功能點的情況,包括執(zhí)行功能點的比例和具體沒有執(zhí)行的功能點。在驗證過程中,依據(jù)測試計劃逐項測試用例的測試也可認為是對功能的覆蓋測試過程。代碼覆蓋率反映設計工程師編寫代碼的執(zhí)行效率,代碼覆蓋率可以通過EDA工具自動收集,既反映執(zhí)行比例,又能明確沒有執(zhí)行的行、條件或狀態(tài)機。很多EDA工具可以進行覆蓋率測試,其中仿真工具ModelSim中也帶有覆蓋率測試工具[6],僅需要在編譯及仿真之前勾選相應覆蓋率分析選項即可。代碼覆蓋率只能保證所編寫代碼的執(zhí)行程度,不能保證所執(zhí)行代碼的功能正確。但是其可以直觀地反映代碼的執(zhí)行情況,幫助設計工程師分析代碼[7,8]。
2.2 驗證步驟
覆蓋率引導的驗證步驟主要包括驗證特性提取、測試點分解、測試用例編寫、測試用例執(zhí)行和覆蓋率分析。
在驗證過程中,首先根據(jù)星載解調器的需求規(guī)格提取驗證特性。驗證特性是從驗證的角度描述需求,說明了某個需求規(guī)格對應需要驗證的多個特性,它包括功能、性能、容錯性、可靠性及缺省功能特性等[9]。星載解調器的主要工作是將接收的上行數(shù)據(jù)進行解調處理。作為數(shù)字處理的核心部分,星載解調器解調代碼主要驗證特性就包括了接收星上遙控指令,發(fā)送遙測數(shù)據(jù),對輸入的中頻采樣數(shù)據(jù)進行解調處理及組幀輸出等。
隨后根據(jù)驗證特性提取驗證測試點,例如在解調最主要的數(shù)據(jù)解調功能中,主要功能特性包括了解調器的基本性能指標,包括信號電平動態(tài)范圍、頻差捕獲范圍及時鐘偏差糾正范圍等。測試點將指導測試用例的開發(fā)和覆蓋率組的編寫,測試點的提取綜合使用等價類法和邊界值法實現(xiàn)[10,11]。等價類的基本思想就是把所有可能的輸入數(shù)據(jù),即程序的輸入域劃分成若干子集,然后從每一個子集中選取少數(shù)具有代表性的數(shù)據(jù)作為測試用例。邊界值分析法就是對輸入或輸出的邊界值進行測試的一種黑盒測試方法。例如,假設解調器電平范圍為L,最小電平為L0,最大電平為L1,那么該性能要求所需的測試點便包括了L0、L1、介于L0與L1之間的一到兩個值、小于L0的一到兩個值、大于L1的一到兩個值,共至少5個測試點。
確定測試點之后,開始編寫測試用例,測試用例用于覆蓋測試點,一個測試點對應一到多個測試用例,一個測試用例也可以覆蓋一到多個測試點。例如解調器的電平范圍需要多個測試用例測試,而一個測試用例也可同時測試信號的最高電平、最大頻率偏差的若干個測試點。驗證過程中所需的測試向量的生成機制可分為3類:直接激勵、隨機激勵、和可約束的隨機激勵[12,13]。后2種方式人工耗費較小,但是針對性不強,在極為復雜的系統(tǒng)驗證中得到了廣泛應用。而直接激勵就是完全由驗證人員手動寫成的固定向量,通過直接激勵,可以準確有效地觸發(fā)驗證的某個目標功能,人工耗費較大。由于星載解調器的主要處理過程是針對數(shù)據(jù)流的處理,邏輯處理方面算不上特別復雜,因此采用了直接激勵的方式進行驗證。其中中頻采樣數(shù)據(jù)數(shù)據(jù)源利用MATLAB軟件產(chǎn)生。
測試用例的執(zhí)行過程是利用已形成的若干測試用例進行仿真并與標準的響應輸出數(shù)據(jù)進行比較,從而確定仿真結果的正確性。覆蓋率分析則在功能驗證的同時進行,找出未覆蓋地方或者程序的錯漏之處。
覆蓋率引導的驗證過程是以傳統(tǒng)的驗證為基礎,在功能驗證的同時對覆蓋率進行測試,來監(jiān)視并提高驗證的完備性,同時在覆蓋率分析的過程中發(fā)現(xiàn)功能點遺漏或錯誤。
在首次對代碼進行驗證時,可能代碼本身和驗證環(huán)境都很不成熟,存在著諸多問題,此時主要對關鍵的功能點進行測試,使驗證系統(tǒng)啟動起來。隨著代碼本身和驗證環(huán)境逐漸趨于穩(wěn)定,之后的測試過程主要關注如何迅速提高驗證的覆蓋率。在此階段,根據(jù)被測功能,對各種功能進行測試,同時監(jiān)測覆蓋率水平,根據(jù)覆蓋率來修改激勵,繼續(xù)進行測試,然后再根據(jù)覆蓋率修改約束,如此反復,以完成對絕大多數(shù)功能覆蓋點的測試。
具體如下:在第1輪測試時,根據(jù)測試計劃設置一組測試用例依次進行仿真,在此過程中可發(fā)現(xiàn)代碼的錯誤及疏漏之處,此時需要返回代碼進行修改并重新測試,直至此組測試用例全部測試完成,并且測試結果符合預期。但是此時還不能結束驗證工作,需要利用覆蓋率對此輪驗證工作進行評估,找出覆蓋率漏洞,即未被覆蓋之處。
當發(fā)現(xiàn)覆蓋率漏洞時需要對其進行分析,這時可能出現(xiàn)幾種情況:
①當前測試用例不完備,這時需要修改或增添測試用例來使測試更加完備。此時一種常見錯誤是編寫測試向量時遺漏了對某個條件或是某些屬性的操作,這種情況只要更正這些遺漏,就可以達到更完備的覆蓋率。
②某段代碼本身是冗余代碼,或者代碼本身存在某種邏輯錯誤,這時應該去除冗余代碼,對問題代碼進行修改,增加其可維護性;例如發(fā)現(xiàn)一組復雜條件選擇判定(if else)語句的最后一個條件無法觸發(fā),經(jīng)過分析發(fā)現(xiàn)最后一個分支的條件設定包含在之前幾個分支之內(nèi)了,因此無法被觸發(fā)執(zhí)行,這種情況下需要對此處程序進行更正。
③一些未覆蓋點屬于由于設計限制永遠不會執(zhí)行到的代碼,這種語句可以在覆蓋率分析開始之前就將其排除在外,不對其進行分析,也可以選擇忽視它。
在采用各種方式填補覆蓋率漏洞后,可以開始第2輪測試,由于第1輪測試可能對代碼本身以及測試用例均進行了修改,在重新執(zhí)行功能測試時,可能原先能通過驗證的功能點在修改后不能通過了,此時需要著重對這些地方進行分析,常常會發(fā)現(xiàn)一些之前被疏忽的邊界情況,這有益于提升測試用例的完備性,更有效的開展下一輪測試。利用覆蓋率引導的功能驗證流程如圖1所示。
在驗證時進行的代碼覆蓋率分析能夠幫助設計工程師發(fā)現(xiàn)一些功能的遺漏和不完善之處,同時也發(fā)現(xiàn)測試計劃中被忽略的功能,需要針對這些功能生成更多的測試用例。在下一輪測試之前發(fā)現(xiàn)這些問題,可加速代碼以及測試向量的問題收斂,有效的避免在后續(xù)設計工作中時間和資源的浪費,縮短整個驗證過程,也減少了重新流片或者成品含有缺陷的風險。
圖1 驗證流程
根據(jù)上述方法對星載解調器代碼進行3輪測試后,代碼經(jīng)過不斷的修改完善已經(jīng)較為成熟,功能測試和覆蓋率測試指標也達到預期要求。同時最終形成的測試激勵組也可認為對星上解調代碼來說是完備的。星上解調代碼的最終形成的各種覆蓋率數(shù)據(jù)如表1所示。其中表達式覆蓋率、狀態(tài)覆蓋率和轉移覆蓋率均已達到100%,而語句、分支、條件覆蓋率也在90%以上,達到了預期要求。
表1 覆蓋率數(shù)據(jù)
為了在有限時間內(nèi)對星載解調器代碼進行充分有效的測試驗證,在功能驗證的基礎上,引入了覆蓋率測試作為功能驗證的反饋和引導。在功能驗證的同時對覆蓋率進行統(tǒng)計分析,以期盡快發(fā)現(xiàn)設計中的錯誤及漏測的功能點,盡量避免將問題帶入下一輪測試,加快問題的收斂速度。
在驗證的過程中,以覆蓋率為依據(jù)改進和完善代碼設計以及測試向量,最后達到了較為完善的功能測試和符合預期的代碼覆蓋率水平。通過實踐證明了覆蓋率引導的功能驗證方法具有更高的效率。應用該方法最終在較短的開發(fā)測試周期內(nèi)對星上解調代碼進行了較好的測試驗證,也為星載解調器最終平穩(wěn)正確運行提供了可靠保證。
[1]邱金娟,徐宏杰,潘 雄,等.SRAM型FPGA單粒子翻轉測試及加固技術研究[J].電光與控制,2011,18(8):84-88.
[2]高 鵬,龐宗強,周同.Virtex FPGA抗單粒子翻轉技術[J].無線電通信技術,2014,40(4):73-76.
[3]孫海平,丁 健.系統(tǒng)芯片(SOC)驗證方法與技術[M].北京:電子工業(yè)出版社,2005.
[4]楊 悅,秦湘河,楊永安,等.航天測控軟件測試用例標準及應用研究[J].無線電工程,2013,43(9):41-44.
[5]楊宗凱,黃 建,杜 旭.數(shù)字專用集成電路的設計與驗證[M].北京:電子工業(yè)出版社,2004:125-169.
[6]杜慧敏,李宥謀,趙全良.基于Verilog的FPGA設計基礎[M].西安:西安電子科技大學出版社,2006.
[7]項碧波.代碼覆蓋率分析——IC設計流程中不可缺少的一步[J].集成電路應用,2002(1):49-52.
[8]席筱穎,毛志剛,殷景華.一種基于覆蓋率的功能驗證方法[J].哈爾濱理工大學學報,2008,13(1):90-92.
[9]羅登富,趙建明.基于覆蓋率的集成電路驗證[J].現(xiàn)代電子技術,2009(14):115-119.
[10]王愛平.軟件測試[M].北京:清華大學出版社,2008.
[11]周元哲,胡 濱,潘曉英,等.軟件測試技術基礎[M].西安:西安電子科技大學出版社,2011.
[12]劉 雅.星載軟件測試用例設計方法的研究[J].航空計算技術,2010,40(3):99-102.
[13]武劍潔,陳傳波,肖來元.軟件測試技術基礎[M].武漢:華中科技大學出版社,2008.
The Verification of Satellite Demodulator Code
ZHANG Ming-yun,WANG Wei,WANG Li-min
(The 54th Research Institute of CETC,Shijiazhuang Hebei 050081,China)
The application of ASIC in satellite communication system brings a shorter design period.However comprehensive code verification costs more time to guarantee system reliability.To verify the satellite code in a short period,a fast and effective approach which combines functional verification and code coverage testing was introduced in this paper.The method was applied to a satellite demodulator code.This paper introduced in detail the procedure of the verification and analyzed the result.Test results indicate that the method could effectively shorten verification time and assure the reliability.
ASIC;demodulator code;coverage
TN431.2
A
1003-3106(2015)07-0059-03
10.3969/j.issn.1003-3106.2015.07.16
張鳴蕓,王 薇,王立民.星載解調器代碼的驗證[J].無線電工程,2015,45(7):59-61,74.
張鳴蕓女,(1983—),工程師。主要研究方向:衛(wèi)星通信。
2015-04-07
國家部委基金資助項目。
王 薇女,(1980—),高級工程師,主要研究方向:衛(wèi)星通信。