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

变量 - VHDL 示例

VHDL 中的变量的作用类似于 C 中的变量。它们的值在代码中修改变量的确切位置有效。因此,如果一个信号使用变量 before 的值 赋值,它将具有旧的变量值。如果信号使用变量之后的值 分配它将具有新的变量值。

变量规则:

要理解的最重要的事情是变量会立即获取其赋值的值。 下面的示例展示了使用变量的一种有用方法:存储数据以供临时使用 .它使用 case 语句和与 (&) 连接运算符。

  VAR_CASE : process (i_clk)
    variable v_Choices : std_logic_vector(1 downto 0);
  begin

    v_Choices := i_select_1 & i_select_2; -- concatenation
    
    case v_Choices is
      when "00" =>
        o_data <= "0001";
      when "01" =>
        o_data <= "0010";
    -- ETC

在前面的示例中,我们连接了两个信号,以便可以在 case 语句中使用它们。变量 v_Choices 在分配后立即可用。让我们看另一个例子。下面的示例更全面,并演示了变量如何立即获取其赋值的值。信号 r_Var_Copy1 和 r_Var_Copy2 看起来是一样的,但 r_Var_Copy2 在复位之前永远无法达到 5。

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;

为了模拟我们的设计,我们需要创建一个测试平台。此外,在模拟中显示变量可能有点棘手。如果您使用的是 Modelsim,请阅读有关如何在 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;


变量示例测试台波形

上面的例子演示了变量的行为与信号的不同。信号 r_Var_Copy1 和 r_Var_Copy2 看起来是一样的,但 r_Var_Copy2 在复位之前永远无法达到 5。


VHDL

  1. 过程语句 - VHDL 示例
  2. 记录 - VHDL 示例
  3. 分析选项
  4. C# 变量和(原始)数据类型
  5. C++ 变量、文字和常量
  6. C 变量、常量和文字
  7. C 存储类
  8. C 中的字符串:如何声明变量、初始化、打印、示例
  9. Java - 变量类型
  10. C - 变量
  11. C++ 中的变量作用域
  12. MATLAB - 变量