Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System verilog NBA分配$urandom_System Verilog - Fatal编程技术网

System verilog NBA分配$urandom

System verilog NBA分配$urandom,system-verilog,System Verilog,$urandom可以在for循环中分配给未打包的变量数组吗 module tb(); logic clk [2]; initial clk[0] = 0; always clk[0] = #1ns !clk[0]; for (genvar i = 1; i < 2; i++) assign #(1ns/2) clk[i] = clk[i-1]; int tmp [2] [8]; always @ (posedge clk[0]) begin forea

$urandom可以在for循环中分配给未打包的变量数组吗

module tb();

logic clk [2];
initial clk[0] = 0;
always clk[0] = #1ns !clk[0];

for (genvar i = 1; i < 2; i++)
        assign #(1ns/2) clk[i] = clk[i-1];

int tmp [2] [8];
always @ (posedge clk[0]) begin
        foreach (tmp[0][i]) begin
                /*int m;
                m = $urandom();  // SECTION 1 - using this code works (commenting out SECTION 2)
                tmp[0][i] <= m;*/
                tmp[0][i] <= $urandom(); // SECTION 2
        end
        #1ns;
        foreach (tmp[0][i]) begin
                $display("%1d", tmp[0][i]);
        end
        $finish();
end

for (genvar i = 1; i < 2; i++) begin
        always_ff @ (posedge clk[i]) begin
                tmp[i] <= tmp[i-1]; // SECTION 3 (just removing this works too)
        end
end

endmodule
有人能确认这个代码是否合法吗

我已经和Cadence谈过了,他们告诉我: 研发部的回应

这种在非阻塞分配中调用$URADOM的使用模型是错误的。
系统Verilog的调度语义规定,RHS在“非活动区域”中计算和采样一次,然后在“NBA区域”中同时分配foreach的所有元素

在过程循环中调用
$urandom
与多次连续调用
$urandom
没有区别。您的代码在几个工具中提供了所需的结果,包括edaplayder.com上的Cadence。也许你没有表现出来是你问题的一部分。表现出一种

模块顶部;
int tmp[2][8];
比特时钟;
初始开始
#1时钟=1;
#1$display(“%p”,
tmp[0]);
结束
始终@(posedge clk)开始
foreach(tmp[,i])开始

tmp[0][i]'系统Verilog的调度语义规定RHS在“非活动区域”中计算和采样一次'。这是真的吗?我认为RHS将在包含NBA的线路执行的任何区域(通常是活动区域)进行采样。我不知道他们在哪里提出了这一引用。我有一个小测试用例,显示了我认为Cadence工具中的一个bug。它以$urandom的NBA分配开始。他们给我们的回答是,NBA分配$urandom是错误的。我只是想弄清楚他们是否正确。今天晚些时候我将发布测试用例。
-2147414528
-2147414528
-2147414528
-2147414528
-2147414528
-2147414528
-2147414528
-2147414528
module top;
  int tmp [2] [8];
  bit clk;

  initial begin
    #1 clk=1;

    #1 $display("%p",
                tmp[0]);
  end

always @ (posedge clk) begin
    foreach (tmp[,i]) begin
        tmp[0][i] <= $urandom();
    end
end

endmodule