提问人:Guilty 提问时间:1/31/2023 最后编辑:Guilty 更新时间:1/31/2023 访问量:70
字节屏蔽 AxiStream:如何使用 tkeep systemverilog 屏蔽 tdata
Byte Masking AxiStream: How to mask tdata with tkeep systemverilog
问:
在 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
答:
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;
评论