电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

受约束的随机化VIP免费

受约束的随机化_第1页
1/33
受约束的随机化_第2页
2/33
受约束的随机化_第3页
3/33
SystemVerilog中受约束的随机化薛晓军xueislark@hotmail.com中科院自动化所集成中心2014-02-25为何要引入受约束的随机测试方法CRT原因:产生完整的激励集测试设计的功能越来越困难,编写足够的定向测试集变得不可能功能项的关系是大多错误的来源,而这种错误很难通过清单检查方法排查与定向测试环境的不同:受约束测试环境需要通过参考模型、传输函数或其他方法预测结果需要对待测设计的所有关键点(控制路径的每一个分支)都采用随机化测试提高效率,充分利用计算机来节省人工检查和验证时间需随机化的设计配置:器件配置环境配置原始输入封装后的输入数据协议异常延时事务状态错误和违规随机约束的简介随机约束目的:使用随机激励能够节省人力和时间,但是纯粹的随机激励是接近无限空间的,没有实际使用价值。所以限制和规定随机激励的自由度,以产生既随机又让人感兴趣的测试场景随机约束特点:能够表达复杂的场景可以灵活地、动态地控制随机数可以产生组合的或者序列的约束组合的约束举例:以太网中payload等于13-14个字节序列的约束举例:当一个申请之后,应答需要在4-10个周期内给出简单的例子例子说明:随机变量使用rand/randc修饰词使用约束constraint确定变量的范围调用类的randomize函数来执行随机化,如果遇到随机化问题,randomize函数返回0普通随机数rand循环随机数randcclassTransaction;randbit[15:0]addr;randbit[31:0]data;randbit[2:0]port;randbitrequest;randbit[1:0]grant;constraintword_align{addr[1:0]==2'b0;}endclassmoduletop;Transactiontr=new;initialbegin:random_repeat#20repeat(32)beginif(tr.randomize()==1)$display("addr=%16hdata=%h\n",tr.addr,tr.data);else$display("Randomizationfailed.\n");endend:random_repeatendmodulerandcbit[1:0]y;初始序列:0321下一个序列:2130下一个序列:2013…随机变量约束设置的方式普通方式:typedefenum{low,mid,high}AddrType;classMyBusextendsBus;randAddrTypeatype;constraintaddr_range{(atype==low)->addrinside{[0:15]};(atype==mid)->addrinside{[16:127]};(atype==high)->addrinside{[128:255]};}endclasstaskexercise_bus(MyBusbus);intres;//EXAMPLE1:restricttolowaddressesres=bus.randomize()with{atype==low;};//EXAMPLE2:restricttoaddressbetween10and20res=bus.randomize()with{10<=addr&&addr<=20;};//EXAMPLE3:restrictdatavaluestopowers-of-twores=bus.randomize()with{data&(data-1)==0;};endtask内嵌方式:这种定义方法的好处:每个不同测试定义的约束的不同版本以产生不同的激励坏处:约束过于分散,有潜在风险//packet.svtypedefenum{low,mid,high}AddrType;classMyBusextendsBus;randAddrTypeatype;constraintaddr_rangeendclass//test.svprogrameautomatictest;include“packet.sv”constraintMyBus::addr_range{(atype==low)->addrinside{[0:15]};(atype==mid)->addrinside{[16:127]};(atype==high)->addrinside{[128:255]};}…endprograme随机约束块的格式constraint_declaration::=[static]constraintconstraint_identifierconstraint_blockconstraint_block::={{constraint_block_item}}constraint_block_item::=solveidentifier_listbeforeidentifier_list;|constraint_expressionconstraint_expression::=expression_or_dist;|expression–>constraint_set|if(expression)constraint_set[elseconstraint_set]|foreach(array_identifier[loop_variables])constraint_setconstraint_set::=constraint_expression|{{constraint_expression}}dist_list::=dist_item{,dist_item}dist_item::=value_range[dist_weight]dist_weight::=:=expression|:/expressionconstraint_prototype::=[static]constraintconstraint_identifier;extern_constraint_declaration::=[static]constraintclass_scopeconstraint_identifierconstraint_blockidentifier_list::=identifier{,identifier}expression_or_dist::=express...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

受约束的随机化

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部