1. 程式人生 > 其它 >約束裡“:=”和“:/”傻傻分不清楚?今天徹底弄清!

約束裡“:=”和“:/”傻傻分不清楚?今天徹底弄清!

在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開權重,

            花括號中逗號隔,

            左為值表右為權,

            冒號槓數顯家興~”

再多說一句,這個權重分佈的值和權重的寫法除了可以寫成為具體的值的這麼一個數,也是支援寫成變數的哦,這個大家有時間可以自行研究~

今天就侃到這裡,大家有什麼建議或問題都可以直接反饋同名公眾號哈Jerry和大家一起成長