摘 要: 從提高測試效率和代碼覆蓋率的角度,提出一種利用Verilog HDL語言中的task來復用測試代碼,進行分層分模塊驗證的測試方案。用該方案測試802.11a基帶芯片,可對設計模塊進行功能仿真,找出設計中的錯誤,以保證802.11a基帶芯片在功能上的正確性和可行性。
關鍵詞: Verilog HDL語言 測試平臺 代碼復用 行為級 無線局域網 802.11a標準
Verilog HDL是一種硬件描述語言,用于從算法級、寄存器傳輸級(RTL)、門級到開關級的多種抽象設計層次的數字系統建模。Verilog HDL語言不僅定義了語法,而且對每個語法結構都定義了清晰的模擬、仿真語義。因此,用這種語言編寫的模型能夠使用Verilog仿真器進行驗證。而且,該語言可用于生成模擬激勵矢量,并且可以指定測試的驗證約束條件(例如設定輸入值)。
設計驗證是芯片設計過程中保證其可靠性的重要環(huán)節(jié)。隨著芯片規(guī)模不斷擴大,復雜度不斷提高,驗證已成為現代化IC設計中的主要瓶頸,影響到成本以及產品投放市場的時間。在大型芯片的設計中,功能驗證或模擬通常會占據整個驗證工作量的40%~70%。模擬驗證是通過對芯片設計施加偽隨機的或確定性的矢量,來檢測設計方案的行為是否正確。在設計驗證的初期(即前仿真時期),常常采用人工編寫的矢量集作為模擬激勵。
1 測試系統的設計思想
測試驗證的速度包括仿真速度和驗證速度,其中仿真占據了驗證過程80%以上的CPU資源和時間。因而,仿真過程效率的提高對保證驗證質量和縮短驗證周期十分重要。
一個完整的IC設計需要進行從上到下的多層仿真才能將出錯的可能性降到最低。RTL級仿真是最高層仿真,也是仿真速度最快的設計層。因此應該在RTL級進行最全面的仿真,將出錯的可能性在該層降到最低,從而縮短整個系統的驗證時間。
1行RTL級設計描述需要1.5行以上的驗證代碼。對于大規(guī)模的設計,驗證程序也需要采用可復用的設計方法。本設計采用結構化、層次化設計方法來提高仿真驗證程序的復用率。結構化設計是指驗證程序由能夠獨立完成一定任務的模塊構成。這些模塊不但能夠提供仿真激勵、響應監(jiān)控、覆蓋率統計等功能,而且可以被各驗證小組共享,也可以應用于仿真驗證的各個階段。層次化設計是指較高層次的仿真程序的功能通過調用處于較低層次的己有程序來完成,這種調用關系可以一直延續(xù)到最底層。層次化設計減小了對仿真程序的修改,即某一層次的改變不會造成別的相關模塊的大改動,可以將改動限制在一個較小的范圍內(與網絡的七層協議類似),從而提高了驗證程序的復用率。
為了更好地利用結構化和層次化的驗證方法,提高編寫測例的效率,從而提高驗證的效率:(1)在進行分層、分模塊設計時,應該盡量將不相關的信號劃分在不同的模塊中,將有先后順序的信號劃分在不同的層次中。這樣在仿真和調試時就可以快速定位出錯點,節(jié)省驗證時間。(2)在編寫測試程序時,盡量使測試程序具有通用性,當需要測試不同的項目時只需進行簡單的開關設置,或者利用不同的數據文件做不同的測試即可。
2 測試系統的總體結構及測試流程
2.1 802.11a基帶芯片系統結構
802.11a是基于正交頻分復用(Orthogonal Frequency Division Multiplexing,OFDM)技術的無線局域網標準。802.11a工作在5GHz的未授權頻段,數據傳輸速率最大可達54Mbps。OFDM技術是802.11a的物理層(PHY)標準,是一種編碼技術,但是它與已有的碼分多址編碼技術(Code Division Multiple Access,CDMA)在實現方法上卻不相同。CDMA利用復雜的數學變換將多路傳輸數據調制到1路載波上,而OFDM將1路傳輸數據編碼到多路子載波上,而且使用一個較寬的帶寬,將其分成多個子信道,每個子信道都可以傳輸數據。這樣多個較慢的子信道就復用成為一個較快的復合信道。OFDM對每一個子信道進行編碼,并且利用快速傅立葉逆變換來生成由每個子信道構成的復合波形。OFDM接收器利用快速傅立葉變換就可以從接收到的波形中提取每個子載波信號的振幅。
按照802.11a協議標準,OFDM物理層由以下二部分組成:
(1)物理層匯聚子層(PLCP)。MAC層和PLCP通過物理層服務訪問點(Service Access Point,SAP)利用原語進行通信。MAC層發(fā)出指示后,PLCP就開始準備需要傳輸的IEEE 802.11物理層服務數據單元(Physical Sublayer Service Data Units,PSDUs)。PLCP也從無線介質向MAC層傳遞引入幀。PLCP是PSDU附加字段,字段中包含物理層發(fā)送和接收所需的信息。PLCP將MAC協議數據單元映射成適合被物理介質依賴子層(PMD)傳送的格式,從而降低MAC層對PMD層的依賴程度。
(2)物理介質依賴(Physical Medium Dependent,PMD)子層。在PLCP下方,PMD支持2個工作站之間通過無線介質實現物理層實體的發(fā)送和接收。為了實現以上功能,PMD需直接面向無線介質(大氣空間),并對數據進行調制和解調。PLCP和PMD之間通過原語通信來控制發(fā)送和接收功能。
因此設計符合802.11a標準的無線局域網芯片的主要工作就是設計基帶芯片。本文設計的802.11a基帶芯片的ONIE系統結構如圖1所示。

