VHDL 转换示例
同时使用 Numeric_Std 和 Std_Logic_Arith 包文件
以下是 VHDL 中最常用的转换。该页面分为两个部分。页面的前半部分显示了使用 Numeric_Std 包文件进行的转换。该页面的后半部分显示了使用 Std_Logic_Arith 包文件进行的转换。最好使用 Numeric_Std 包,因为您不应使用 Std_Logic_Arith。由于很多人仍然坚持使用它,所以下面两个例子都进行了演示。
请注意,以下许多示例都使用 'length VHDL 属性。这个属性让你的代码更加便携和通用,所以应该使用它。
使用数字标准的示例转换
- 带符号的整数
- Std_Logic_Vector 的整数
- 整数转无符号
- Std_Logic_Vector 转整数
- Std_Logic_Vector 已签名
- Std_Logic_Vector 转无符号
- 签名为整数
- 签名到 Std_Logic_Vector
- 已签名到未签名
- 无符号整数
- 未签名到已签名
- 无符号到 Std_Logic_Vector
使用 Std_Logic_Arith 的示例转换
- 带符号的整数
- Std_Logic_Vector 的整数
- 整数转无符号
- Std_Logic_Vector 转整数
- Std_Logic_Vector 已签名
- Std_Logic_Vector 转无符号
- 签名为整数
- 签名到 Std_Logic_Vector
- 已签名到未签名
- 无符号整数
- 未签名到已签名
- 无符号到 Std_Logic_Vector
使用 Numeric_Std 从整数转换为有符号
下面的示例使用 to_signed 转换,它需要两个输入参数。第一个是要转换的信号,第二个是结果向量的长度。
signal input_3 : integer; signal output_3 : signed(3 downto 0); output_3 <= to_signed(input_3, output_3'length);
使用 Numeric_Std 从 Integer 转换为 Std_Logic_Vector
首先,您需要考虑存储在整数中的值的范围。你的整数可以是正数和 消极的?如果是这样,您将需要使用 to_signed() 转换。如果您的整数只是正数,则需要使用 to_unsigned() 转换。
这两个转换函数都需要两个输入参数。第一个是要转换的信号,第二个是结果向量的长度。
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 从整数转换为无符号
下面的示例使用 to_unsigned 转换,它需要两个输入参数。第一个是要转换的信号,第二个是结果向量的长度。
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 转换为 Integer
首先,您需要考虑由 std_logic_vector 表示的数据。它是签名数据还是未签名数据?签名数据意味着您的 std_logic_vector 可以是正数或 负数。无符号数据意味着您的 std_logic_vector 是 only 一个正数。下面的示例使用 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 <= 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 转换为无符号
这是一个简单的转换,您只需将 std_logic_vector 转换为无符号,如下所示:
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 从无符号转换为有符号
这是一个简单的转换,您需要做的就是使用如下所示的签名转换:
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 从整数转换为有符号
下面的示例使用 conv_signed 转换,它需要两个输入参数。第一个是要转换的信号,第二个是结果向量的长度。
signal input_3 : integer; signal output_3 : signed(3 downto 0); output_3 <= conv_signed(input_3, output_3'length);
使用 Std_Logic_Arith 从 Integer 转换为 Std_Logic_Vector
下面的示例使用 conv_std_logic_vector 转换,它需要两个输入参数。第一个是要转换的信号,第二个是结果向量的长度。
这里需要注意的一点是,如果您在此转换中输入负数,那么您的输出 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 从整数转换为无符号
下面的示例使用 conv_unsigned 转换,它需要两个输入参数。第一个是要转换的信号,第二个是结果向量的长度。
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 转换为 Integer
首先,您需要考虑由 std_logic_vector 表示的数据。它是签名数据还是未签名数据?签名数据意味着您的 std_logic_vector 可以是正数或 负数。无符号数据意味着您的 std_logic_vector 是 only 一个正数。下面的示例使用 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 转换为无符号
这是一个简单的转换,您只需将 std_logic_vector 转换为无符号,如下所示:
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 从无符号转换为有符号
这是一个简单的转换,您需要做的就是使用如下所示的签名转换:
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