今天開門見山,不做前戲。(想歪的面壁去)
那麼問題來了:
bit [127:0] data; 把如上定義的128bit的data資料給我拆成以位元組(8bit)為機關的數,後面要以位元組為機關使用,怎麼寫?有人說了,怎麼能問我們這麼低級的問題?
這個可以直接用啊?拆什麼拆?
比如我要最低一個位元組,那就是直接用data[7:0],再上去一個位元組用data[15:8],這樣啊?
有道理啊,Jerry如果有這樣一個需求“給我把這個數的第3個位元組加上第5個位元組,然後與第8個位元組做亦或、再加上第13個位元組與第7個位元組……“(有種魯智深戲弄鎮關西的感覺哈)
可想而知,如果是這樣就比較麻煩了,要算是第幾個位元組然後确定這個位元組應該引用第幾位到第幾位,很容易粗心出現問題的啊!
那怎麼辦呢 ??? 我們可以先把它倒到一個有編号的數組裡,這樣我們就可以通過引用數組的編号來解決這個問題了!!那怎麼倒呢?
有人說了,還是通過位數的指定來提前給好?其實這樣就還是比較麻煩,也要計算第幾個位元組對應哪些位,要寫很多行。
又有人說了,可以用循環啊!好的,當然也可以。
不過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的寫法。