【sv】constraint
constraint的一些问题记录. 过程记录, 持续更新......
- 概率的约束
需要约束在某些值的概率大一些,其他值的概率小一些,可以使用以下方法
constraint xxx::yyy_cons{(aaa inside {bbb_q}) dist {1:/1, 0:/2}; //约束aaa在某些值,比如bbb_q中的值时,概率大一些{(aaa == bbb),(ccc == ddd)} dist {[2'b00:2'b10]:/1, 2'b11:/1}; //约束aaa==bbb,ccc==ddd两个条件都满足时的概率大一些(aaa < 0) dist {1:/2, 0:/1}; //aaa为有符号数,约束aaa为负数的概率大一些(aaa) inside {['1-2:'1]}; //注意,如果$bits(aaa)>=32时,没有问题,否则解约束失败,因为此等效于 (aaa) inside {[32'hFFFFFFFF-32'h2:'1]} , 正确写法为 (aaa) inside {['1-2'h2:'1]}; sv表达式原则中有讲此部分内容 }
- soft constraints
class c1; bit[63:0] a; bit[63:0] b; constraint cons1{soft a == 0;foreach(b[i]) soft b[i] == 0; } endclassmodule test;initial beginc1 c = new();c.randomize() with {a[0] == 1; b[0] == 1;};end endmodule
此例中,随机完后,a = 随机值(a[0]=1); b = 1;
- 符号数的约束
要求:exp2 > 0时,exp2 < exp3 - exp1; exp2 < 0时, abs(exp2) <= exp1;//可以参照以下的做法 bit[15:0] exp1, exp3; bit (signed) [31:0] exp2; constraint c1 {exp1 + exp2 < exp3;if(exp2[31]) exp2[31:15] == '1;else exp2[31:15] == '0; }
sv中取绝对值的做法
1. $abs(); //可以接受real类型和int类型的变量
可以对其他数据类型进行一定转换来使用
$abs(int'($signed(in)))
2. 针对任意位宽整型变量,可以定义宏进行处理
`define _abs(in) (((in) >> ($bits(in) - 1)) ? (~(in) + 1) & (1 << $bits(in) - 1) : (in))//使用举例 bit[34:0] flag; `_abs(flag)bit[89:0] sel; `_abs({sel,flag})
排列组合的约束
要求:
x1-x5均为有符号数, 作为偏移;
a为基数, 为无符号数;
要求a和任意组合的偏移相加必须在[c:d]范围内;
代码示意:
bit f[2]; //使用其index作为"有无"系数进行此项的处理 bit f1[32]; //一共32种排列组合constraint c {foreach(f[f5]) foreach(f[f4]) foreach(f[f3]) foreach(f[f2]) foreach(f[f1]) a + f1*x1 + f2*x2 + f3*x3 + f4*x4 + f5*x5 + 64'h0 inside {[c:d]}; }constraint c1 {foreach(f1[f])a + f[0]*x1 + f[1]*x2 + f[2]*x3 + f[3]*x4 + f[4]*x5 + 64'h0 inside {[c:d]}; }
- 注意约束中的优先级
//比如,a = sel ? b : c;//约束中,需要注意添加括号constraint {a == (sel ? b : c);
}
- sv系统函数的运用
$bits,$countones
用法1: 判断一个数是否进行了符号位扩展
bit[63:0] a;
int b;
$countones(a >> $bits(b)) == $bits(a)-$bits(b)
用法2: 进行符号位扩展
`define sign_extend(in,out) \
if(in >> ($bits(in)-1)) { \
out == {{($bits(out)-$bits(in)){1'b1}},in}; \
} else { \
out == in; \
}
- 约束中solve...before...的运用
当有多个变量时,可以使用如下写法,减少一些代码量
solve A,B before C,D
当代码中写成环时,比如:
solve A before B
......
solve B before A
仿真时会报warning:
Warning-[...] cyclic ordering warning
...
- 注意变量位宽
bit[7:0] mul,a,b,c;
constraint {
mul == a*b*c;
}
那么,a,b,c可能随机出非常大的值,因为此约束的意思是mul==(a*b*c) & 8'hff;
需要得到想要的结果,那么借助sv数据类型相关的规则,可以采用如下办法,
1.mul == a*b*c + 24'h0
2.mul == 24'(a*b*c)
- $urandom和$random
$urandom: 根据仿真seed的不同随机不同的值; 但在module中,无论module例化多少次,随机值都是一样的。
$random: 不会根据仿真seed的不同随机不同的值;但在module中,module的不同例化,随机值都是不一样的。
另外,返回值是32bit数据,如果给超过32bit的数进行赋值时,需要注意.
【sv】constraint相关推荐
- 用友U9【SV】服务
1:将UFIDA.U9.Cust.ZhaoDi.CreateItemTransferSV.ICreateItemTransferSV 文件拷贝至portal的services下面: 2:添加附件con ...
- 【SV】SystemVerilog语法总结 3.0
覆盖率 RTL代码覆盖率衡量测试案例验证覆盖了哪些设计规格在RTL中实现了,而不能衡量验证计划行(Line Coverage):RTL中的代码行有限状态机(FSM Coverage):RTL代码中的有 ...
- 【sv】复制/拼接操作符
concatenation replication 拼接字符串{} file_name = {getenv("PROJECT_HOME"),"/src/top_xxx_t ...
- 【sv】打印格式控制
2.7 Assignment pattern format %p or %P 格式说明符可用于打印聚合表达式,例如解压缩结构,数组和联合(unpacked structure,array,unions ...
- 【SV】 $sformat和$formatf的用法
目录 1.基本使用方法 2.巧妙的使用方法 1.基本使用方法 首先查看一下这两个函数什么含义.看下这段代码: string inside_string; string outside_string; ...
- 【论文】解读Robust bike-sharing stations allocation and path network design: a two-stage stochastic...
解读Robust bike-sharing stations allocation and path network design: a two-stage stochastic programmin ...
- Verilog:【4】脉冲发生器(pulse_gen.sv)
碎碎念: 明明是周四,这周竟然不开组会_(:з)∠)_ 那我可以继续愉快地学习人家的代码了,这篇博客介绍的是脉冲发生器,脉冲和Killer Queen是不是很配呢hhh 目录 1 模块功能 2 模块代 ...
- 【总结】alter table *** add constraint *** 用法 . 建立约束 ,主键、外键的SQL语句写法
[总结]alter table *** add constraint *** 用法 2010年08月26日 星期四 08:31 1.主键约束: 要对一个列加主键约束的话,这列就必须要满足的条件就是分空 ...
- Verilog:【3】边沿检测器(edge_detect.sv)
碎碎念: 学习新知识的感觉还是比较快乐,下面要介绍的是一个全能的边沿检测器,可以识别上升.下降.以及同时检测两种边沿,不得不说人家的代码写得确实很优雅. 目录 1 模块功能 2 模块代码 3 模块思路 ...
最新文章
- 漫谈计算机体系.md
- 清华90后校友、MIT助理教授斩获ACM博士论文奖!博士期间曾发表论文20余篇
- OpenCV使用Facemark API
- 使用Dottrace跟踪代码执行时间
- linux出站入站端口维护,linux下如何用iptables开放指定端口_网站服务器运行维护,linux,iptables,端口...
- 云小课丨SA基线检查:给云服务来一次全面“体检”
- Python实战从入门到精通第二讲——类
- k8s kafka集群 连接不上_k8s利用statefulset部署kafka集群(依赖zookeeper)
- 网络模型介绍、数据网络传输过程与网络传输速率
- PUBG 绝地逃亡 吃鸡压枪宏 彩虹六号压枪宏 Autohotkey
- 11000-雷达基本资料
- 什么是scrum敏捷项目管理
- Android性能优化学习记录(二)稳定性与内存优化
- 谷歌中国正式宣布李开复辞去总裁一职
- 【地球科学】常用的地理投影坐标系介绍(笔记)
- 【uni-app】app与H5进行双向通讯
- css3中斜杠_使用斜杠语法设置CSS3边界半径
- 【Excel】选择性粘贴
- 精通Node.js: 你应该阅读的书籍
- 微信编辑器哪个操作最简单?