code review的注意事项:
1: 时钟边沿延迟驱动的写法
如下两种延迟驱动的写法,这两种写法有什么区别呢?
first type:使用上升沿后10ns时候的 c 值和 d 值计算 a 的值
second type: 使用上升沿时 c 值和 d 值计算 a 的值,并在10ns延迟后把计算的值赋给a;
推荐使用第二种写法
// first type
@(posedge clk);
#10ns;
a <= c + d;
// second type
@(posedge clk);
a <= #10ns c + d ;
2:删除sim文件夹下core.*的文件
core.*文件对于仿真结果的没有任何影响
3:apb的b2b的简洁写法
while(1) begin
@(posedge pclk);
if(req != null) begin
if(pwrite == 1'b0)
// get read data
// clone req to rsp
seq_item_port.item_done(rsp);
end
seq_item_port.try_next_item(req);
if(req != null) begin
// drv apb command
@(posedge pclk);
penable <= 1'b1;
end else begin
bus_idle();
end
end
4:cc_vcs.hier和ast_vcs.hier的作用
-cm_hier : 用于指定代码覆盖率收集层次
例如:
-cm_hier +/-tree top.dut 0/1/2/n
其中,"+"表示收集该层次的覆盖率,"-"表示不收集该层次的覆盖率
"0" :表示收集当前层次及其所有子层次的覆盖率
"1" :只收集当前层次的覆盖率
"2" :收集当前层次以及下一层次的覆盖率
"n" :收集当前层以及下n层的代码覆盖率
-assert hier +/-tree top.sva 0/1/2
指定收集特定层次的断言覆盖率
5:vsync_isp的断言改进写法
在仿真过程中,vsync_isp信号会一致与vsync_s保持一致
// 修改之前的写法
//这种写法每一个上升沿都会检查这个断言,无疑会拖慢仿真速度
property vsync_isp_check();
@(posedge sclk)
(vsync_isp == vsync_s);
endproperty
// 修改之后的写法
property vsync_isp_check();
@(posedge sclk)
($rose(vsync_s) || $fell(vsync_s) ) |-> (vsync_isp == vsync_s)
endproperty
6:怎样从命令行拿sequence的名字,以发起不同的test case
使用命令行命令:+uvm_set_default_sequence