specman - Specman-e:生成所有可能的解决方案?
问题描述
重新生成特定结构时,是否有一种简单的方法可以使其在满足约束的所有可能值都生成之前不生成先前的值?
例如,当(重新)生成时:
Start as:
specman -c 'define TRIES 16; load x;run;'
<'
struct x {
data[2] : list of uint(bits:2);
};
extend sys {
fu : x;
run() is also {
for i from 1 to TRIES do {
gen fu;
print fu.data;
};
};
};
'>
有可能4*4 = 16
的数据组合,问题是能够gen
16 次并获得 16 个不同的值。
谢谢。
解决方案
all_different() 可以在这里提供帮助。这有点棘手,因为该字段是一个列表。所以这可以使用辅助字段来完成。例如:
struct x {
data[2] : list of uint(bits:2);
data_as_one : uint(bits:4);
keep data[0] == data_as_one[1:0];
keep data[1] == data_as_one[3:2];
};
extend sys {
fu : x;
fus[TRIES] : list of x;
keep fus.all_different(.data_as_one);
run() is also {
for each in fus {
out(it.data);
};
};
};
推荐阅读
- firebase - 找不到使用 REST API 上传到 Google Drive 的文件
- python - 如何使用重采样计数筛选原始数据
- java - 如何在quarkus上设置http线程池最大大小
- python - kaggle:在 ubuntu 18 上找不到命令
- android - 使用 Cordova 在 Android 上通过 Apple 登录
- javascript - 错误:expiresIn 应该是秒数或字符串代表
- r - 通过单击列名排列 kable 交互式表格
- node.js - 想知道,如何使用 Gridfs 使用 express、mongoose、mongodb 上传超过 16mb 的文件/视频
- sql - 根据日期从多个表中获取 TOP 1 行
- java - C# AES 加密到 java 8 解密