当前位置 博文首页 > 杰瑞IC验证的博客:妙用合并数组

    杰瑞IC验证的博客:妙用合并数组

    作者:[db:作者] 时间:2021-07-18 22:23

    今天开门见山,不做前戏。

    请问:

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

    cs