xrun 编译错误:ICDPAV

xrun遇到一个如下的编译错误

xmelab: *E,ICDPAV  (......) Illegal combination of driver and procedural assignment to variable dmp_oob_aout detected (output clockvar found in clocking block .....)

assign  signal_1  = signal_2;

 

代码的示例如下:

interface xyz (input logic clock);

    logic    signal_1;

    ......

    clocking master_cb @(posedge clock);

        output    signal_1;

        .....

    endclocking: master_cb

 

    clocking slave_cb @(posedge clock);

        input    signal_1;

        .....

    endclocking: slave_cb

 

    clocking  monitor_cb @(posedge clock);

         input   signal_1;

         .....

     endclocking: monitor_cb

 

     modport   slave_mp  ( input   signal_1 ...... );

     modport   master_mp (output   signal_1 ......);

endinterface: xyz

 

在interface的clocking block中的output变量(logic)一般只能用过程语句赋值(initial/always/for),如果使用连续赋值(assign)的话,就会报这个error

xrun会检查这个ICDPAV ,而ncsim不会检查。

用-warn_multiple_drive这个选项可以将该error降格为warning。

而且vcs也不会检查这个问题,这样的代码用vcs编译是没有问题的。

 

另外,如果在interface中申明变量用wire而不是logic,也不会报这个error。

这时候我的理解是变量被理解为net,这时候信号强度会起作用?

 

题外话,这是很少见的用vcs编译没有问题,xrun却有问题的,很多代码都是xrun编译OK,用vcs编译就fail

总体来说,vcs对代码的语法要求更严格。

posted @ 2020-09-01 13:48  颀成  阅读(2240)  评论(0)    收藏  举报