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

VHDL类型转换全攻略:Numeric_Std与Std_Logic_Arith包详解

同时使用Numeric_Std与Std_Logic_Arith包文件

下文汇总最常用VHDL类型转换。分两节:首节展示依赖现代numeric_std包的转换,次节演示等效遗留std_logic_arith包转换。虽许多设计师仍用std_logic_arith,行业最佳实践推荐numeric_std以获清晰度与可移植性。

注意许多示例用VHDL属性'length,确保代码自动适配向量宽度变化——可复用可维护设计关键策略。

Numeric_Std包转换示例

Std_Logic_Arith包转换示例

Numeric_Std包:整数转有符号数

to_signed函数需两参数:待转整数与目标向量宽度。用'length属性保持代码灵活。

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_unsigned;有符号或无符号整数用to_signed。两函数均接收值与目标宽度。

signal input_1 : integer; signal output_1a : std_logic_vector(3 downto 0); signal output_1b : std_logic_vector(3 downto 0); -- 仅正整数 output_1a <= std_logic_vector(to_unsigned(input_1, output_1a'length)); -- 有符号或无符号整数 output_1b <= std_logic_vector(to_signed(input_1, output_1b'length));

Numeric_Std包:整数转无符号数

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转整数

先按数据语义将向量转unsigned或signed,再用to_integer。

signal input_4 : std_logic_vector(3 downto 0); signal output_4a : integer; signal output_4b : integer; -- 无符号情况 output_4a <= to_integer(unsigned(input_4)); -- 有符号情况 output_4b <= to_integer(signed(input_4));

Numeric_Std包: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转无符号数

signal input_5 : std_logic_vector(3 downto 0); signal output_5 : unsigned(3 downto 0); output_5 <= unsigned(input_5);

Numeric_Std包:有符号数转整数

signal input_10 : signed(3 downto 0); signal output_10 : integer; output_10 <= to_integer(input_10);

Numeric_Std包:有符号数转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包:无符号数转整数

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包:无符号数转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包:整数转有符号数

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

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包:整数转无符号数

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转整数

signal input_4 : std_logic_vector(3 downto 0); signal output_4a : integer; signal output_4b : integer; -- 无符号情况 output_4a <= conv_integer(unsigned(input_4)); -- 有符号情况 output_4b <= conv_integer(signed(input_4));

Std_Logic_Arith包: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转无符号数

signal input_5 : std_logic_vector(3 downto 0); signal output_5 : unsigned(3 downto 0); output_5 <= unsigned(input_5);

Std_Logic_Arith包:有符号数转整数

signal input_10 : signed(3 downto 0); signal output_10 : integer; output_10 <= conv_integer(input_10);

Std_Logic_Arith包:有符号数转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包:无符号数转整数

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包:无符号数转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记录类型构建整洁可复用FIFO接口
  4. 掌握VHDL有符号与无符号类型:实战洞察
  5. VHDL变量详解:实用示例与可靠设计规则
  6. 精通PSL形式化验证VHDL模块:从理论到实战
  7. VHDL 字符串列表创建:最佳实践与示例
  8. 优雅结束 VHDL 测试平台仿真
  9. VHDL 实现 PWM 控制器:设计、仿真与 FPGA 演示
  10. VHDL 生成随机数:从均匀分布到 OSVVM
  11. 基于Tcl的交互式测试平台增强硬件验证
  12. VHDL基础测验第4部分:验证你的理解