在SystemVerilog约束之中,有两个点常常让初学者混淆搞不清楚,或者当时记住了后面不用又忘了。今天jerry就专门来侃侃这两个点,让初学者们想忘也忘不了,全部拿下!
这两个点就是权重分布的两种写法“:=”和“:/”。
如下面这段代码,这jerry_face_score和tom_face_score两个变量约束都应该是多少呢?
对于初学者是不是有点晕?这两个“:=”“:/”什么区别呢?到底左边是权重还是右边是权重呢?大家思考一会,可以看下如下解释这段代码什么含义,我们的思考流程是这样的:
首先大家一定要知道符号左边的是变量可取的值。即对于jerry_face_score这个变量,值可以为100、97、98、99。对于tom_face_score这个变量,值可以是20、21、22、23、24、25、26。
然后大家需要计算出他们的权重分母。对于jerry_face_score权重分母是:98+99+99+99=395。对于tom_face_score权重分母是:21+25=46。
接着计算出权重分子。其中对于jerry_face_score权重分子:值100是98,值97、98、99皆是99。对于tom_face_score权重分子:值20、21、22、23、24、25皆是21/6=3.5,值26是25。
最后很容易得到两个值的权值分布,即分子比分母。其中对于jerry_face_score权重分布:值100是98/395,值97、98、99皆是99/395。对于tom_face_score权重分分布:值20、21、22、23、24、25皆是3.5/46,值26是25/46。
通过jerry的计算步骤分解过程,可以清楚的看到这两个符号的区别了。
有人说,jerry,看了这个计算明白道理就是这么个道理,但是还是记不太清楚咋整?
好吧,“练拳不练功,到老一场空”,看这位初学的兄弟这么可怜,传授你这招内力心法,请接掌:
记忆心法,正规版:
“:=”代表前面的值每一个都“等于”后面的权重。
“:/”代表前面的值一起“均分”后面的权重值。
记忆心法,意淫版:
这个分权重就像是过年发红包,左边就是领红包的小朋友,右边权重就是钱,中间的“=”是“两个杠杠”,“/”是“一个杠杠”,杠杠是啥意思?没错,杠杠就是经济实力!
能有多达两个杠杠,我的妈,有钱!他的红包来几个人发几个,每一个红包都是那么多钱,不会降低标准,保险柜直接取。
一个杠杠的就实力不允许了,发红包的个数虽然还是那么多,但是囊中羞涩,总共只有人家一份红包的钱!那咋办?那不发红包也不合适啊!他先看下来了多少人,然后出去把这个钱换成零钱,平均放到各自红包中发出去。
所以这个概念怎么敢混淆?你想要装整钱的大红包还是装零钱的小红包?去几个杠杠家里?你心里没点数吗?
正所谓:
“d-i-s-t开权重,
花括号中逗号隔,
左为值表右为权,
冒号杠数显家兴~”
再多说一句,这个权重分布的值和权重的写法除了可以写成为具体的值的这么一个数,也是支持写成变量的哦,这个大家有时间可以自行研究~