Systemverilog中的打包和解包(流操作)

 学习记录,本次主要记录和分享sv中流操作符的具体应用,因为在验证的工作中常常会把给到dut的数据进行打包发送,当然有打包就有解包,在采集dut数据的时候经常会把数据解包给到验证环境中的其他模块。

1. 数据组合和拆分的方便性

流操作符允许你轻松地将多个信号或变量打包成一个更大的信号,或者从一个大的信号中解包出多个信号。这对于处理总线数据或需要并行处理的数据尤其有用。

2. 确保数据完整性

在某些情况下,打包和解包可以帮助确保数据在传输或存储过程中保持完整。通过将多个小信号打包成一个大信号,可以减少传输过程中的不一致或错误。

3. 提高代码的可读性和可维护性

流操作符使得代码更加简洁和易读。例如,打包和解包操作通常可以用一行代码完成,而不需要多个赋值语句。这也使得代码更容易维护和修改。

4. 简化对结构化数据的操作

对于一些复杂的数据结构,打包和解包可以简化对其的操作。例如,在UVM中,事务通常包含多个字段,通过流操作符可以轻松地将这些字段打包成一个数据块传递。

5.在UVM中的应用

在UVM验证环境中,打包和解包操作非常常见。比如在事务层次,常常需要将事务对象的各个字段打包成总线格式的数据,或者从总线格式的数据解包成事务对象的字段。

上述黑体的一些解释来源于chatgpt

一. 实验代码

代码写的有点潦草,见谅。本次主要是从右往左进行打包,从左往右和从右往左解包

二 、仿真结果

三、分析

解释:打包,将分散开的数据放在一个空间内。  从多个数据变成一个数据。

        :解包,将组合在一起的数据分散开,存放在多个数据内。

pack_data = {<<{a,b,c}}; --- 这就是打包操作,很好理解,需要被打包的数据放在赋值符号的右边,给到pack_data就是,从分散的数据转化为一个数据,所以叫打包,方向就是从右往左进行打包,先要把  c 放在pack_data 的高数据位,在打包的时候谁走在前面先被打包就谁在pack_data 的高数据位。c 完了之后是b,然后是a,因此,这里例子里的pack_data = ‘cba;

同理可得从左往右进行的打包操作

{>>{a,b,c}} = pack_data;----这是从左往右的解包操作。根据上面的分析,现在是pack_data在赋值符号的右边,也会是说,要将组合好的数据赋值给分散的 a,b,c,所以称为解包操作。方向是根据  ">>" ----从左往右。按照上面pack_data打包好的数据是 “cba”可以得到,这里解包之后的数据 a = c, b = b , c = a。所以,这里可以实现高低bit位置互换的功能。

四 、提高

上面第三点只是简单的按照bit流来打包和解包,为了更好的实现运用到更多场景的打包和解包情况,-------这里可以结合上面的实验代码和仿真结果来看

按数据位打包

这里进行的是从右往左的打包操作。但是这里的流符号后面跟着一个操作位数4,这里作如下解释:先把q和w用 ”{}“拼接起来。然后,按照每4bit将组合好的数据进行划分,一定是先按照4bit进行划分,划分好之后再把划分好的数据按照从右往左的方向进行打包。这里就和上面第三点的解释大同小异了,主要就是抓住先划分再打包。只是比上面的例子多一个操作,这里,{q,w} = abcd1234   一共两个16位的数据先拼接位一个32位的数据,然后按照4位为一组进行划分,变成 

{4’ha, 4'hb, ...4'h3, 4'h4},然后进行第二步 开始打包,从右往左开始打包赋值给h_pack,于是有了下面的仿真结果,

同理可得,其他情况,比如 byte , 5,7,8,想怎么来怎么来。记住先按照系数进行分组,然后进行打包。

按数据位解包

这里其实都可以不用解释了,上面的代码里可以看到。考虑到我学的时候还是有点子理解不够透彻,所以下面再解释一下。

代码所描述的是将打包好的 h_pack按照4位一组从左到右进行解包,然后赋值给q 和 w,也是同样的理解先把打包好的数据,按照4bit位为一组进行划分得到 {4‘h4, 4'h3,..4'hb,4'ha},然后,按照从左往右的顺序分配给拼接好的{q,w} 因此,可以得到 q = 16’h4321, w = 16'hdcba

这里另外一个方向就不解释了

五、注意

1、对于打包和解包之后数据谁放在最高位谁放在最低为的问题就是,谁先在打包或者是解包中最先被取到,谁就作为最高位作为打包后的数据或者是解包后数据的最高位,也就是,从左往右的时候进行操作,那么左边第一个数,在进行对对应操作之后就是最高位,其他按照顺序依次排列。

2、还有就是不管是打包还是解包,都要先进行拼接操作。------- {}  ====== 就是{<<{}}里面的这个大括号

至此结束处女作结束,,,,

  • 23
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值