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

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

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