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

VHDL变量详解:实用示例与可靠设计规则

VHDL中变量行为类似C变量:赋值后值即时可用,直至下次赋值才变。这使其成进程内临时存储与过程计算理想选择。

VHDL使用变量关键规则

最后一点——即时赋值——常是困惑源头。下方简例演示变量如何拼接两信号驱动case语句。

VAR_CASE : process (i_clk) variable v_Choices : std_logic_vector(1 downto 0); begin v_Choices := i_select_1 & i_select_2; -- 拼接 case v_Choices is when "00" => o_data <= "0001"; when "01" => o_data <= "0010"; -- 为简洁省略其它分支 end case; end process VAR_CASE;

片段中,v_Choices拼接后即刻可用于case语句,展示变量即时更新特性。

为更深说明,考虑下面架构用两信号副本跟踪计数器。虽两信号看似相同,仅r_Var_Copy1在复位前达5,因r_Var_Copy2赋值时计数器已在同一时钟周期内复位。

library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity variable_ex is port ( i_clk : in std_logic; o_done : out std_logic ); end variable_ex; architecture rtl of variable_ex is signal r_Done : std_logic := '0'; signal r_Var_Copy1 : natural range 0 to 5 := 0; signal r_Var_Copy2 : natural range 0 to 5 := 0; begin EX_VAR : process (i_clk) variable v_Count : natural range 0 to 5 := 0; begin if rising_edge(i_clk) then v_Count := v_Count + 1; r_Var_Copy1 <= v_Count; if v_Count = 5 then r_Done <= '1'; v_Count := 0; else r_Done <= '0'; end if; r_Var_Copy2 <= v_Count; end if; end process EX_VAR; o_done <= r_Done; end rtl;

观察此行为仿真用简单测试平台。切换时钟监控o_done输出。ModelSim中记住变量仅在仿真器变量显示选项启用时出现在波形窗口。

library ieee; use ieee.std_logic_1164.all; entity variable_ex_tb is end variable_ex_tb; architecture behave of variable_ex_tb is component variable_ex port ( i_clk : in std_logic; o_done : out std_logic ); end component variable_ex; constant c_CLK_PERIOD : time := 10 ns; signal r_CLK : std_logic := '0'; signal w_DONE : std_logic; begin UUT : variable_ex port map ( i_clk => r_CLK, o_done => w_DONE ); r_CLK <= not r_CLK after c_CLK_PERIOD/2; end behave;
VHDL变量详解:实用示例与可靠设计规则

此例突显变量与信号行为差异:r_Var_Copy1达5,r_Var_Copy2永不达5,因变量在信号赋值前已复位。

VHDL

  1. AC 分析配置:曲线类型、计算点与频率扫描设置
  2. 精通C#变量与基础数据类型:完整指南
  3. 掌握 C++ 变量、字面量与常量:核心概念与实战指南
  4. C 语言变量、常量与字面量完全指南
  5. C 语言存储类完全解析:auto、extern、static、register
  6. C 语言字符串完全指南:声明、输入输出与库函数详解
  7. C 语言变量详解:类型、命名规则、定义声明与内存管理
  8. C++变量作用域全解析:局部变量与全局变量的区别与交互
  9. VHDL过程示例:标准逻辑向量自增
  10. 善用VHDL记录类型构建整洁可复用FIFO接口
  11. MATLAB 变量深度解析:矩阵本质、赋值、多重赋值、查看与清理、长赋值、格式控制、向量创建
  12. 理解 Java 变量类型:综合指南