a[0+:8] 、b [15-:8] 什么意思?怎么用?

之前jerry讲过怎么最方便的把一个128bit位宽的数,拆成字节使用的技巧(不知道的可以复习下前面的文章哦~)。今天反过来讲讲怎么把字节为单位的数拼成128bit?

这个问题其实也是很简单的,相信关注Jerry的同学都会,比如最容易想到的移位来解决这个问题:

可以这样写:

bit [7:0] jerry_byte[16];

bit [127:0] data;


for(int i=0; i<15 ; i++)

begin


    data[127:0] ={data_mid[119:0],jerry_byte[i]};

end

如果是对应关系相反,我们可以把移位那句话这样写:

data[127:0] ={jerry_byte[i],data_mid[127:8],};

这些都是没问题的,但是今天jerry重点想给大家说一个新的写法:

bit [7:0] jerry_byte[16];

bit [127:0] data;


for(int i=0; i<15 ; i++)

begin


    data[i*8 +:  8] = jerry_byte[i];


end

如果对应关系相反,我们可以循环这样写:

for(int i=0; i<15 ; i++)

begin

    data[(127-i*8) -: 8] = jerry_byte[i];

end

我们观察下这种写法和前面说的直接区别:首先是代码少写了几个字,然后是我们不使用移位的方式,移位的位数可以不用计算了。(这样写的优势j其实还好吧,就主要介绍下这个方法给大家装X用吧~)
在这里插入图片描述
好了,对于很多初学者可能还不太清楚这个写法什么意思吧,

我们来介绍下:

拿刚才例子中:

data[0 +: 8] 含义就是data[7:0]

data[8 +: 8] 含义就是data[15:8]

data[127 -: 8] 含义就是data[127:120]

data[119 -: 8] 含义就是data[119:112]

原来是这样啊,加号冒号、减号冒号的前面就是起始的bit数,后面的数就是往前后找几位。如果是加号冒号,就是往增大的方向找后面数字的位数。减号就是往减小的方向找后面数字的位数!

但是Jerry又要说一个重点细节,data[0 +: 8] 含义是data[7:0],为什么不是指的是data[0:7] 呢??这个也完全符合定义啊!

告诉各位原因:因为我们刚才这样定义的: bit [127:0] data;

我们定义的就是[127:0] 而不是[0:127] !!!

如果我们定义的是 bit [0:127] data;

data[0 +: 8] 含义就是data[0:7]

data[8 +: 8] 含义就是data[8:15]

data[127 -: 8] 含义就是data[120:127]

data[119 -: 8] 含义就是data[112:119]

好了相信现在大家对这个知识点应该是清楚了,最后再啰嗦的总结一遍,大家可以朗读下jerry的心法注释,强化理解和记忆:

data[0 +: 8]

代表从0bit开始,向上加8bit的数,也就是0:7。

data定义如果是高位到低位,那这个数就代表data[7:0],反之则代表data[0:7];

data[8 +: 8]

代表从8bit开始,向上加8bit的数,也就是8:15。

data定义如果是高位到低位,那这个数就代表data[15:8],反之则代表data[8:15];

data[127 -: 8]

代表从127bit开始,向下减8bit的数,也就是127:120。

data定义如果是高位到低位,那这个数就代表data[127:120],反之则代表data[120:127];

data[119 -: 8]

代表从119bit开始,向下减8bit的数,也就是112:119。

data定义如果是高位到低位,那这个数就代表data[119:112],反之则代表data[112:119];

好了,今天Jerry就聊到这里,还是那句话,Jerry有时分享代码编写技巧,不是推崇沉迷于技巧,功能实现才是根本目的哈,黑猫白猫,抓住一只耳的才是好警长~

  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值