2016-08-21 14 views
0

VHDLで私は14ビットの入力に4を掛けた16ビットの数値を与えるために14ビットの入力を取り、最後に '00'を追加したいと思いますそれが正(入力が常に正)であるように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に変換する必要があります。 [すなわち(0 0000 0000 0100 0100)]

+0

「入力」の種類は何ですか?さまざまな試みでどのようなエラーが発生しますか? –

+0

入力はstd_logic_vector(13 downto 0) – SomeRandomPhysicist

+0

です。第1オプションには、演算子 "&"の関数宣言はありません 第2オプションは次のとおりです。演算子 "sll"の関数宣言はありません 3番目のオプションは次のとおりです。スライスまたはインデックスされる 4番目のオプションが与えられます:演算子 "sll"の関数宣言はありません – SomeRandomPhysicist

答えて

3

std_logic_vectornumeric_stdsigned互換あります。だから、型変換関数はsigned(整数とベクトル間の変換ではないto_signed)です:

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

はそれを作る必要があります。 '00'ではなく"00"に注意してください。ビット列は二重引用符で囲み、ビットは一重引用符で囲みます。

+0

ありがとう、それは、多くのappretiatedでした。 – SomeRandomPhysicist

関連する問題