system-verilog - 如何使随机重做直到得到我想要的数字?
问题描述
下面是随机重置的基本序列类:
class random_reset;
rand int rst_period;
constraint rst_range { rst_period inside {[1:100]}; }
task random_system_reset (
ref reg rst,
ref reg clk);
begin
rst = 1;
repeat (rst_period) @(posedge clk);
rst = 0;
end
endtask
endclass
但是,我测试至少需要 6 个时钟。无论如何要确保当我调用这个类时,会得到大于 6 的随机值吗?
解决方案
假设您想保持原来的约束,但在某些情况下,您需要强制将周期设置为 6 或更多,您可以使用randomize() with
:
random_reset rr = new();
initial rr.randomize() with { rst_period >= 6; };
对于此rr
对象,rst_period
将介于 6 到 100 之间。
请参阅 IEEE Std 1800-2017,第 18.7 节内嵌约束—randomize() with。
推荐阅读
- java - 如何使用 while 循环输出具有必要间距和缩进的“*”?
- php - 小数点后向上取整到最大值
- docker - Docker:TypeError:-=:'Retry'和'int'不支持的操作数类型
- mysql - 如何在 MySQL 中为每一行仅连接唯一列?
- data-science - 如何为以下数据集数据科学制作简单的维恩图
- javascript - 滚轮缩放反转
- math - 广告牌精灵绘图背后的数学是什么?(逆矩阵)
- bash - 用于查询 .txt 的 Bash 脚本
- amazon-web-services - Amazon Forecast boto3 服务员
- json - 来自 ESP8266 的 Firestore REST API POST 请求