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对代码的语法要求更严格。
原文:https://www.cnblogs.com/damian-gong/p/13595757.html