位移 std_logic_vector 同时保持精度和转换为有符号
Bitshifting std_logic_vector while keep precision and conversion to signed
在 VHDL 中,我想采用 14 位输入并在末尾附加“00”以给我一个 16 位数字,即 14 位输入乘以 4,然后将其放入一个 17 位带符号变量中,例如它是正的(输入总是正的)。我该怎么办?
像这样? shiftedInput <= to_signed('0' & input & '00', 17);
或者像这样? shiftedInput <= to_signed(input sll 2, 17);
还是这个? shiftedInput <= to_signed(input & '00', 17);
它是否看到它得到的 std_logic_vector 是 16 位,带符号的变量是 17 位,因此假设最高有效位(歌唱位)是 0?
或者我必须这样做吗? shiftedInput <= to_signed('0' & input sll 2, 17);
例如如果我读入 14 位数 17 作为 std_logic_vector [即(00 0000 0001 0001)
] 应该转换为有符号数+68。 [IE。 (0 0000 0000 0100 0100)
]
std_logic_vector
与 numeric_std
的 signed
类型兼容。所以,类型转换函数是signed
(不是整数和向量之间转换的to_signed
):
shiftedInput <= signed('0' & input & "00");
应该能做到。请注意 "00"
而不是您的 '00'
。位字符串用双引号引起来,而位用单引号引起来。
在 VHDL 中,我想采用 14 位输入并在末尾附加“00”以给我一个 16 位数字,即 14 位输入乘以 4,然后将其放入一个 17 位带符号变量中,例如它是正的(输入总是正的)。我该怎么办?
像这样? shiftedInput <= to_signed('0' & input & '00', 17);
或者像这样? shiftedInput <= to_signed(input sll 2, 17);
还是这个? shiftedInput <= to_signed(input & '00', 17);
它是否看到它得到的 std_logic_vector 是 16 位,带符号的变量是 17 位,因此假设最高有效位(歌唱位)是 0?
或者我必须这样做吗? shiftedInput <= to_signed('0' & input sll 2, 17);
例如如果我读入 14 位数 17 作为 std_logic_vector [即(00 0000 0001 0001)
] 应该转换为有符号数+68。 [IE。 (0 0000 0000 0100 0100)
]
std_logic_vector
与 numeric_std
的 signed
类型兼容。所以,类型转换函数是signed
(不是整数和向量之间转换的to_signed
):
shiftedInput <= signed('0' & input & "00");
应该能做到。请注意 "00"
而不是您的 '00'
。位字符串用双引号引起来,而位用单引号引起来。