VHDL 変換の例
Numeric_Std と Std_Logic_Arith パッケージ ファイルの両方を使用する
以下は、VHDL で使用される最も一般的な変換です。ページは 2 つのセクションに分かれています。ページの前半には、Numeric_Std パッケージ ファイルを使用した変換が表示されます。ページの後半には、Std_Logic_Arith パッケージ ファイルを使用した変換が表示されます。 Std_Logic_Arith を使用すべきではないため、Numeric_Std パッケージを使用することをお勧めします。多くの人がまだそれを使用することを主張しているため、両方の例を以下に示します.
以下の例の多くは、'length を使用していることに注意してください。 VHDL 属性。この属性により、コードの移植性と汎用性が向上するため、使用する必要があります。
Numeric Std を使用した変換の例
- 符号付き整数
- Std_Logic_Vector への整数
- 整数から符号なし
- Std_Logic_Vector から整数へ
- 署名済みの Std_Logic_Vector
- Std_Logic_Vector から Unsigned へ
- 整数に署名
- Std_Logic_Vector に署名
- 署名ありから署名なし
- 符号なし整数
- 未署名から署名済みへ
- Std_Logic_Vector への署名なし
Std_Logic_Arith を使用した変換の例
- 符号付き整数
- Std_Logic_Vector への整数
- 整数から符号なし
- Std_Logic_Vector から整数へ
- 署名済みの Std_Logic_Vector
- Std_Logic_Vector から Unsigned へ
- 整数に署名
- Std_Logic_Vector に署名
- 署名ありから署名なし
- 符号なし整数
- 未署名から署名済みへ
- Std_Logic_Vector への署名なし
Numeric_Std を使用して整数から符号付きに変換
以下の例では、2 つの入力パラメーターを必要とする to_signed 変換を使用しています。 1 つ目は変換する信号で、2 つ目は結果のベクトルの長さです。
signal input_3 : integer; signal output_3 : signed(3 downto 0); output_3 <= to_signed(input_3, output_3'length);
Numeric_Std を使用して整数から Std_Logic_Vector に変換
まず、整数に格納される値の範囲について考える必要があります。あなたの整数は正ですか そして ネガティブ?その場合、to_signed() を使用する必要があります。 変換。整数が正のみの場合は、to_unsigned() を使用する必要があります
これらの変換関数は両方とも、2 つの入力パラメーターを必要とします。 1 つ目は変換する信号で、2 つ目は結果のベクトルの長さです。
signal input_1 : integer; signal output_1a : std_logic_vector(3 downto 0); signal output_1b : std_logic_vector(3 downto 0); -- This line demonstrates how to convert positive integers output_1a <= std_logic_vector(to_unsigned(input_1, output_1a'length)); -- This line demonstrates how to convert positive or negative integers output_1b <= std_logic_vector(to_signed(input_1, output_1b'length));
Numeric_Std を使用して整数から符号なしに変換
以下の例では、2 つの入力パラメーターを必要とする to_unsigned 変換を使用しています。 1 つ目は変換する信号で、2 つ目は結果のベクトルの長さです。
signal input_2 : integer; signal output_2 : unsigned(3 downto 0); output_2 <= to_unsigned(input_2, output_2'length);
Numeric_Std を使用して Std_Logic_Vector から整数に変換
まず、std_logic_vector によって表されるデータについて考える必要があります。署名されたデータですか、それとも署名されていないデータですか?符号付きデータは、std_logic_vector が正の または になる可能性があることを意味します 負の数。符号なしデータは、std_logic_vector がのみであることを意味します 正の数。以下の例では、unsigned() を使用しています 型キャストしますが、データが負になる可能性がある場合は、signed() を使用する必要があります タイプキャスト。入力 std_logic_vector を unsigned または signed としてキャストしたら、次に示すように整数に変換できます。
signal input_4 : std_logic_vector(3 downto 0); signal output_4a : integer; signal output_4b : integer; -- This line demonstrates the unsigned case output_4a <= to_integer(unsigned(input_4)); -- This line demonstrates the signed case output_4b <= to_integer(signed(input_4));
Numeric_Std を使用して Std_Logic_Vector から Signed に変換
これは簡単な変換です。以下に示すように std_logic_vector を符号付きでキャストするだけです:
signal input_6 : std_logic_vector(3 downto 0); signal output_6 : signed(3 downto 0); output_6 <= signed(input_6);
Numeric_Std を使用して Std_Logic_Vector から Unsigned に変換する
これは簡単な変換です。以下に示すように、std_logic_vector を unsigned としてキャストするだけです:
signal input_5 : std_logic_vector(3 downto 0); signal output_5 : unsigned(3 downto 0); output_5 <= unsigned(input_5);
Numeric_Std を使用して符号付きから整数に変換
これは簡単な変換です。以下に示すように、numeric_std から to_integer 関数呼び出しを使用するだけです。
signal input_10 : signed(3 downto 0); signal output_10 : integer; output_10 <= to_integer(input_10);
Numeric_Std を使用して Signed から Std_Logic_Vector に変換
これは簡単な変換です。以下に示すように std_logic_vector キャストを使用するだけです:
signal input_11 : signed(3 downto 0); signal output_11 : std_logic_vector(3 downto 0); output_11 <= std_logic_vector(input_11);
Numeric_Std を使用して符号付きから符号なしに変換
これは簡単な変換です。以下に示すように、符号なしキャストを使用するだけです:
signal input_12 : signed(3 downto 0); signal output_12 : unsigned(3 downto 0); output_12 <= unsigned(input_12);
Numeric_Std を使用して符号なしから整数に変換
これは簡単な変換です。以下に示すように、numeric_std から to_integer 関数呼び出しを使用するだけです。
signal input_7 : unsigned(3 downto 0); signal output_7 : integer; output_7 <= to_integer(input_7);
Numeric_Std を使用して Unsigned から Signed に変換
これは簡単な変換です。必要なのは、以下に示すように署名付きキャストを使用することだけです:
signal input_9 : unsigned(3 downto 0); signal output_9 : signed(3 downto 0); output_9 <= signed(input_9);
Numeric_Std を使用して Unsigned から Std_Logic_Vector に変換する
これは簡単な変換です。以下に示すように std_logic_vector キャストを使用するだけです:
signal input_8 : unsigned(3 downto 0); signal output_8 : std_logic_vector(3 downto 0); output_8 <= std_logic_vector(input_8);
Std_Logic_Arith を使用して整数から符号付きに変換
以下の例では、2 つの入力パラメータを必要とする conv_signed 変換を使用しています。 1 つ目は変換する信号で、2 つ目は結果のベクトルの長さです。
signal input_3 : integer; signal output_3 : signed(3 downto 0); output_3 <= conv_signed(input_3, output_3'length);
Std_Logic_Arith を使用して整数から Std_Logic_Vector に変換します
以下の例では、2 つの入力パラメーターを必要とする conv_std_logic_vector 変換を使用しています。 1 つ目は変換する信号で、2 つ目は結果のベクトルの長さです。
ここで注意すべきことの 1 つは、この変換に負の数を入力すると、出力 std_logic_vector が 2 の補数の符号付き表記で表されることです。
signal input_1 : integer; signal output_1 : std_logic_vector(3 downto 0); output_1 <= conv_std_logic_vector(input_1, output_1'length);
Std_Logic_Arith を使用して整数から符号なしに変換
以下の例では、2 つの入力パラメータを必要とする conv_unsigned 変換を使用しています。 1 つ目は変換する信号で、2 つ目は結果のベクトルの長さです。
signal input_2 : integer; signal output_2 : unsigned(3 downto 0); output_2 <= conv_unsigned(input_2, output_2'length);
Std_Logic_Arith を使用して Std_Logic_Vector から整数に変換します
まず、std_logic_vector によって表されるデータについて考える必要があります。署名されたデータですか、それとも署名されていないデータですか?符号付きデータは、std_logic_vector が正の または になる可能性があることを意味します 負の数。符号なしデータは、std_logic_vector がのみであることを意味します 正の数。以下の例では、unsigned() を使用しています 型キャストしますが、データが負になる可能性がある場合は、signed() を使用する必要があります タイプキャスト。入力 std_logic_vector が符号なしまたは符号付きの場合は、以下に示すように整数に変換できます:
signal input_4 : std_logic_vector(3 downto 0); signal output_4a : integer; signal output_4b : integer; -- This line demonstrates the unsigned case output_4a <= conv_integer(unsigned(input_4)); -- This line demonstrates the signed case output_4b <= conv_integer(signed(input_4));
Std_Logic_Arith を使用して Std_Logic_Vector から Signed に変換します
これは簡単な変換です。以下に示すように std_logic_vector を符号付きでキャストするだけです:
signal input_6 : std_logic_vector(3 downto 0); signal output_6 : signed(3 downto 0); output_6 <= signed(input_6);
Std_Logic_Arith を使用して Std_Logic_Vector から Unsigned に変換します
これは簡単な変換です。以下に示すように、std_logic_vector を unsigned としてキャストするだけです:
signal input_5 : std_logic_vector(3 downto 0); signal output_5 : unsigned(3 downto 0); output_5 <= unsigned(input_5);
Std_Logic_Arith を使用して符号付きから整数に変換
これは簡単な変換です。以下に示すように、std_logic_arith からの conv_integer 関数呼び出しを使用するだけです。
signal input_10 : signed(3 downto 0); signal output_10 : integer; output_10 <= conv_integer(input_10);
Std_Logic_Arith を使用して Signed から Std_Logic_Vector に変換
これは簡単な変換です。以下に示すように std_logic_vector キャストを使用するだけです:
signal input_11 : signed(3 downto 0); signal output_11 : std_logic_vector(3 downto 0); output_11 <= std_logic_vector(input_11);
Std_Logic_Arith を使用して符号付きから符号なしに変換する
これは簡単な変換です。以下に示すように、符号なしキャストを使用するだけです:
signal input_12 : signed(3 downto 0); signal output_12 : unsigned(3 downto 0); output_12 <= unsigned(input_12);
Std_Logic_Arith を使用して符号なしから整数に変換する
これは簡単な変換です。以下に示すように、std_logic_arith からの conv_integer 関数呼び出しを使用するだけです。
signal input_7 : unsigned(3 downto 0); signal output_7 : integer; output_7 <= conv_integer(input_7);
Std_Logic_Arith を使用して Unsigned から Signed に変換する
これは簡単な変換です。必要なのは、以下に示すように署名付きキャストを使用することだけです:
signal input_9 : unsigned(3 downto 0); signal output_9 : signed(3 downto 0); output_9 <= signed(input_9);
Std_Logic_Arith を使用して Unsigned から Std_Logic_Vector に変換する
これは簡単な変換です。以下に示すように std_logic_vector 型キャストを使用するだけです:
signal input_8 : unsigned(3 downto 0); signal output_8 : std_logic_vector(3 downto 0); output_8 <= std_logic_vector(input_8);
VHDL