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_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函数需两参数:待转整数与目标向量宽度。用'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