整個基帶芯片由內核、接口電路和外圍控制電路三大部分組成。為了將相對獨立的各個模塊組成一個完整的系統,需要定義一個頂層模塊,用來規(guī)定各個模塊之間的數據信號和控制信號的連接關系。在圖1中,頂層模塊取名為ONZE。基帶芯片內核實現接收數據和發(fā)送數據的功能,即接收數據時,如果偵測到正確的數據幀適配頭(Frame Preamble,包含數據幀的長度、速率等信息),則開始通過射頻模塊接收從網絡傳輸過來的數據幀,同時對數據幀進行解調,生成PSDU數據后再發(fā)送給上面的MAC層;發(fā)送數據時,首先將數據幀適配頭和PSDU數據組裝成數據幀,然后對數據幀進行調制,再通過射頻模塊傳送到網絡上去。圖1中的基帶芯片內核模塊取名為OFDM_CORE,其接收數據功能用模塊TX_CORE來實現,發(fā)送數據功能用RX_CORE模塊來實現。接口電路主要實現基帶芯片內核與射頻模塊和MAC層之間的數據傳輸以及控制信號的轉化,其中模塊OFDM_RIF是射頻模塊與內核之間的接口,模塊MAC_IF是MAC層與內核之間的接口。外圍控制電路有以下幾種:第1種是用來產生內核、接口電路和外圍控制電路所需的工作時鐘(在圖1中取名為ONZE_CLK);第2種是用來產生內核、接口電路和外圍控制電路所需的異步復位信號和同步復位信號(在圖1中取名為ONZE_RST);第3種是用來產生內核、接口電路和外圍控制電路所需的工作使能信號(在圖1中取名為BOSS_TOP);第4種是用來設置芯片內核、接口電路和外圍控制電路的控制參數以及讀取其相關狀態(tài)(在圖1中取名為RGB);第5種是一些輔助的外圍模塊,如用于CRC校驗的CRC CHECK模塊和用于響應異常狀況的中斷控制模塊等。
由圖1可知,ONZE是頂層,OFDM_RIF、MAC_IF、OFDM_CORE、RGB及外圍模塊是下一層模塊,其中模塊OFDM_CORE中又包含了子模塊TX_CORE和RX_CORE。驗證時,可以先驗證底層模塊,再驗證頂層模塊。在同一個層次上,分別驗證各個相對獨立的模塊。驗證主要通過各個接口對ONZE施加激勵向量。因此各個接口的功能對各個層次及各個模塊的驗證具有通用性,可以利用task來編寫這些接口功能,用于分層分模塊驗證。
2.2 測試平臺組織結構
構建測試系統結構的主要思想是在靠近DUT(Design Under Test)即所要測試驗證的對象ONZE的地方,將對各個端口的各種操作編寫成task,然后在testbench中調用這些task對ONZE加載測試向量。這樣做的好處是分層分模塊驗證時可以提高測試代碼的復用率。針對要測試對象ONZE的系統結構,設計了如圖2所示的整個測試系統的總體結構。

