SystemVerilog:$urandom条件表达式内的调用

SystemVerilog:$urandom条件表达式内的调用,verilog,system-verilog,Verilog,System Verilog,所以我想在一个向量中设置一些位,当一个事件被触发时,这些位具有某种硬连线的概率,所以我这样做了: always @(some_event) begin err_byte[0] = ($urandom()&65535 < 85) ? 1'b1 : 1'b0; err_byte[1] = ($urandom()&65535 < 85) ? 1'b1 : 1'b0; //....etc rndv = $urandom()&65535; err_

所以我想在一个向量中设置一些位,当一个事件被触发时,这些位具有某种硬连线的概率,所以我这样做了:

always @(some_event) begin
  err_byte[0] = ($urandom()&65535 < 85) ? 1'b1 : 1'b0;  
  err_byte[1] = ($urandom()&65535 < 85) ? 1'b1 : 1'b0;  
  //....etc
rndv = $urandom()&65535;
err_byte[0] = (rndv < 85) ? 1'b1 : 1'b0;
rndv = $urandom()&65535;
err_byte[1] = (rndv < 85) ? 1'b1 : 1'b0;
//etc...
始终@(某些事件)开始
错误字节[0]=($urandom()&65535<85)?1'b1:1'b0;
错误字节[1]=($urandom()&65535<85)?1'b1:1'b0;
//……等等
我的err_字节的值始终为8'h00,即使该代码被触发数千次(这应该足以将至少一位设置为1)。当我声明一个整数rndv并执行以下操作时:

always @(some_event) begin
  err_byte[0] = ($urandom()&65535 < 85) ? 1'b1 : 1'b0;  
  err_byte[1] = ($urandom()&65535 < 85) ? 1'b1 : 1'b0;  
  //....etc
rndv = $urandom()&65535;
err_byte[0] = (rndv < 85) ? 1'b1 : 1'b0;
rndv = $urandom()&65535;
err_byte[1] = (rndv < 85) ? 1'b1 : 1'b0;
//etc...
rndv=$uradom()&65535;
错误字节[0]=(rndv<85)?1'b1:1'b0;
rndv=$Uradom()&65535;
错误字节[1]=(rndv<85)?1'b1:1'b0;
//等等。。。

然后它突然起作用了。现在的问题是:这里到底发生了什么?是否不允许在条件表达式中调用系统任务?

运算符优先级<代码>运算符优先级<代码>