天天看點

循環合并nump數組_IC驗證中妙用合并數組

今天開門見山,不做前戲。(想歪的面壁去)

那麼問題來了:

bit [127:0] data; 把如上定義的128bit的data資料給我拆成以位元組(8bit)為機關的數,後面要以位元組為機關使用,怎麼寫?

有人說了,怎麼能問我們這麼低級的問題?

這個可以直接用啊?拆什麼拆?

比如我要最低一個位元組,那就是直接用data[7:0],再上去一個位元組用data[15:8],這樣啊?

循環合并nump數組_IC驗證中妙用合并數組

有道理啊,Jerry如果有這樣一個需求“給我把這個數的第3個位元組加上第5個位元組,然後與第8個位元組做亦或、再加上第13個位元組與第7個位元組……“(有種魯智深戲弄鎮關西的感覺哈)

可想而知,如果是這樣就比較麻煩了,要算是第幾個位元組然後确定這個位元組應該引用第幾位到第幾位,很容易粗心出現問題的啊!

循環合并nump數組_IC驗證中妙用合并數組
那怎麼辦呢 ??? 我們可以先把它倒到一個有編号的數組裡,這樣我們就可以通過引用數組的編号來解決這個問題了!!

那怎麼倒呢?

有人說了,還是通過位數的指定來提前給好?

其實這樣就還是比較麻煩,也要計算第幾個位元組對應哪些位,要寫很多行。

又有人說了,可以用循環啊!

好的,當然也可以。

不過jerry今天想說的是這種方法:通過合并數組!

上代碼!

bit [15:0][7:0] jerry_byte; jerry_byte = data;

收工!!!(

沒錯,就兩行

如果我們要引用,太簡單了!兩句就搞定了啊,假如我們要用第0個位元組,直接就是jerry_byte[0],我們要用第10個位元組,那就是jerry_byte[10]。

就是這麼簡單 !!!

合并數組還可以繼續精确的引用下去,比如我要第三個位元組的最低位,就直接jerry_byte[3][0]就可以了!

需要注意一點,前面兩個區間哪個是哪個?

比如 bit [7:0][7:0] data; 到底哪個代表位寬?

分不太清楚啊!!

Jerry再提供一個心法吧:

“合并數組保持從左到右的漢字讀法”

什麼意思呢?

“讀法”這個詞大家應該在國小才有吧,比如國小老師給個分數,說讀作幾分之幾,先讀分母再分子。

今天jerry告訴大家

合并數組的“讀法”,是如同我們正常的漢字閱讀從左到右的讀法!

例如:

bit [6:0][7:0] data;//是一個7個(即[6:0])8bit(即[7:0])寬度的數拼出合并數組。 bit [9:0][3:0] data;//是一個10個 4bit寬度的數拼出合并數組。 bit [15:0][4:0] data;//是一個16個5bit寬度的數拼出合并數組。

哈哈,今天合并數組就介紹到這裡,請大家注意,Jerry雖然有時介紹代碼上的編寫技巧,但是我們絕不能太過于執着于代碼技巧,功能實作出來才是最重要的,哪怕用最low的寫法。