前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >水果与盘子的随机问题?怎么搞

水果与盘子的随机问题?怎么搞

作者头像
IC验证
发布2020-06-30 13:53:16
4140
发布2020-06-30 13:53:16
举报
文章被收录于专栏:杰瑞IC验证杰瑞IC验证

Jerry今天去超市买水果了,买了四种水果,分别是苹果、橙子、香蕉、梨。为什么这四种?可能是因为刚好促销吧,盛情难却(与插图不符哦)。回来以后打算每种水果吃一个,为了增强仪式感以搭配Jerry高贵的气质,于是决定用四个盘子分别盛放一个水果,沐浴更衣焚香,准备刀叉筷子红酒,仔细品尝其中滋味。

在沐浴之时突然想到一个验证初学者可能不会的问题,于是感慨万千。Jerry把这个问题就命名为“水果与盘子问题”。

Jerry所谓的“水果与盘子问题”其实指的是这样一个约束问题:我们把这四种水果看成四组数据、或者简单点就是四个数据,这四个数据是随机的(拿水果来说例如水果的大小尺寸、光泽亮度、水分等等),对这个数的参数随机是简单的,但是我想既对这个数随机又对水果与盘子的对应关系随机怎么办?比如我苹果不一定装在第一个盘子里,而可能在其他的盘子?怎么弄?

准确的说这个问题应该叫“水果与盘子的对应关系问题”。

上代码!!

首先Jerry把问题代码化明确起来:

代码语言:javascript
复制
   rand bit [7:0]  plate [4] ;  //这个数组就是我们定义的四个盘子
   rand bit [7:0]  apple;
   rand bit [7:0]  orange;
   rand bit [7:0]  banana;
   rand bit [7:0]  pear;
   constraint  jerry_fruit {  //四个水果分别进行随机
    apple       inside  {[2:11]};
    orange     inside  {[70:111]};
    banana    inside  {[0:4]};
    pear         inside  {[5:29]};
    }
    function void post_randomize( );  //我们把四种水果分别放到四个盘子里
       plate[0]=  apple;
       plate[1]=  orange;
       plate[2]=  banana;
       plate[3]=  pear;
     endfuction 

如上代码,我们把这四种水果与盘子plate[ ]的对应关系怎么随机起来?凭什么apple只能装plate[0]?万一我想要装plate[3]呢?

老规矩,先想想,不要往下翻了哦~~

果然,关注jerry的还是那么聪慧!!

没错,我们可以再加一道随机!用骰子决定!

来!请先熟背Jerry心法:

“Jerry水果盘子题,随机水果随关系“

关系随的是编号,关键词unique是玄机!”

再上代码!

代码语言:javascript
复制
   rand bit [7:0]  plate [4] ;    
   rand bit [7:0]  apple;
   rand bit [7:0]  orange;
   rand bit [7:0]  banana;
   rand bit [7:0]  pear;
   rand bit [1:0]  jerry_r [4]; //各位观众!jerry_r 就是我们的编号随机数组了!
   constraint  jerry_fruit {                
    apple       inside  {[2:11]};
    orange     inside  {[70:111]};
    banana    inside  {[0:4]};
    pear         inside  {[5:29]};
    }
   constraint jerry_list {
    unique  {jerry_r}; //关键词unique就是关键了!
    }
    function void post_randomize( ); //我们把原固定编号换成编号随机数组!搞定
       int i=0;
       plate[jerry_r[i++]]=  apple;
       plate[jerry_r[i++]]=  orange;
       plate[jerry_r[i++]]=  banana;
       plate[jerry_r[i++]]=  pear;
     endfuction 

太感动了,加了短短几行代码就可以实现了这个功能!有初学者问unique这个关键词什么作用?

Jerry再多说一句:unique主要针对的对象是,一组变量的这类情况,比如我们用的这个数组。当每次随机后,通过unique约束的这一组变量中,没有两个成员是相等的,他们都是独一无二的。因为我们的编号其实就是独一无二的,我们的前提是每个盘子只放一个水果!所以这样写是再合适不过的了!jerry_r是一个2bit的数组,也就是只能是0,1,2,3四个数,通过unique就会随机的独一无二的放到它的四个空间中。

后面通过计数因子i来顺序调用jerry_r中的编号,当然这里可以不写i++,也可以直接0,1,2,3直接调,但是如果盘子更多怎么办呢?所以Jerry一次性服务到位啦。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杰瑞IC验证 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档