芯片家 • 来自相关话题

2月前

IC验证--Systemverilog之assetionVCS/Verdi实战

    最近top level的同事提了验证需求,让我在RTL中加assert coverage,开始懵逼,后来查阅一些资料和代码,很快上手了。 这里用一个小例子记录一下,免得日后忘记了。先上代码://tb_top.sv的内容:module ...查看全部

    最近top level的同事提了验证需求,让我在RTL中加assert coverage,开始懵逼,后来查阅一些资料和代码,很快上手了。 这里用一个小例子记录一下,免得日后忘记了。先上代码:
//tb_top.sv的内容:
module tb_top();
reg clk, rst;
wire [3:0] out;
always #5 clk=~clk;
initial
begin
rst=1'b0;
clk=1'b0;
#30;
rst=1'b1;
#150;
$finish;
end
always@(out)
$display('counter is %d',out);
counter(.reset(rst),
.clk(clk),
.q(out));
endmodule
module counter(reset,clk,q);
input reset,clk;
output[3:0] q;
reg[3:0]q;
reg[3:0]count;
always@(posedge clk)
if(!reset) q<=4'b0;
else if(q==4'b1111)
q<=4'b0;
else
q<=q+1;
property p1;
@ (posedge clk) (q[0]|-> ##5 q[3]);
endproperty
a1: assert property(p1)
$display('succeed! time=%t',$time);
else
$display('failure! time=%t',$time);
;
c1: cover property(p1);
endmodule
这里是编译仿真以及查看覆盖率的命令们: r> vcs -sverilog -R -fsdb -ucli -do run_vcs.tcl -cm line+branch+assert tb_top.sv
urg -dir simv.vdb
verdi -workMode hardwareDebug -ssf counter.fsdb -f test_coverage.f
dve -cov -dir ./simv.vdb
verdi -cov -covdir ./simv.vdb
log 结果是:
ucli% run
counter is 0
counter is 1
counter is 2
counter is 3
counter is 4
counter is 5
counter is 6
counter is 7
'tb_top.sv', 41: tb_top.counter.a1: started at 45s failed at 95s
Offending 'q[3]'
failure! time= 95
counter is 8
counter is 9
succeed! time= 115
counter is 10
counter is 11
succeed! time= 135
counter is 12
counter is 13
succeed! time= 155
counter is 14
counter is 15
succeed! time= 175
$finish called from file 'tb_top.sv', line 14.
$finish at simulation time 180
'tb_top.sv', 41: tb_top.counter.a1: started at 165s notfinished
'tb_top.sv', 41: tb_top.counter.a1: started at 145s not finished
'tb_top.sv', 46: tb_top.counter.c1: started at 165s not finished
'tb_top.sv', 46: tb_top.counter.c1: started at 145s not finished
'tb_top.sv', 46: tb_top.counter.c1, 18 attempts, 4 match
---------------------------------------------------------------------------
  VCS Coverage Metrics: during simulation line, branch was monitored
先看波形,可以看到和log对应,95ns处fail, 115,135,155,175ns处成功触发了assertion的内容。后面天蓝色线表示145/165ns处开始但是还没有结束的监测。

亮.jpg

run_vcs.tcl 的内容是:
config timebase 1ns
scope tb_top
run 1ns
call \$fsdbDumpfile(\'counter.fsdb\');
call \$fsdbDumpvars(0,tb_top);
call \$fsdbDumpSVA;
# Run to completion
run
quit
注意,这里 “call \$fsdbDumpSVA;”表示控制dump SVA的东西到fsdb文件去,如果没有这一句,波形文件counter.fsdb里面就不会有a1/c1 .
所有的控制fsdb dump方式都有两种,这个也不例外,你还可以在TB顶层加如下语句去控制dump SVA的东西:
initial begin
$fsdbDumpSVA;
end
  但是个人不倾向于使用这种方式,因为这样就等于代码过多和EDA工具捆在一起了,看起来不干净,不易读。
  另外再看看coverage 报告:(dve -cov -dir ./simv.vdb),可以看到名字为c1的coverage有被cover到,说明这种序列在此次test中被cover了四次。特别要说明的是,通常assert property() 和 cover property()会成对出现,表示我有这样的信号时序行为要求,如果违规assert就要报错,同时还要求我这种时序行为一定要cover到,没有cover到表示我这种时序行为没有测到,coverage report里会显示没有cover到。所以 cover property()也是要写的,否则assert没有报错并不代表说这种“时序行为”测到了,可能根本没有触发这个序列的第一个条件。

亮2.jpg

  例如我把上面代码中counter更新的逻辑删除,那么counter reset成0 一直保持,那么assetion根本不会报错,因为根本没有触发p1里面的q[0]==1, 下面是log(同时log里能看出来c1根本没有cover到:18 attempts, 0 match):
ucli% run
counter is 0
$finish called from file 'tb_top.sv', line 14.
$finish at simulation time 180
'tb_top.sv', 42: tb_top.counter.c1, 18 attempts, 0 match

菜菜 • 来自相关话题

3月前

成都--模拟IC设计工程师、模拟版图工程师

微信:861112547成都--模拟ic设计工程师,模拟版图工程师,欢迎自荐和推荐,欢迎自荐和推荐。

微信:861112547




成都--模拟ic设计工程师,模拟版图工程师,欢迎自荐和推荐,欢迎自荐和推荐。

菜菜 • 来自相关话题

3月前

西安、北京--数字IC设计工程师、数字ic验证工程师、RFIC、FPGA、

西安、北京、数字IC设计工程师、数字IC验证工程师、RFIC、FPGA,欢迎自荐和推荐微信:861112547

西安、北京、数字IC设计工程师、数字IC验证工程师、RFIC、FPGA,欢迎自荐和推荐


微信:861112547

admin • 来自相关话题

3月前

高通内推职位--包含应届生

高通招聘设计、验证、后端、ATE等其它岗位,有内推需求的可以联系我们,微信号chipist1

高通招聘设计、验证、后端、ATE等其它岗位,有内推需求的可以联系我们,微信号chipist1

芯片家 • 来自相关话题

3月前

Soc芯片debug 经验<3>

在介绍bug之前,继续讲解一下在在wave中debug中经常用到的小技巧。1,标亮Wave中的信号选中Wave中的信号(左键点击一下),按下字母c,打开“Change Color”对话框。选择想要的颜色。2,Bus Operations   ...查看全部

在介绍bug之前,继续讲解一下在在wave中debug中经常用到的小技巧。

1,标亮Wave中的信号

选中Wave中的信号(左键点击一下),按下字母c,打开“Change Color”对话框。选择想要的颜色。

2,Bus Operations

   右键点击信号,选择Bus Operations,可以看到很多Bus操作。这里着重讲解一下Create Bus 操作。例,在dut中定义了一个信号addr [39:4],该信号在wave中只显示位宽[39:4],该地址只是case中写地址的一部分,我们要想确定该地址addr[39:4]是不是对应着case中的写地址,我们可以打开Create Bus对话框,使用Add Logic Low按钮,补全低四位。这样在Wave中的信号列表中显示的数据就是完整的case 中的地址。

3,Waveform->Signal value Radix

Wave中拉出来的信号默认显示是16进制,但dut中有时候会使用十进制的数据10’d等。使用Signal value Radix 可以改变该信号显示的进制。

接下来开始讲解Soc 验证中遇到的问题。

       1. 在soc系统中,集成了很多IP,有时候需要验证一个IP发送出去数据包的datapath是否正确。一般情况下,使用的是该IP的UVC去发送数据包,编译的是该IP的一个model,里面只有接口,没有实际的功能,把该IP的model 输入输出接口,连接到该IP UVC的interface上,这样如果启动验证环境,IP UVC的接口上有了数据包,就相当于该IP 发送了数据包。该IP数据包的验证通路要想成功的到达最终的地方,在发送该数据包之前,需要配置很多关键的寄存器。如果没有配置该寄存器,该数据可能在中途就会丢失。导致该case不能成功到达。

举例:A->B->C数据通路,ABC之间的数据传递使用的协议接口,A 的输出连接到B的输入,并且A的数据成功的传递到B的输入上,但是在B内部,经过复杂的逻辑之后,B没有了输出。我们在波形中一直去追踪B的输出,可能最终会发现如下代码,信号名字都是随手写的。

If (cntl)

   Valid<=iwdata[3];

我们可能会发现cntl没有起来,这个说明我们要配置一个寄存器的第3位,把第三位置为1,具体是哪一个寄存器,我们可以继续追踪cntl。我们可能会发现如下代码。

case (x_cntl_x)

    404: cntl=1;

    403:cntl_a=1;

default: cntl_b=1;

endcase

          这段代码,我们可以看到,寄存器的地址偏移是404,关键词是x_cntl_x。这个时候,我们就可以去寄存器地址文件表(一般情况下,所有的寄存器地址定义的define都在一个文件里)里去匹配关键词x_cntl_x,去找到后缀是404的寄存器。然后在自己的case里面,先去配置该寄存器,把该寄存器的域3,配置成1。我们也可以去看看对该寄存器的域的说明,去UVM寄存器模型里面搜索该寄存器,会找到该寄存器的所有域的说明以及总的位宽。假设该寄存器的位宽是32,我们可以通过读出该寄存器的值,然后把值和32‘h0008相或,把或之后的值写入该寄存器即可。代码如下。

         read_data=read_cntl_reg(xx_cntl_xx);

          read_data=read_data|32’b0008;

          write_cntl_reg(xx_cntl_xx, read_data);

   2. 在编写数据包的时候,数据包是要连接到IP uvc 的interface上的,这些interface上的接口都是协议接口,协议接口文件里面定义了很多assertion,也有部分assertion是单独编写的,单独例化的。这些assertion可能对于写数据的一些属性有固定要求或者有约束范围,如果我们没有按照要求给激励,在仿真环节会出现违背assertion 的error。

  例如错误现象:UVM_ERROR: $datapath/src/verif/assertion.sv #16.

       A==0

Hierarchy.a.b.c.A

我们通过Hierarchy.a.b.c.A 在波形Wave中拉出来信号A,发现他是0。然后我们打开文件assertion.sv,找到了assertion的第16行对A进行了assertion约束。具体写法略。

我们去追踪该信号,可能会发现如下例化代码。

.A(write_valid&&write_AWSIZE!=3)

我们就可以发现我们在写协议包属性的时候,把AWSIZE写成3了。最后我们要去查看该IP对应的技术文档,去确定技术文档里面,这个接口信号是不是标注了不能等于3,如果找不到,要去找对应的IP 部门去确认修改。

3. 在Soc系统中,有时候不止使用了一种协议,可能是多个协议。这里面就有了协议的转换。例如A->B->C这么一段datapath,A的输入接口是AXI协议,A的输出是其他类型协议,这样在A内部就有一个协议转换。如果发现A的输出valid没有起来,那我们一直追下去,可能会发现如下代码。

 Always @ (posedge clk)

      if(axi_valid)

         valid<=1;

我们把axi_valid和clk在波形中拉出来,发现axi_valid和clk都有,但是axi_valid翻转的脉冲很短,这个clk相对较慢,在clk的上升沿,axi_valid完美的错位过去了。这个现象是由于产生axi_valid的时钟是一个比较快的时钟,那这个axi_valid如果出现在clk上升沿之内,valid可能无法正确获得1。这个需要把问题发出来让其他部门的人一起来看看。

admin • 来自相关话题

3月前

AMD最新职位招聘(七月)

AMD七月最新内推职位,有需要联系微信号chipist1。LocationJob TitleShanghai1.SMTS/MTS/Sr.   Silicon Design Engineer - PD2.MTS Silicon   Desig ...查看全部

AMD七月最新内推职位,有需要联系微信号chipist1。


Location

Job Title

Shanghai

1.SMTS/MTS/Sr.   Silicon Design Engineer - PD

2.MTS Silicon   Design Engineering - Design Verification

3.MTS Silicon   Design Engineering - Design Verification

4.PMTS/SMTS/MTS   Software Engineer - Machine Deep learning

1. SMTS/MTS   Silicon Design Engineering – Physical Design

2. Sr./MTS Power   Management Engineer Urgent

3.   Senior/MTS/SMTS Design Verification Engineer Urgent

4. Senior   Silicon Design Engineer

5. Digital Logic   IP Systems Engineer Urgent

6. SMTS/ MTS GFX   FE tile owner

7. Frontend   Engineer - Graphics Urgent

8. MTS/SMTS   Design Verification Engineer (Low power) Urgent

9. GPU Core   Verification Engineer

10. Sr./MTS/SMTS   Silicon Design Engineer (Graphic Performance Verification and Analysis) Urgent

11. Sr./MTS ASIC   simulation analysis/software engineer (Graphics Performance) Urgent

12. Sr/MTS/SMTS   Silicon Engineer (Graphics Performance Analysis and Architecture Modeling)

13. Sr./MTS/   SMTS Validation Engineer – Signal Urgent

14. Sr.   Validation Engineer – Automation

15. MTS GFX   DV/infrastructure Engineer

16. SMTS Silicon   Design Engineer Urgent

17. Intern   - GPU infrastructure Urgent

18. Intern -   Graphics/AI Performance Analysis Urgent

1. SMTS SoC Diag   Lead (Diagnostics Team)

2. Sr./MTS IP Design   Engineer (FCH Team)

3. PMTS/Fellow   USB IP Arichtect (FCH Team) Urgent

4. ISP   Diagnostics Firmware Engineer (Diagnostics Team)

5. Sr. Front-End   Intergreation Engineer (CIP Team)

6. Sr./ MTS IP   DV Engineer (CIP Team)

7. Sr./ MTS   Firmware Engineer - I/O related ((Diagnostics Team)

8. Sr./ MTS   Firmware Engineer - Power Management ((Diagnostics Team)

1. Sr/MTS OpenGL   Compiler Software Engineer

2. SMTS/MTS IPSE   Engineer

3. MTS Software   Engineer - KMD & Display

4. MTS Power   Performance Lead Urgent

5. SMTS Silicon   Design Engineer(memory信号完整性 Urgent

6. MTS Silicon   Design Engineer(memory信号完整性) Urgent

7. Sr/MTS DFT   Engineer

8. SMTS DFT   Engineer

9. Sr Manager,   IPSE/RTG Platform Debug

10. Graphics   Validation Engineer

1. SMTS Lead   System Engineer Urgent

2. Manager   Hardware Development (Board Design) Urgent

3. MTS/ Sr   Hardware Development Engineer (Board design) Urgent

4. Validation   Engineer

5. MTS/Sr. Debug   Engineer (BIOS/Firmware)

6. Sr/ MTS BIOS   Engineer

7. Product   Development Engineer( Power& Performance)

8. Graphic   Validation Intern

9. Software   Intern

10. Design   Verification Intern

11. Hardware   Development Intern

1. PMTS Product   Development Engineer

2.  Layout   Design Engineer 2

3. ASIC Layout   Design Engineer 2

4. MTS ASIC   Layout Design Engineer

5. SMTS Silicon   Design Engineer

6.System   Software Design Engineer

1. Linux Kernel   Software Engineer for APU – NCG/Sr. Eng/MTS Eng/SMTS

2. NCG/MTS   Software Engineer – Virtualization

3. Camera Driver   MTS Software Engineer - Windows

4.   ADAS/Automotive MTS Software Engineer – Linux BSP/Virtualization

5. ASIC IC   Design SMTS Engineer of ISP

6. Embedded   Software Test Engineer

7. Linux Kernel   MTS Engineer of Machine Learning/GPU Computing

8. Linux DevOps   Engineer

1. Solution   Architect

Beijing

1. SoC MTS   Engineer- Verification

1.SMTS/MTS/Sr.   Silicon Design Engineer - PD

2.MTS Silicon   Design Engineering - Design Verification

3.MTS Silicon   Design Engineering - Design Verification

4.PMTS/SMTS/MTS   Software Engineer - Machine Deep learning

1. Sr. Silicon   Design-Physical Design

Hefei

1.  MTS   Customer Quality Engineer Urgent

1. MTS Debug   Engineer

Shenzhen

1. Solution   Architect

Suzhou

1. Software   Engineer (Java&C++)

2. Product Yield   Engineer

3. ATE Test

4. MTS Packaging   Engineer-Bumping

5. MTS   Manufacturing Quality Engineer

6. Director Test   Manufacturing Engineering

7. System Level   Testing Engineer

Chongqing

1. MTS Customer   Quality Engineer Urgent

Taipei

1. Business   Development Manager

Hsinchu

1. Packaging   Engineer

2. Director Supply   Chain

3. Proudction   planner & controler

4. Director   Product Development Engineer

5. Supplier   Quality Engineer

6. Software   Development Engineer - Display Solutions

7. Supply Chain   Specialist

Japan

1. Specialist   Commercial Marketing Server

Hongkong

1. Supply Chain   Specialist

zcl • 来自相关话题

3月前

广发英雄贴

风里雨里,我在这里等你,模拟ic设计工程师、ic版图设计工程师一枚,欢迎来唠叨!base在杭州,联系方式18559667360

风里雨里,我在这里等你,模拟ic设计工程师、ic版图设计工程师一枚,欢迎来唠叨!base在杭州,联系方式18559667360