位移 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_vectornumeric_stdsigned 类型兼容。所以,类型转换函数是signed(不是整数和向量之间转换的to_signed):

shiftedInput <= signed('0' & input & "00");

应该能做到。请注意 "00" 而不是您的 '00'。位字符串用双引号引起来,而位用单引号引起来。