2016-08-21 199 views
0

在VHDL中我想要一個14位輸入並在末尾附加'00'以給我一個16位數字,這是14位輸入乘以4然後把這個轉換爲17位有符號變量,使其爲正數(輸入總是正數)。我應該怎麼做呢?轉換std_logic_vector,同時保持精度和轉換爲有符號

是什麼? 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。 [即(0 0000 0000 0100 0100)]

+0

輸入類型是什麼?你在嘗試各種嘗試時會遇到什麼錯誤? –

+0

輸入是一個std_logic_vector(13 downto 0) – SomeRandomPhysicist

+0

第一個選項給出:沒有對運算符「&」的函數聲明 第二個選項給出:沒有函數聲明給運算符「sll」 第三個選項給出:prefix既不是函數名也不是被切片或索引 第4個選項給出:沒有函數聲明爲操作符「sll」 – SomeRandomPhysicist

回答

3

std_logic_vector兼容與該類型的numeric_stdsigned。所以,類型轉換功能signed(不to_signed是整數和載體之間進行轉換):

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

應該做到這一點。請注意0​​而不是您的'00'。位字符串是雙引號,而位是單引號的。

+0

謝謝,這樣做,很多appretiated。 – SomeRandomPhysicist