gpt4 book ai didi

系统 verilog 中数组的约束

转载 作者:行者123 更新时间:2023-12-05 00:26:35 25 4
gpt4 key购买 nike

使用最初生成的随机元素来约束随机数组的连续元素是否有效。
例如:我想生成一组 10 个 addr、size 对来模拟典型的内存分配例程并具有如下类:

class abc;
rand bit[5:0] size[8];
rand bit[5:0] addr[8];

constraint mem_unique{
foreach(size[i]) begin
solve size[i] before addr[i];
size[i] inside {[6'h2:6'h10]};
if(i>0)
addr[i] > addr[i-1]+size[i-1];
end
}
endclass:abc

最佳答案

您的示例中的一些额外代码行会显示它是否有效。这是我的工作:

module top;
class abc;
rand bit[5:0] size[8];
rand bit[6:0] addr[8];

constraint mem_unique
{
foreach(size[i]) {
size[i] inside {[6'h2:6'h10]};
if(i>0) // concatenate 1'b0 to catch overflow
{1'b0,addr[i]} > addr[i-1]+size[i-1];
}
}
endclass : abc
abc c=new();
initial repeat(5) begin
$display();
assert(c.randomize());
foreach(c.addr[i]) $displayh(c.addr[i],, c.size[i]);
end
endmodule top

foreach 约束被展开,就像合成工具一样。所以你只剩下看起来像这样的东西:
 size[0] inside {[6'h2:6'h10]};
size[1] inside {[6'h2:6'h10]};
{1'b0,addr[1]} > addr[0]+size[0];
size[2] inside {[6'h2:6'h10]};
{1'b0,addr[2]} > addr[1]+size[1];
...

size[7] inside {[6'h2:6'h10]};
{1'b0,addr[7]} > addr[6]+size[6];

关于系统 verilog 中数组的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21977572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com