工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> VHDL

VHDL 変換の例

Numeric_Std と Std_Logic_Arith パッケージ ファイルの両方を使用する

以下は、VHDL で使用される最も一般的な変換です。ページは 2 つのセクションに分かれています。ページの前半には、Numeric_Std パッケージ ファイルを使用した変換が表示されます。ページの後半には、Std_Logic_Arith パッケージ ファイルを使用した変換が表示されます。 Std_Logic_Arith を使用すべきではないため、Numeric_Std パッケージを使用することをお勧めします。多くの人がまだそれを使用することを主張しているため、両方の例を以下に示します.

以下の例の多くは、'length を使用していることに注意してください。 VHDL 属性。この属性により、コードの移植性と汎用性が向上するため、使用する必要があります。

Numeric Std を使用した変換の例

Std_Logic_Arith を使用した変換の例

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);


最も人気のある Nandland ページ

VHDL

  1. チュートリアル - VHDL の紹介
  2. プロシージャ ステートメント - VHDL の例
  3. レコード - VHDL の例
  4. VHDL での符号付きと符号なし
  5. 変数 - VHDL の例
  6. PSL を使用した VHDL でのフォーマル検証
  7. VHDL で文字列のリストを作成する方法
  8. VHDL テストベンチでシミュレーションを停止する方法
  9. VHDL で PWM コントローラーを作成する方法
  10. VHDL で乱数を生成する方法
  11. Tcl を使用したインタラクティブなテストベンチ