本發(fā)明時間邏輯驗證領(lǐng)域,尤指一種配置寄存器的方法和裝置。
背景技術(shù):
在集成電路(ASIC,Application Specific Integrated Circuit)芯片設(shè)計和現(xiàn)場可編邏輯門陣列(FPGA,F(xiàn)ield Programmable Gate Array)設(shè)計中,邏輯工程師們按照設(shè)計說明書把具體的需求翻譯成Verilog代碼,在翻譯過程中,會由于各種原因?qū)е耉erilog代碼存在功能性的錯誤。為了保證設(shè)計功能的正確性,通過邏輯驗證來定位并改正設(shè)計中的錯誤已成為一種必要手段。
在傳統(tǒng)驗證方式不斷發(fā)展的背景,通用驗證方法學(xué)(UVM,Universal Verification Methodology)的出現(xiàn),對于提升驗證效率有極大的幫助。它是基于開放驗證方法學(xué)(OVM,Open Verification Methodology)發(fā)展而來的新一代驗證方法學(xué)。在UVM的五步驗證流程(即制定驗證計劃、開發(fā)驗證平臺、大規(guī)模激勵驗證、縮小范圍激勵驗證、特別定制激勵驗證)中,開發(fā)驗證平臺是最基本的要求,但耗時最多的大規(guī)模激勵驗證階段便是需要對待驗證模塊(DUT,Design Under Test)灌輸大量的隨機數(shù)據(jù)來保證代碼覆蓋率和功能覆蓋率,這些灌輸?shù)募钪芯桶藢拇嫫鞯呐渲?。UVM在system verilog的基礎(chǔ)上,在實現(xiàn)UVM的庫文件中定義了一些在驗證平臺中經(jīng)常使用到的基類、宏、和塊語句。這些庫文件可以直接調(diào)用,方便對DUT的驗證時定位錯誤。
隨著光通信網(wǎng)絡(luò)的演化和驗證技術(shù)(即采用UVM來進行驗證)的發(fā)展,以及FPGA的庫文件與EDA工具編譯的兼容性,ASIC芯片驗證和FPGA邏輯驗證趨向于統(tǒng)一。在這種前提下,光通信網(wǎng)絡(luò)的硬件邏輯驗證時數(shù)據(jù)流激勵和寄存器實時隨機配置,在驗證平臺中變得很重要,也是保障邏輯功能覆蓋率的重要方式。一般地,需要添加激勵數(shù)據(jù)并且對DUT內(nèi)部的寄存器進 行實時改變。在DUT的邏輯設(shè)計中,通常都會用到低速總線,比如外圍總線(APB,Advanced Peripheral Bus)、串行外圍設(shè)備接口(SPI,Serial Peripheral Interface)總線、內(nèi)部集成電路(I2C,Inter-Integrated Circuit)總線等等,我們稱之為帶配置總線的DUT。這些低速總線會連接到DUT中的待配置寄存器,通過低速總線來配置寄存器。
其中,圖1為現(xiàn)有UVM中實現(xiàn)數(shù)據(jù)流激勵的裝置的結(jié)構(gòu)組成示意圖。如圖1所示,實現(xiàn)數(shù)據(jù)流激勵的方法大致包括:
事物處理(Transaction)模塊獲取目標(biāo)驗證數(shù)據(jù)包中每一數(shù)據(jù)包的包結(jié)構(gòu)信息,并將每一數(shù)據(jù)包的包結(jié)構(gòu)信息以預(yù)置參數(shù)類型打包發(fā)送至第一sequence模塊;第一序列(sequence)模塊根據(jù)每一數(shù)據(jù)包的包結(jié)構(gòu)信息生成隨機數(shù),且將每一數(shù)據(jù)包對應(yīng)的所有隨機數(shù)生成幀數(shù)據(jù);第一定序器(sequencer)模塊通過預(yù)置的事物級建模(TLM,Transaction Level Modeling)端口將幀數(shù)據(jù)發(fā)送給第一驅(qū)動(driver)模塊;第一driver模塊將幀數(shù)據(jù)打包成字節(jié)數(shù)據(jù)流,并加載到DUT中;第一monitor模塊監(jiān)控DUT的輸入數(shù)據(jù)(即第一driver模塊加載到DUT中的數(shù)據(jù)包),并將DUT的輸入數(shù)據(jù)發(fā)送給參考(Reference)模塊;Reference模塊根據(jù)DUT的輸入數(shù)據(jù)完成與DUT相同的功能后,將輸出的期望數(shù)據(jù)信息發(fā)送給計分板(scoreboard)模塊;第二監(jiān)控(monitor)模塊檢測DUT輸出的檢測數(shù)據(jù)信息,并發(fā)送給scoreboard模塊;scoreboard模塊對檢測數(shù)據(jù)信息和期望數(shù)據(jù)信息進行比較。其中,設(shè)置好transaction的數(shù)據(jù)包結(jié)構(gòu),然后在sequence類中只需設(shè)置`uvm_do_on類或`uvm_do_on_with類的循環(huán)次數(shù),便可簡單地完成大批量隨機數(shù)據(jù)的灌輸功能。
其中,包結(jié)構(gòu)信息包括包頭、靜荷、負(fù)載、開銷字節(jié)位及數(shù)據(jù)包的約束條件。
其中,transaction模塊可以直接派生UVM的庫文件中的uvm_sequence_item類得到的transaction類來實現(xiàn),第一sequence模塊可以直接派生UVM的庫文件中的uvm_sequence類得到的第一sequence類來實現(xiàn),第一sequencer模塊可以直接派生UVM的庫文件中的uvm_sequencer類得到的第一sequencer類來實現(xiàn),第一driver模塊可以直接派生UVM的庫文 件中的uvm_driver類得到的第一driver類來實現(xiàn),Reference模塊可以直接派生UVM的庫文件中的uvm_Reference類得到的Reference類來實現(xiàn),第一monitor模塊可以直接派生UVM的庫文件中的uvm_monitor類得到的第一monitor類來實現(xiàn),第二monitor模塊可以直接派生UVM的庫文件中的uvm_monitor類得到的第二monitor類來實現(xiàn),scoreboard模塊可以直接派生UVM的庫文件中的uvm_scoreboard類得到的scoreboard類來實現(xiàn)。
在現(xiàn)有實現(xiàn)激勵的過程中,配置寄存器的方法大致包括:用戶手動將寫入寄存器的值輸入到force語句中,采用force語句進行層次化的引用來改變寄存器的值。例如,force a.b.c.d=1表示將a模塊下的b模塊下的c模塊下的d寄存器的值改為1。
現(xiàn)有的配置寄存器的方法中,寫入寄存器的值需要手動輸入,而在驗證過程中,為了保證驗證的代碼覆蓋率和功能覆蓋率,要求寫入寄存器的值隨機變化,而現(xiàn)有的配置寄存器的方法很難保證寫入寄存器的值的隨機變化。
技術(shù)實現(xiàn)要素:
為了解決上述問題,本發(fā)明提出了一種配置寄存器的方法和裝置,能夠保證寫入寄存器的值的隨機變化。
為了達到上述目的,本發(fā)明提出了一種配置寄存器的方法,預(yù)先設(shè)置寄存器和地址之間的對應(yīng)關(guān)系,該方法包括:
生成隨機數(shù),根據(jù)對應(yīng)關(guān)系和生成的隨機數(shù)生成對寄存器的寫控制指令;
根據(jù)寫控制指令將生成的隨機數(shù)寫入寄存器中。
優(yōu)選地,還包括:
根據(jù)所述對應(yīng)關(guān)系生成對所述寄存器的讀控制指令;
根據(jù)所述讀控制指令讀取所述寄存器。
優(yōu)選地,所述方法和實現(xiàn)數(shù)據(jù)流激勵的方法封裝到頂層平臺文件中,并在case類中實例化所述頂層平臺文件。
本發(fā)明還提出了一種配置寄存器的裝置,至少包括:
設(shè)置模塊,用于預(yù)先設(shè)置寄存器和地址之間的對應(yīng)關(guān)系;
生成模塊,用于生成隨機數(shù),根據(jù)對應(yīng)關(guān)系和生成的隨機數(shù)生成對寄存器的寫控制指令;
控制模塊,用于根據(jù)寫控制指令將生成的隨機數(shù)寫入寄存器中。
優(yōu)選地,所述生成模塊還用于:
根據(jù)所述對應(yīng)關(guān)系生成對所述寄存器的讀控制指令;
所述控制模塊還用于:
根據(jù)所述讀控制指令讀取所述寄存器。
優(yōu)選地,所述裝置和實現(xiàn)數(shù)據(jù)流激勵的裝置封裝到頂層平臺文件中,并在case類中實例化所述頂層平臺文件。
與現(xiàn)有技術(shù)相比,本發(fā)明包括:生成隨機數(shù),根據(jù)預(yù)先設(shè)置的對應(yīng)關(guān)系和生成的隨機數(shù)生成對寄存器的寫控制指令;根據(jù)寫控制指令將生成的隨機數(shù)寫入寄存器中。通過本發(fā)明的方案,根據(jù)生成的寫控制指令將生成的隨機數(shù)寫入寄存器中,保證了寫入寄存器的值的隨機變化。
附圖說明
下面對本發(fā)明實施例中的附圖進行說明,實施例中的附圖是用于對本發(fā)明的進一步理解,與說明書一起用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明保護范圍的限制。
圖1為現(xiàn)有UVM中實現(xiàn)數(shù)據(jù)流激勵的裝置的結(jié)構(gòu)組成示意圖;
圖2為本發(fā)明配置寄存器的方法的流程圖;
圖3為本發(fā)明配置寄存器的裝置的結(jié)構(gòu)組成示意圖;
圖4為本發(fā)明實施例配置寄存器的裝置的結(jié)構(gòu)組成示意圖。
具體實施方式
為了便于本領(lǐng)域技術(shù)人員的理解,下面結(jié)合附圖對本發(fā)明作進一步的描 述,并不能用來限制本發(fā)明的保護范圍。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的各種方式可以相互組合。
參見圖2,本發(fā)明提出了一種配置寄存器的方法,預(yù)先設(shè)置寄存器和地址之間的對應(yīng)關(guān)系。
其中,對應(yīng)關(guān)系中的寄存器為DUT中的寄存器。
寄存器可以采用寄存器的標(biāo)識來表示,例如,寄存器的名稱等。
該方法包括:
步驟200、生成隨機數(shù),根據(jù)對應(yīng)關(guān)系和生成的隨機數(shù)生成對寄存器的寫控制指令。
本步驟中,寫控制指令中包含有要進行寫操作的寄存器及其對應(yīng)的地址、生成的隨機數(shù)。
本步驟中,可以在數(shù)據(jù)流激勵的過程中生成隨機數(shù)。
本步驟中,可以根據(jù)實際需要多次生成雖極少數(shù)。
本步驟中,可以采用隨機數(shù)生成函數(shù)來生成隨機數(shù),具體實現(xiàn)屬于本領(lǐng)域技術(shù)人員的公知技術(shù),并不用于限定本發(fā)明的保護范圍,這里不再贅述。
步驟201、根據(jù)寫控制指令將生成的隨機數(shù)寫入寄存器中。
該方法還包括:
根據(jù)對應(yīng)關(guān)系生成對寄存器的讀控制指令;根據(jù)讀控制指令讀取寄存器。
通過本發(fā)明的方案,根據(jù)生成的寫控制指令將生成的隨機數(shù)寫入寄存器中,保證了寫入寄存器的值的隨機變化。
本發(fā)明的方法中,可以將配置寄存器的方法和實現(xiàn)數(shù)據(jù)流激勵的方法封裝到頂層平臺文件中,在case類中實例化頂層平臺文件。
其中,可以在整個驗證平臺的基礎(chǔ)上派生出case類。
參見圖3,本發(fā)明還提出了一種配置寄存器的裝置,至少包括:
設(shè)置模塊,用于預(yù)先設(shè)置寄存器和地址之間的對應(yīng)關(guān)系;
生成模塊,用于生成隨機數(shù),根據(jù)對應(yīng)關(guān)系和生成的隨機數(shù)生成對寄存器的寫控制指令;
控制模塊,用于根據(jù)寫控制指令將生成的隨機數(shù)寫入寄存器中。
本發(fā)明的裝置中,生成模塊還用于:
根據(jù)對應(yīng)關(guān)系生成對寄存器的讀控制指令;
控制模塊還用于:
根據(jù)讀控制指令讀取寄存器。
其中,配置寄存器的裝置和實現(xiàn)數(shù)據(jù)流激勵的裝置封裝到頂層平臺文件中,并在case類中實例化頂層平臺文件。
下面通過具體實施例詳細(xì)說明本發(fā)明的方法。
圖4為配置寄存器的裝置的結(jié)構(gòu)組成示意圖。如圖4所示,配置寄存器的方法包括:
寄存器模型(Reg_model)模塊中預(yù)先設(shè)置有寄存器和地址之間的對應(yīng)關(guān)系。
第二sequence模塊生成隨機數(shù),根據(jù)對應(yīng)關(guān)系和生成的隨機數(shù)生成對寄存器的寫控制指令,將生成的寫控制指令發(fā)送給第一適應(yīng)(adapter)模塊;第一adapter模塊將寫控制指令轉(zhuǎn)換成第二sequencer模塊能夠識別的格式;第二sequencer模塊將轉(zhuǎn)換后的寫控制指令發(fā)送給第二driver模塊;第二driver模塊根據(jù)轉(zhuǎn)換后的寫控制指令控制DUT將生成的隨機數(shù)寫入寄存器中。
第二sequence模塊根據(jù)對應(yīng)關(guān)系生成對寄存器的讀控制指令,將生成的讀控制指令發(fā)送給第一adapter模塊;第一adapter模塊將讀控制指令轉(zhuǎn)換成第二sequencer模塊能夠識別的格式;第二sequencer模塊將轉(zhuǎn)換后的讀控制指令發(fā)送給第二driver模塊;第二driver模塊根據(jù)轉(zhuǎn)換后的讀控制指令控制DUT讀取寄存器;第三monitor模塊檢測DUT讀取寄存器的輸出數(shù)據(jù);predictor模塊將輸出數(shù)據(jù)發(fā)送給第二adapter模塊;第二adapter模塊將輸出數(shù)據(jù)轉(zhuǎn)換成reg_model模塊或scoreboard模塊能夠識別的格式后發(fā)送給reg_model模塊或scoreboard模塊。
其中、第二sequencer模塊、第二driver模塊和第三monitor模塊模擬了APB總線的功能。
其中,可以采用派生自UVM中的sequence類的Virtual sequence類來實例化第二sequence模塊和第一sequence模塊。
其中,可以將配置寄存器的裝置中的所有模塊和實現(xiàn)數(shù)據(jù)流激勵的裝置中的所有模塊封裝到頂層平臺文件中,并在頂層平臺文件中實例化Virtual sequencer,采用在整個驗證平臺基礎(chǔ)上派生出來的case類中實例化頂層平臺文件。
其中,Virtual sequencer中同時實例化第一sequence類、第一sequencer類、第二sequence類、第二sequencer類來實現(xiàn)數(shù)據(jù)流激勵和寄存器配置的同步。
也可以通過腳本調(diào)用的形式來實現(xiàn)寄存器的配置。
其中,reg_model模塊可以直接派生UVM的庫文件中的uvm_reg_model類得到的reg_model類來實現(xiàn),第二sequence模塊可以直接派生UVM的庫文件中的uvm_sequence類得到的第二sequence類來實現(xiàn),第一adapter模塊可以直接派生UVM的庫文件中的uvm_adapter類得到的第一adapter類來實現(xiàn),第二sequencer模塊可以直接派生UVM的庫文件中的uvm_sequencer來得到的第二sequencer類來實現(xiàn),第二driver模塊可以直接派生UVM的庫文件中的uvm_driver類得到的第二driver類來實現(xiàn),第三monitor模塊可以直接派生UVM的庫文件中的uvm_monitor類得到的第三monitor類來實現(xiàn),predictor模塊可以直接派生UVM的庫文件中的uvm_predictor類得到的predictor類來實現(xiàn),第二adapter模塊可以直接派生UVM的庫文件中的uvm_adapter類得到的第二adapter類來實現(xiàn)。
需要說明的是,以上所述的實施例僅是為了便于本領(lǐng)域的技術(shù)人員理解而已,并不用于限制本發(fā)明的保護范圍,在不脫離本發(fā)明的發(fā)明構(gòu)思的前提下,本領(lǐng)域技術(shù)人員對本發(fā)明所做出的任何顯而易見的替換和改進等均在本發(fā)明的保護范圍之內(nèi)。