逻辑(二维)信号的算术右移
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);
我正在尝试对信号 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);