SV基础之随机化(一)

发布时间:2026/9/8 16:35:13
SV基础之随机化(一) 随机变量和约束背景根据绿皮书第6章内容进行整理核心内容随机变量约束权重我的理解随机变量如果想要一个变量可以进行随机那就需要在变量名前添加rand或者randc修饰符。用这两个修饰符修饰的变量会在其所在对象显示调用randomize的时候进行随机。rand和randc的差别在于randc会在变量取值范围内构建一个排列每调用一次randomize()就返回排列中的下一个值直至所有值都恰好出现一次然后开始新的排列周期。而rand则是随机取值。约束很多时候我们并不希望变量进行完全随机而是在特定范围内进行随机这时候我们就会用到约束。我们通常会将约束放在约束块里。constraint c_stim { len 1000; len 0; if (congestion_test) { dst inside {[CONGEST_ADDR-100:CONGEST_ADDR100]}; srcCONGEST_ADDR; } }这是绿皮书上的一个约束块例子。我们可以看到约束块里面并不支持0len1000这种连续使用两个关系操作符的写法原因是因为如果使用连续关系操作符实际上是分割成了两个表达式((0len)1000)所以最终的约束结果会和你所期望的大相径庭。约束块中也支持if条件语句但是不使用begin...end而是用{}框起来。权重使用dist操作符来修改权重分布权重的分布有两种符号:和:/。:范围内所有值使用相等权重总权重为所有权重累加src dist {0:40, [1:3]:60};上面这个例子的总权重就是403*60220其中0的概率是40/220123的概率都是60/220。:/范围内所有值平分权重总权重为操作符后所写权重总和dst dist {0:/40, [1:3]:/60};上面这个例子的总权重是4060100其中0的概率是40/100123的概率都是20/100。实战要点工作中可以这么用通过添加约束可以提高随机的效率和有效性容易踩的坑在约束块中不要使用begin...end不然编译会报错一句话总结使用随机变量并用约束和权重进行组合约束可以提高随机的效率。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询