constraints - SystemVerilog 约束:约束之前已经写入的读地址
问题描述
我想编写一个约束以确保r_addr
仅在使用与以前相同的地址时才允许使用w_addr
,但以下约束不起作用。你有什么建议吗?
class try;
rand int w_addr;
rand int r_addr;
int ua[$];
int aa[int];
constraint unique_addr_c{
aa.size() == 0 || aa.exists(r_addr);
}
endclass
module test;
try a;
initial begin
a=new;
repeat(20) begin
if(a.randomize);
$display("add=%0d", a.w_addr);
$display("add=%0d", a.r_addr);
a.ua.push_back(a.w_addr);
a.aa[a.w_addr] = 1;
end
end
endmodule
解决方案
您想使用inside
运算符。
class try;
rand bit [31:0] w_addr;
rand bit [31:0] r_addr;
bit [31:0] ua[$];
constraint unique_addr_c{
ua.size() >0 -> r_addr inside {ua};
}
function void post_randomize();
ua.push_back(w_addr);
endfunction
endclass
module test;
try a;
initial begin
a=new;
repeat(50) begin
if (!a.randomize) $error("randomization failed");
$display("wadd=%0d", a.w_addr);
$display("radd=%0d", a.r_addr);
end
end
endmodule
注意:您应该使用无符号类型的地址。您对 randomize 的检查应该会产生错误。
推荐阅读
- angular - Angular - 覆盖/模拟方法从 HTTP 获取、发布、放置、删除以进行测试
- mysql - 在mysql中使用self-join有什么好处?
- ldap - 什么是 LDAP 用例?它还有用吗?
- javascript - 如何使用 jquery 或 javascript 从选择中隐藏选项
- drupal - Drupal 7根据内容类型创建自定义模板不起作用
- corda - 当 Corda 全面实施 SGX 时,是否会解决以下潜在的数据隐私和机密性泄漏?
- c# - 模拟使用索引的属性
- wso2-am - 找不到 wso2am-2.1.0 swagger-UI 源代码
- c# - 轴在点上绘制并防止在 DataVisualization.Charting 中选择
- sql-server - 如何从sql中的字符串中获取特定字母