1、将一个512bit的数据变量赋值给一个64个元素,每个元素8位宽的动态数组
bit [511:0] pte_data
logic [7:0] dta[];
dta= new[64];
for(int i=0 ;i<64;i++)begin
dta[i] = pte_data[8*i+7:8*i];//语法错误报不正确切分赋值
end
应该修改为 dta[i] = pte_data[8*i +:8];data[8*i +: 8]
是一种 Verilog SystemVerilog 中的部分赋值语法,它表示从数据变量 data
的第 8*i
位开始,取连续的 8 位数据。其中,冒号 ":" 左边的表达式为起始位,右边的表达式为数据位数。
2、验证环境中写入包内的class,在其他地方使用时需要先import该包才能,而非只是添加到filelist中就行
3、2'h0和2‘b0是相等的:{34'h80_0260,2'h0}不等于36'h8002_6000 !
4、验证环境搭建过程中若在main_phase/run_phase中使用了foever_begin之类语句,当某些条件未能满足时,在仿真0时刻一直陷入无限循环会造成,即使未举手出现挂死现象。即使不举手必须时仿真不为0时候,即仿真开始运作之后才能退出,在0时刻陷入死循环则不可退出。
5、在env模块build_phase中添加set_report_max_quit_count(100)函数可以设置出现
6、在UVM—TOP环境中对某一个逻辑取反不能在直接
initial_begin
Forever begin
Reset_n = !reset
End
End
可以声明wire变量然后直接通过assign语句进行连接;
该语句会导致环境陷入死循环,其原因为中间没有添加延时,导致0时刻无限死循环,同理在UVM环境中任何一个模块包含参考模型其无限循环语句forever或者while(1)内需要延时语句,例如wait、get等否则会导致0时刻无限死循环;
7、$urandom_range(0,satp_q.size)有可能会取satp.size的最大值(例如5),因为satp队列是从0开始因此5为为空,更改为$urandom_range(0,satp_q.size-1)