字节屏蔽 AxiStream:如何使用 tkeep systemverilog 屏蔽 tdata

Byte Masking AxiStream: How to mask tdata with tkeep systemverilog

提问人:Guilty 提问时间:1/31/2023 最后编辑:Guilty 更新时间:1/31/2023 访问量:70

问:

在 AxiStream 中,每次传输中的 tkeep 值表示同一传输的 tdata 字段中的有效字节。 在 systemverilog 中,我想使用 tkeep 来屏蔽(设置为 0)tdata 字段中的无效位。

如果 tkeep 表示无效位,那么我可以简单地做:

masked_tdata = tdata & tkeep;

但是,tkeep 表示有效字节。

有没有一种优雅的方式可以在 SystemVerilog 中执行这种“字节掩码”操作(不必是可合成的,因为这是测试平台的一部分)。

logic[31:0] tdata = 4'hC1FF
logic[3:0] tkeep = 4'b0001;
logic[31:0] masked_tdata;


assign masked_tdata = tdata & tkeep; // evaluates to 0x0001
// what I want it to evaluate to is 0x000F

Verilog System-Verilog 布尔逻辑 验证 AMBA

评论


答:

1赞 dave_59 1/31/2023 #1

如果你说的优雅是指一个单一的表达式,我想不出比使用循环更优雅的表达方式了。for

for(int i;i<$bits(tdata)/8;i++)
  masked_tdata[i*8+:8] = tkeep[i] ? tdata[i*8+:8] : '0;