请问:
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的写法。