根據802.11a基帶芯片的系統結構,將不同接口處要實現的驗證功能編寫成相應的task,供不同的測例程序復用。整個測試平臺系統由7個模塊組成,每個模塊完成相對獨立的任務,分述如下。
(1)模塊ONZE_TB。生成頂層模塊ONZE;與此同時生成系統時鐘和復位信號,作為輸入激勵信號提供給ONZE內部各個模塊使用。task包含:sys_reset,將整個ONZE系統復位到初始狀態(tài)。
(2)模塊TB_MAC_IF。通過MAC interface向ONZE發(fā)送和接收測試向量,并且通過與正確值比較來進行驗證。task包含psdu_rev_check(psdu_exp,len,rate),對接收到的psdu進行校驗,其中參數psdu_exp是期望接收到的psdu,len是期望接收到的psdu的長度,rate是期望接收到的plcp中的速率;receive_enabel,設置開始接收;check_display,顯示psdu數據部分校驗的結果;psdu_snd_if(psdu_send,len,rate),通過mac_if接口發(fā)送數據,其中參數psdu_snd是要發(fā)送的psdu數據,len是要發(fā)送的psdu數據的長度,rate是要發(fā)送psdu數據的速率;mac_if_reset,復位mac接口模塊的輸出信號和內部所使用的寄存器。
(3)模塊TB_RF_IF。通過RF interface向ONZE發(fā)送和接收測試向量,同時進行校驗。
(4)模塊TB_SPI_BUS。通過SPI總線對ONZE內部的RGB(寄存器組)進行讀寫,完成各個模塊參數的設置和讀取。task包含:spi_read(spi_out_data,spi_addr),通過spi端口讀取RGB的值,其中參數spi_out_data為讀出的數據,spi_addr為要讀的RGB地址;spi_write(spi_in_data,spi_addr),通過spi端口向RGB中寫入數值,其中參數spi_in_data是將要寫入RGB的數據,spi_addr是準備寫的RGB地址;spi_reset,對spi端口的輸出信號和內部用到的寄存器進行復位。
(5)模塊PSDU_DATA。負責從數據文件中讀取測試用的各種數據,包括I、Q二路數據和期望的PSDU值。
(6)不同測試所用到的數據,其數據長度、速率、有無頻偏等各不相同,為了統一管理以及程序上的簡潔,將不同測例用到的不同數據的相關參數放在同一個文件中,形成了模塊TB_SYS_CONST。
(7)模塊Testbench。是真正用于測試的測例程序,針對不同模塊的各個測例都包含在這個文件中。其中,每個測例程序都是通過調用前面所述各個模塊中的task來完成測試的。
2.3 測試驗證流程
測試驗證分2個階段進行:第一階段測試基本的接收和發(fā)送功能是否能正常工作,第二階段分別測試各個外圍模塊的功能。因為驗證流程與測試流程類似,在此僅以測試接收和發(fā)送功能的回環(huán)測試為例加以說明。
首先,調用onze_tb.sys_reset、onze_tb.U_tb_mac_if.mac_if_reset、onze_tb.U_tb_spi_bus.spi_reset 3個task,對系統和MAC端口、SPI端口進行復位;然后調用onze_tb.U_tb_spi_bus.spi_write(spi_in_data,spi_addr)task來設置psdu數據的長度和速率;最后調用onze_tb.U_tb_mac_if.psdu_snd_if(psdu_send,len,rate)和onze_tb.U_tb_mac_if.psdu_rev_check
(psdu_exp,len, rate)task,來測試芯片的發(fā)送和接收功能。
3 系統仿真與驗證
測試程序編寫完成后,就可以利用ncverilog編譯器(如candence公司的Verilog-XL)進行仿真。因為整個系統劃分的層次和模塊比較多,編寫的測例也很多,所以編寫了腳本文件。當要測試某一個測例時,只需要敲入命令make testbench_name就可以運行該測例程序。
為了驗證設計模塊的功能是否正確,需要查看仿真的log文件和波形文件。通過觀察波形工具signalscan或者simvision即可以清楚地看出設計模塊的輸入信號、輸出信號和內部信號,從而找出模塊設計中的錯誤之處。
4 結束語
利用Verilog HDL語言進行IC設計前仿真(功能驗證)時,如何搭建測試平臺對驗證的效率有很大的影響。本文的測試平臺利用結構化、層次化的驗證方法,通過對測試代碼的復用,有效地提高了驗證的效率,保證了802.11a基帶芯片功能上的正確性,可以作為一種搭建IC設計測試平臺的參考。
參考文獻
1 汪西虎,梁松海,李美云等.一款通訊專用SOC設計的驗證. 微電子學與計算機,2002;(12)
2 Bhasker J著,徐振林等譯.VERILOG HDL硬件描述語言. 北京:機械工業(yè)出版社,2000
3 呂濤,李華偉,尹志剛等.通用CPU設計中的模擬驗證技術及應用.系統仿真學報,2002;14(12)
4 IEEE Std 802.11a-1999(Supplement to IEEE Std 802.11-1999).1999
