摘 要: 從提高測(cè)試效率和代碼覆蓋率的角度,提出一種利用Verilog HDL語(yǔ)言中的task來(lái)復(fù)用測(cè)試代碼,進(jìn)行分層分模塊驗(yàn)證的測(cè)試方案。用該方案測(cè)試802.11a基帶芯片,可對(duì)設(shè)計(jì)模塊進(jìn)行功能仿真,找出設(shè)計(jì)中的錯(cuò)誤,以保證802.11a基帶芯片在功能上的正確性和可行性。
關(guān)鍵詞: Verilog HDL語(yǔ)言 測(cè)試平臺(tái) 代碼復(fù)用 行為級(jí) 無(wú)線局域網(wǎng) 802.11a標(biāo)準(zhǔn)
Verilog HDL是一種硬件描述語(yǔ)言,用于從算法級(jí)、寄存器傳輸級(jí)(RTL)、門級(jí)到開關(guān)級(jí)的多種抽象設(shè)計(jì)層次的數(shù)字系統(tǒng)建模。Verilog HDL語(yǔ)言不僅定義了語(yǔ)法,而且對(duì)每個(gè)語(yǔ)法結(jié)構(gòu)都定義了清晰的模擬、仿真語(yǔ)義。因此,用這種語(yǔ)言編寫的模型能夠使用Verilog仿真器進(jìn)行驗(yàn)證。而且,該語(yǔ)言可用于生成模擬激勵(lì)矢量,并且可以指定測(cè)試的驗(yàn)證約束條件(例如設(shè)定輸入值)。
設(shè)計(jì)驗(yàn)證是芯片設(shè)計(jì)過(guò)程中保證其可靠性的重要環(huán)節(jié)。隨著芯片規(guī)模不斷擴(kuò)大,復(fù)雜度不斷提高,驗(yàn)證已成為現(xiàn)代化IC設(shè)計(jì)中的主要瓶頸,影響到成本以及產(chǎn)品投放市場(chǎng)的時(shí)間。在大型芯片的設(shè)計(jì)中,功能驗(yàn)證或模擬通常會(huì)占據(jù)整個(gè)驗(yàn)證工作量的40%~70%。模擬驗(yàn)證是通過(guò)對(duì)芯片設(shè)計(jì)施加偽隨機(jī)的或確定性的矢量,來(lái)檢測(cè)設(shè)計(jì)方案的行為是否正確。在設(shè)計(jì)驗(yàn)證的初期(即前仿真時(shí)期),常常采用人工編寫的矢量集作為模擬激勵(lì)。
1 測(cè)試系統(tǒng)的設(shè)計(jì)思想
測(cè)試驗(yàn)證的速度包括仿真速度和驗(yàn)證速度,其中仿真占據(jù)了驗(yàn)證過(guò)程80%以上的CPU資源和時(shí)間。因而,仿真過(guò)程效率的提高對(duì)保證驗(yàn)證質(zhì)量和縮短驗(yàn)證周期十分重要。
一個(gè)完整的IC設(shè)計(jì)需要進(jìn)行從上到下的多層仿真才能將出錯(cuò)的可能性降到最低。RTL級(jí)仿真是最高層仿真,也是仿真速度最快的設(shè)計(jì)層。因此應(yīng)該在RTL級(jí)進(jìn)行最全面的仿真,將出錯(cuò)的可能性在該層降到最低,從而縮短整個(gè)系統(tǒng)的驗(yàn)證時(shí)間。
1行RTL級(jí)設(shè)計(jì)描述需要1.5行以上的驗(yàn)證代碼。對(duì)于大規(guī)模的設(shè)計(jì),驗(yàn)證程序也需要采用可復(fù)用的設(shè)計(jì)方法。本設(shè)計(jì)采用結(jié)構(gòu)化、層次化設(shè)計(jì)方法來(lái)提高仿真驗(yàn)證程序的復(fù)用率。結(jié)構(gòu)化設(shè)計(jì)是指驗(yàn)證程序由能夠獨(dú)立完成一定任務(wù)的模塊構(gòu)成。這些模塊不但能夠提供仿真激勵(lì)、響應(yīng)監(jiān)控、覆蓋率統(tǒng)計(jì)等功能,而且可以被各驗(yàn)證小組共享,也可以應(yīng)用于仿真驗(yàn)證的各個(gè)階段。層次化設(shè)計(jì)是指較高層次的仿真程序的功能通過(guò)調(diào)用處于較低層次的己有程序來(lái)完成,這種調(diào)用關(guān)系可以一直延續(xù)到最底層。層次化設(shè)計(jì)減小了對(duì)仿真程序的修改,即某一層次的改變不會(huì)造成別的相關(guān)模塊的大改動(dòng),可以將改動(dòng)限制在一個(gè)較小的范圍內(nèi)(與網(wǎng)絡(luò)的七層協(xié)議類似),從而提高了驗(yàn)證程序的復(fù)用率。
為了更好地利用結(jié)構(gòu)化和層次化的驗(yàn)證方法,提高編寫測(cè)例的效率,從而提高驗(yàn)證的效率:(1)在進(jìn)行分層、分模塊設(shè)計(jì)時(shí),應(yīng)該盡量將不相關(guān)的信號(hào)劃分在不同的模塊中,將有先后順序的信號(hào)劃分在不同的層次中。這樣在仿真和調(diào)試時(shí)就可以快速定位出錯(cuò)點(diǎn),節(jié)省驗(yàn)證時(shí)間。(2)在編寫測(cè)試程序時(shí),盡量使測(cè)試程序具有通用性,當(dāng)需要測(cè)試不同的項(xiàng)目時(shí)只需進(jìn)行簡(jiǎn)單的開關(guān)設(shè)置,或者利用不同的數(shù)據(jù)文件做不同的測(cè)試即可。
2 測(cè)試系統(tǒng)的總體結(jié)構(gòu)及測(cè)試流程
2.1 802.11a基帶芯片系統(tǒng)結(jié)構(gòu)
802.11a是基于正交頻分復(fù)用(Orthogonal Frequency Division Multiplexing,OFDM)技術(shù)的無(wú)線局域網(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ù)編碼到多路子載波上,而且使用一個(gè)較寬的帶寬,將其分成多個(gè)子信道,每個(gè)子信道都可以傳輸數(shù)據(jù)。這樣多個(gè)較慢的子信道就復(fù)用成為一個(gè)較快的復(fù)合信道。OFDM對(duì)每一個(gè)子信道進(jìn)行編碼,并且利用快速傅立葉逆變換來(lái)生成由每個(gè)子信道構(gòu)成的復(fù)合波形。OFDM接收器利用快速傅立葉變換就可以從接收到的波形中提取每個(gè)子載波信號(hào)的振幅。
按照802.11a協(xié)議標(biāo)準(zhǔn),OFDM物理層由以下二部分組成:
(1)物理層匯聚子層(PLCP)。MAC層和PLCP通過(guò)物理層服務(wù)訪問(wèn)點(diǎn)(Service Access Point,SAP)利用原語(yǔ)進(jìn)行通信。MAC層發(fā)出指示后,PLCP就開始準(zhǔn)備需要傳輸?shù)腎EEE 802.11物理層服務(wù)數(shù)據(jù)單元(Physical Sublayer Service Data Units,PSDUs)。PLCP也從無(wú)線介質(zhì)向MAC層傳遞引入幀。PLCP是PSDU附加字段,字段中包含物理層發(fā)送和接收所需的信息。PLCP將MAC協(xié)議數(shù)據(jù)單元映射成適合被物理介質(zhì)依賴子層(PMD)傳送的格式,從而降低MAC層對(duì)PMD層的依賴程度。
(2)物理介質(zhì)依賴(Physical Medium Dependent,PMD)子層。在PLCP下方,PMD支持2個(gè)工作站之間通過(guò)無(wú)線介質(zhì)實(shí)現(xiàn)物理層實(shí)體的發(fā)送和接收。為了實(shí)現(xiàn)以上功能,PMD需直接面向無(wú)線介質(zhì)(大氣空間),并對(duì)數(shù)據(jù)進(jìn)行調(diào)制和解調(diào)。PLCP和PMD之間通過(guò)原語(yǔ)通信來(lái)控制發(fā)送和接收功能。
因此設(shè)計(jì)符合802.11a標(biāo)準(zhǔn)的無(wú)線局域網(wǎng)芯片的主要工作就是設(shè)計(jì)基帶芯片。本文設(shè)計(jì)的802.11a基帶芯片的ONIE系統(tǒng)結(jié)構(gòu)如圖1所示。
整個(gè)基帶芯片由內(nèi)核、接口電路和外圍控制電路三大部分組成。為了將相對(duì)獨(dú)立的各個(gè)模塊組成一個(gè)完整的系統(tǒng),需要定義一個(gè)頂層模塊,用來(lái)規(guī)定各個(gè)模塊之間的數(shù)據(jù)信號(hào)和控制信號(hào)的連接關(guān)系。在圖1中,頂層模塊取名為ONZE?;鶐酒瑑?nèi)核實(shí)現(xiàn)接收數(shù)據(jù)和發(fā)送數(shù)據(jù)的功能,即接收數(shù)據(jù)時(shí),如果偵測(cè)到正確的數(shù)據(jù)幀適配頭(Frame Preamble,包含數(shù)據(jù)幀的長(zhǎng)度、速率等信息),則開始通過(guò)射頻模塊接收從網(wǎng)絡(luò)傳輸過(guò)來(lái)的數(shù)據(jù)幀,同時(shí)對(duì)數(shù)據(jù)幀進(jìn)行解調(diào),生成PSDU數(shù)據(jù)后再發(fā)送給上面的MAC層;發(fā)送數(shù)據(jù)時(shí),首先將數(shù)據(jù)幀適配頭和PSDU數(shù)據(jù)組裝成數(shù)據(jù)幀,然后對(duì)數(shù)據(jù)幀進(jìn)行調(diào)制,再通過(guò)射頻模塊傳送到網(wǎng)絡(luò)上去。圖1中的基帶芯片內(nèi)核模塊取名為OFDM_CORE,其接收數(shù)據(jù)功能用模塊TX_CORE來(lái)實(shí)現(xiàn),發(fā)送數(shù)據(jù)功能用RX_CORE模塊來(lái)實(shí)現(xiàn)。接口電路主要實(shí)現(xiàn)基帶芯片內(nèi)核與射頻模塊和MAC層之間的數(shù)據(jù)傳輸以及控制信號(hào)的轉(zhuǎn)化,其中模塊OFDM_RIF是射頻模塊與內(nèi)核之間的接口,模塊MAC_IF是MAC層與內(nèi)核之間的接口。外圍控制電路有以下幾種:第1種是用來(lái)產(chǎn)生內(nèi)核、接口電路和外圍控制電路所需的工作時(shí)鐘(在圖1中取名為ONZE_CLK);第2種是用來(lái)產(chǎn)生內(nèi)核、接口電路和外圍控制電路所需的異步復(fù)位信號(hào)和同步復(fù)位信號(hào)(在圖1中取名為ONZE_RST);第3種是用來(lái)產(chǎn)生內(nèi)核、接口電路和外圍控制電路所需的工作使能信號(hào)(在圖1中取名為BOSS_TOP);第4種是用來(lái)設(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)證時(shí),可以先驗(yàn)證底層模塊,再驗(yàn)證頂層模塊。在同一個(gè)層次上,分別驗(yàn)證各個(gè)相對(duì)獨(dú)立的模塊。驗(yàn)證主要通過(guò)各個(gè)接口對(duì)ONZE施加激勵(lì)向量。因此各個(gè)接口的功能對(duì)各個(gè)層次及各個(gè)模塊的驗(yàn)證具有通用性,可以利用task來(lái)編寫這些接口功能,用于分層分模塊驗(yàn)證。
2.2 測(cè)試平臺(tái)組織結(jié)構(gòu)
構(gòu)建測(cè)試系統(tǒng)結(jié)構(gòu)的主要思想是在靠近DUT(Design Under Test)即所要測(cè)試驗(yàn)證的對(duì)象ONZE的地方,將對(duì)各個(gè)端口的各種操作編寫成task,然后在testbench中調(diào)用這些task對(duì)ONZE加載測(cè)試向量。這樣做的好處是分層分模塊驗(yàn)證時(shí)可以提高測(cè)試代碼的復(fù)用率。針對(duì)要測(cè)試對(duì)象ONZE的系統(tǒng)結(jié)構(gòu),設(shè)計(jì)了如圖2所示的整個(gè)測(cè)試系統(tǒng)的總體結(jié)構(gòu)。
根據(jù)802.11a基帶芯片的系統(tǒng)結(jié)構(gòu),將不同接口處要實(shí)現(xiàn)的驗(yàn)證功能編寫成相應(yīng)的task,供不同的測(cè)例程序復(fù)用。整個(gè)測(cè)試平臺(tái)系統(tǒng)由7個(gè)模塊組成,每個(gè)模塊完成相對(duì)獨(dú)立的任務(wù),分述如下。
(1)模塊ONZE_TB。生成頂層模塊ONZE;與此同時(shí)生成系統(tǒng)時(shí)鐘和復(fù)位信號(hào),作為輸入激勵(lì)信號(hào)提供給ONZE內(nèi)部各個(gè)模塊使用。task包含:sys_reset,將整個(gè)ONZE系統(tǒng)復(fù)位到初始狀態(tài)。
(2)模塊TB_MAC_IF。通過(guò)MAC interface向ONZE發(fā)送和接收測(cè)試向量,并且通過(guò)與正確值比較來(lái)進(jìn)行驗(yàn)證。task包含psdu_rev_check(psdu_exp,len,rate),對(duì)接收到的psdu進(jìn)行校驗(yàn),其中參數(shù)psdu_exp是期望接收到的psdu,len是期望接收到的psdu的長(zhǎng)度,rate是期望接收到的plcp中的速率;receive_enabel,設(shè)置開始接收;check_display,顯示psdu數(shù)據(jù)部分校驗(yàn)的結(jié)果;psdu_snd_if(psdu_send,len,rate),通過(guò)mac_if接口發(fā)送數(shù)據(jù),其中參數(shù)psdu_snd是要發(fā)送的psdu數(shù)據(jù),len是要發(fā)送的psdu數(shù)據(jù)的長(zhǎng)度,rate是要發(fā)送psdu數(shù)據(jù)的速率;mac_if_reset,復(fù)位mac接口模塊的輸出信號(hào)和內(nèi)部所使用的寄存器。
(3)模塊TB_RF_IF。通過(guò)RF interface向ONZE發(fā)送和接收測(cè)試向量,同時(shí)進(jìn)行校驗(yàn)。
(4)模塊TB_SPI_BUS。通過(guò)SPI總線對(duì)ONZE內(nèi)部的RGB(寄存器組)進(jìn)行讀寫,完成各個(gè)模塊參數(shù)的設(shè)置和讀取。task包含:spi_read(spi_out_data,spi_addr),通過(guò)spi端口讀取RGB的值,其中參數(shù)spi_out_data為讀出的數(shù)據(jù),spi_addr為要讀的RGB地址;spi_write(spi_in_data,spi_addr),通過(guò)spi端口向RGB中寫入數(shù)值,其中參數(shù)spi_in_data是將要寫入RGB的數(shù)據(jù),spi_addr是準(zhǔn)備寫的RGB地址;spi_reset,對(duì)spi端口的輸出信號(hào)和內(nèi)部用到的寄存器進(jìn)行復(fù)位。
(5)模塊PSDU_DATA。負(fù)責(zé)從數(shù)據(jù)文件中讀取測(cè)試用的各種數(shù)據(jù),包括I、Q二路數(shù)據(jù)和期望的PSDU值。
(6)不同測(cè)試所用到的數(shù)據(jù),其數(shù)據(jù)長(zhǎng)度、速率、有無(wú)頻偏等各不相同,為了統(tǒng)一管理以及程序上的簡(jiǎn)潔,將不同測(cè)例用到的不同數(shù)據(jù)的相關(guān)參數(shù)放在同一個(gè)文件中,形成了模塊TB_SYS_CONST。
(7)模塊Testbench。是真正用于測(cè)試的測(cè)例程序,針對(duì)不同模塊的各個(gè)測(cè)例都包含在這個(gè)文件中。其中,每個(gè)測(cè)例程序都是通過(guò)調(diào)用前面所述各個(gè)模塊中的task來(lái)完成測(cè)試的。
2.3 測(cè)試驗(yàn)證流程
測(cè)試驗(yàn)證分2個(gè)階段進(jìn)行:第一階段測(cè)試基本的接收和發(fā)送功能是否能正常工作,第二階段分別測(cè)試各個(gè)外圍模塊的功能。因?yàn)轵?yàn)證流程與測(cè)試流程類似,在此僅以測(cè)試接收和發(fā)送功能的回環(huán)測(cè)試為例加以說(shuō)明。
首先,調(diào)用onze_tb.sys_reset、onze_tb.U_tb_mac_if.mac_if_reset、onze_tb.U_tb_spi_bus.spi_reset 3個(gè)task,對(duì)系統(tǒng)和MAC端口、SPI端口進(jìn)行復(fù)位;然后調(diào)用onze_tb.U_tb_spi_bus.spi_write(spi_in_data,spi_addr)task來(lái)設(shè)置psdu數(shù)據(jù)的長(zhǎng)度和速率;最后調(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,來(lái)測(cè)試芯片的發(fā)送和接收功能。
3 系統(tǒng)仿真與驗(yàn)證
測(cè)試程序編寫完成后,就可以利用ncverilog編譯器(如candence公司的Verilog-XL)進(jìn)行仿真。因?yàn)檎麄€(gè)系統(tǒng)劃分的層次和模塊比較多,編寫的測(cè)例也很多,所以編寫了腳本文件。當(dāng)要測(cè)試某一個(gè)測(cè)例時(shí),只需要敲入命令make testbench_name就可以運(yùn)行該測(cè)例程序。
為了驗(yàn)證設(shè)計(jì)模塊的功能是否正確,需要查看仿真的log文件和波形文件。通過(guò)觀察波形工具signalscan或者simvision即可以清楚地看出設(shè)計(jì)模塊的輸入信號(hào)、輸出信號(hào)和內(nèi)部信號(hào),從而找出模塊設(shè)計(jì)中的錯(cuò)誤之處。
4 結(jié)束語(yǔ)
利用Verilog HDL語(yǔ)言進(jìn)行IC設(shè)計(jì)前仿真(功能驗(yàn)證)時(shí),如何搭建測(cè)試平臺(tái)對(duì)驗(yàn)證的效率有很大的影響。本文的測(cè)試平臺(tái)利用結(jié)構(gòu)化、層次化的驗(yàn)證方法,通過(guò)對(duì)測(cè)試代碼的復(fù)用,有效地提高了驗(yàn)證的效率,保證了802.11a基帶芯片功能上的正確性,可以作為一種搭建IC設(shè)計(jì)測(cè)試平臺(tái)的參考。
參考文獻(xiàn)
1 汪西虎,梁松海,李美云等.一款通訊專用SOC設(shè)計(jì)的驗(yàn)證. 微電子學(xué)與計(jì)算機(jī),2002;(12)
2 Bhasker J著,徐振林等譯.VERILOG HDL硬件描述語(yǔ)言. 北京:機(jī)械工業(yè)出版社,2000
3 呂濤,李華偉,尹志剛等.通用CPU設(shè)計(jì)中的模擬驗(yàn)證技術(shù)及應(yīng)用.系統(tǒng)仿真學(xué)報(bào),2002;14(12)
4 IEEE Std 802.11a-1999(Supplement to IEEE Std 802.11-1999).1999