逻辑(二维)信号的算术右移

Arithmetic right shift on logic (2 dimensional) signal

我正在尝试对信号 in.

进行右移算术运算(保持符号)

当我将值 in[0] 设置为 16'hbb00 时,我希望 in_sign_extend[0] 在右移后签名为 16'hf760。但是,我注意到我在 in_sign_extend[0] 上看到的实际结果是 16'h0680.

localparam CHANNELS = 8;
localparam AXI_M_DATA_WIDTH = 32;

logic signed [0:CHANNELS-1]    [AXI_M_DATA_WIDTH/2-1:0] in;
logic signed [0:CHANNELS-1]    [AXI_M_DATA_WIDTH/2-1:0] in_sign_extend;

assign in_sign_extend[0] = (in[0] >>> 3);

我想了解 in 是否真的正确签名。或者我在这里遗漏了什么。

压缩数组的 select 部分始终是无符号的,即使 select 对整个数组也是如此。只有作为整个引用的变量 (in) 是 有符号的 。您可以将代码更改为

assign in_sign_extend[0] = (signed'(in[0]) >>> 3);

或者您可能更喜欢使用未打包的数组

logic signed [AXI_M_DATA_WIDTH/2-1:0] in[CHANNELS];
logic signed [AXI_M_DATA_WIDTH/2-1:0] in_sign_extend[CHANNELS];

assign in_sign_extend[0] = (in[0] >>> 3);