在項(xiàng)目上使用uvm代碼自動(dòng)生成可以提高驗(yàn)證環(huán)境搭建的效率,你可以:
使用uvm代碼生成器創(chuàng)建基本的uvm驗(yàn)證環(huán)境框架,然后丟棄代碼生成器模板并擴(kuò)展和維護(hù)生成出來(lái)的代碼。盡管uvm代碼生成器僅在項(xiàng)目的初始階段使用,然后被丟棄,但仍然提高了驗(yàn)證的效率。
團(tuán)隊(duì)所有成員的驗(yàn)證環(huán)境結(jié)構(gòu)獲得了統(tǒng)一,方便了集成和檢視。
根據(jù)項(xiàng)目的特定需求,個(gè)性化地定制自己的uvm代碼生成器模板和腳本。
示例
要運(yùn)行uvm代碼生成器,至少需要三個(gè)template 文件:
clkndata.tpl Interface templatefile common.tpl Commontemplatefile pinlist Pinlistfile
定義 DUT的文件
mydut/mydut.sv SystemVerilog sourcefilefor the DUT
兩個(gè)腳本,一個(gè)用于運(yùn)行uvm代碼生成器,另一個(gè)用于運(yùn)行仿真(為了避免記住命令行及其參數(shù))。
gen Scripttorunthecodegenerator run Scripttorunthe simulator
下面是這個(gè)示例中使用的 DUT 文件:
mydut/mydut.sv
module mydut (input clk, input byte data); always @(posedge clk) $display("mydut data = %h", data); endmodule
Interface template file
我們需要的第一個(gè)模板文件是The first template file。此文件表征一個(gè) DUT的接口,指定一些變量名稱,諸如UVM transaction中的變量和 SystemVerilog 接口中的變量。
clkndata.tpl
agent_name= clkndata trans_item =data_tx trans_var = rand byte data; if_port= logic clk; if_port= byte data; if_clock= clk
其中變量的含義,見(jiàn)名知意。
agent_nameclkndata將用作生成的許多文件名前綴,例如clkndata_agent、clkndata_if、clkndata_pkg 和 clkndata_config。
實(shí)際上,每個(gè) DUT 接口都有一個(gè)這樣的template file,每個(gè)template file都包含唯一的agent名稱。
trans_itemdata_tx將用作類名,該類擴(kuò)展uvm_sequence_item以定義生成的agent中使用事務(wù)transaction,即從sequener發(fā)送到driver和通過(guò)monitor的analysis port發(fā)送的transaction。
trans_var “=”后面的rand byta data將包含在生成的transaction類中。注意行尾的“;”:這很重要,因?yàn)樗鼘⒈粡?fù)制到生成的代碼中。另外,如果希望變量隨機(jī)化,請(qǐng)記住包含 rand 關(guān)鍵字。通常會(huì)有多個(gè)trans_var行。
if_port“=”后面的logic clk;和if_port= bytedata;將包含在生成的 SystemVerilog interface中。同樣,請(qǐng)注意行尾的“;”。即使是最簡(jiǎn)單的例子,我們也需要一個(gè)時(shí)鐘和一個(gè)數(shù)據(jù)信號(hào)。最后,if_clock挑選出其中一個(gè)interface變量作為時(shí)鐘信號(hào)。作為if_clock指定的名稱必須是同一template文件中if_ports之一。
Common template file
我們需要的第二個(gè) template file是Common template file,必須命名為 common.tpl。uvm代碼生成器始終需要一個(gè)common.tpl 文件,該文件指定了一些常用設(shè)置。只有一個(gè)設(shè)置是強(qiáng)制的,即dut_top,有大量可選設(shè)置可讓你對(duì)生成的代碼進(jìn)行控制。許多設(shè)置具有合理的默認(rèn)值,因此你可以在開始時(shí)忽略這些設(shè)置。
common.tpl
dut_top= mydut
dut_top指定DUT top module的名稱,在本例中為 mydut。DUT 源文件必須放置在名為 ./dut 的目錄中,或者你可以使用common.tpl文件設(shè)置dut_source_path選擇其他目錄名稱,也可以在名為 files.f 的單個(gè)文件中手動(dòng)列出文件的位置。
Filename pinlist
第三個(gè)template文件是Pinlist file,它指定 DUT 的端口(在 DUT 的 SystemVerilog 代碼中指定)和 DUT 接口的變量(在Interface template file
中指定)之間的連接。
Pinlist file
!clkndata_if clkclk data data
Pinlist file分為多個(gè)部分,每個(gè) DUT 接口一個(gè)部分,每個(gè)部分以感嘆號(hào) “!” 開頭,后跟接口名稱,該名稱始終是agent名稱加上后綴_if。在這個(gè)示例中,只有一個(gè)agent clkndata,因此相應(yīng)的接口名稱為 clkndata_if。其余的每一行都包含 DUT top module的端口名稱,后跟相應(yīng) DUT 接口中的變量名稱。
也可以使用Pinlist file連接不屬于任何特定interface的 DUT 端口,例如:
! clock_port global_clock_var reset_port global_reset_var
運(yùn)行uvm代碼生成器
在提供了三個(gè)template文件(clkndata.tpl,common.tpl,pinlist)和DUT文件(mydut.sv)之后,我們現(xiàn)在可以為這個(gè)示例運(yùn)行uvm代碼生成器。我們將命令行放在單行腳本文件中:
perl ../easier_uvm_gen.pl clkndata.tpl
Common template file的名稱默認(rèn)為 common.tpl(但可以使用 -m 開關(guān)從命令行進(jìn)行設(shè)置。現(xiàn)在我們可以運(yùn)行uvm代碼生成器:
生成的結(jié)構(gòu)如下所示。弄清楚代碼生成器到底是做什么的最好方法是自己運(yùn)行它!
top_tb (module) ? top_th (module instance) ? clkndata_if (interface instance) mydut (module instance) top_config (class uvm_object) ? top_test (object, class uvm_test) ? top_env (uvm_env) ? clkndata_config (uvm_object) clkndata_agent (uvm_agent) ? clkndata_sequencer clkndata_driver (uvm_driver) clkndata_monitor (uvm_monitor) clkndata_coverage (uvm_subscriber) ? top_default_seq (created in run_phase, class uvm_sequence) ? clkndata_default_seq (uvm_sequence) ? data_tx (uvm_sequence_item)
?
審核編輯:湯梓紅
-
UVM
+關(guān)注
關(guān)注
0文章
182瀏覽量
19359 -
代碼
+關(guān)注
關(guān)注
30文章
4876瀏覽量
69956 -
生成器
+關(guān)注
關(guān)注
7文章
322瀏覽量
21533 -
代碼生成器
+關(guān)注
關(guān)注
0文章
25瀏覽量
9250 -
環(huán)境搭建
+關(guān)注
關(guān)注
0文章
54瀏覽量
9176
原文標(biāo)題:Easier UVM Code Generator Part 1: 入門
文章出處:【微信號(hào):芯片驗(yàn)證工程師,微信公眾號(hào):芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
基于STRAIGHT算法的個(gè)性化語(yǔ)音生成方法
利用LabVIEW代碼生成器簡(jiǎn)化應(yīng)用項(xiàng)目

STM32庫(kù)函數(shù)代碼自動(dòng)生成器V1.2
STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版
STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版
基于UVM的代碼生成器的開發(fā)設(shè)計(jì)

avr初始化代碼生成器中文版免費(fèi)下載

python生成器是什么
如何擴(kuò)展自定義功能塊,以及代碼生成器的用法
將使用代碼生成器生成的項(xiàng)目移植到與智能配置器一起使用的項(xiàng)目

Easier UVM Code Generator Part 1: 運(yùn)行仿真
將使用代碼生成器生成的項(xiàng)目移植到與智能配置器一起使用的項(xiàng)目

RL78的代碼生成器發(fā)布說(shuō)明

評(píng)論