17

ADC コンバーターから 8 ビットの入力信号があります ( std_logic_vector(7 downto 0))。16 ビット信号を 16 ビット システムに処理するには、それらを 16 ビット信号 ( std_logic_vector(15 downto 0)) に変換する必要があります。

4

5 に答える 5

31

8 ビット値が符号付き (2 の補数) として解釈される場合、一般的かつ標準的な VHDL 変換方法は、IEEE numeric_std ライブラリを使用することです。

library ieee;
use ieee.numeric_std.all;

architecture sim of tb is
    signal slv_8  : std_logic_vector( 8 - 1 downto 0);
    signal slv_16 : std_logic_vector(16 - 1 downto 0);
begin
    slv_16 <= std_logic_vector(resize(signed(slv_8), slv_16'length));
end architecture;

そのため、最初に std_logic_vector が符号付きの値に変換され、次にサイズ変更が適用され、符号付きの値が符号拡張され、結果が最終的に std_logic_vector に変換されます。

変換にはかなり時間がかかりますが、一般的であり、ターゲットの長さが後で変更されても機能するという利点があります。

属性 'length は、単に slv_16 std_logic_vector の長さ、つまり 16 を返します。

符号付きではなく符号なしの表現の場合は、unsigned代わりにを使用して実行できますsigned。したがって、次のコードを使用します。

    slv_16 <= std_logic_vector(resize(unsigned(slv_8), slv_16'length));
于 2013-07-03T17:19:57.333 に答える
3

完全を期すために、時折役立つさらに別の方法:

--  Clear all the slv_16 bits first and then copy in the bits you need.  
process (slv_8)
begin
    slv_16 <= (others => '0');
    slv_16(7 downto 0) <= slv_8;
end process;

思い出すことができるベクトルに対してこれを行う必要はありませんでしたが、より複雑な状況ではこれが必要でした.いくつかの関連する信号をより大きくより複雑なレコードにコピーすることは一度でした.

于 2013-07-04T11:00:12.870 に答える