亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> VHDL

VHDL 转换示例

同时使用 Numeric_Std 和 Std_Logic_Arith 包文件

以下是 VHDL 中最常用的转换。该页面分为两个部分。页面的前半部分显示了使用 Numeric_Std 包文件进行的转换。该页面的后半部分显示了使用 Std_Logic_Arith 包文件进行的转换。最好使用 Numeric_Std 包,因为您不应使用 Std_Logic_Arith。由于很多人仍然坚持使用它,所以下面两个例子都进行了演示。

请注意,以下许多示例都使用 'length VHDL 属性。这个属性让你的代码更加便携和通用,所以应该使用它。

使用数字标准的示例转换

使用 Std_Logic_Arith 的示例转换

使用 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

  1. 教程 - VHDL 简介
  2. 过程语句 - VHDL 示例
  3. 记录 - VHDL 示例
  4. VHDL 中的有符号与无符号
  5. 变量 - VHDL 示例
  6. 使用 PSL 在 VHDL 中进行形式化验证
  7. 如何在 VHDL 中创建字符串列表
  8. 如何在 VHDL 测试平台中停止仿真
  9. 如何在 VHDL 中创建 PWM 控制器
  10. 如何在 VHDL 中生成随机数
  11. 使用 Tcl 的交互式测试平台
  12. 基本 VHDL 测验 - 第 4 部分