Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> VHDL

Variablen – VHDL-Beispiel

Variablen in VHDL verhalten sich ähnlich wie Variablen in C. Ihr Wert ist genau an der Stelle im Code gültig, an der die Variable geändert wird. Wenn also ein Signal den Wert der Variablen vorher verwendet die Zuweisung, hat sie den alten Variablenwert. Wenn ein Signal den Wert der Variablen after verwendet die Zuweisung hat den neuen Variablenwert.

Variablenregeln:

Das Wichtigste zu verstehen ist, dass Variablen sofort den Wert ihrer Zuweisung annehmen. Hier ist ein Beispiel, das eine nützliche Möglichkeit zur Verwendung von Variablen zeigt:Speichern von Daten zur vorübergehenden Verwendung . Es verwendet eine case-Anweisung und den Verkettungsoperator kaufmännisches Und (&).

  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

Im vorherigen Beispiel haben wir die beiden Signale verkettet, damit sie in der case-Anweisung verwendet werden können. Die Variable v_Choices stand unmittelbar nach ihrer Zuweisung zur Verfügung. Schauen wir uns ein anderes Beispiel an. Das folgende Beispiel ist umfassender und zeigt, wie Variablen sofort den Wert ihrer Zuweisung annehmen. Die Signale r_Var_Copy1 und r_Var_Copy2 scheinen gleich zu sein, aber r_Var_Copy2 kann niemals 5 erreichen, bevor es zurückgesetzt wird.

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;

Um unser Design zu simulieren, müssen wir eine Testbench erstellen. Außerdem kann es etwas schwierig sein, Variablen in der Simulation anzuzeigen. Wenn Sie Modelsim verwenden, lesen Sie mehr darüber, wie Sie Ihre Variablen im Wellenformfenster von Modelsim anzeigen können.

Testbench:

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;


Variables Example Testbench Waveform

Das obige Beispiel zeigt, wie sich Variablen von Signalen unterscheiden. Die Signale r_Var_Copy1 und r_Var_Copy2 scheinen gleich zu sein, aber r_Var_Copy2 kann niemals 5 erreichen, bevor es zurückgesetzt wird.


VHDL

  1. Prozeduranweisung – VHDL-Beispiel
  2. Aufzeichnungen - VHDL-Beispiel
  3. Analyseoptionen
  4. C#-Variablen und (primitive) Datentypen
  5. C++-Variablen, Literale und Konstanten
  6. C-Variablen, Konstanten und Literale
  7. C Lagerklasse
  8. Strings in C:Variable deklarieren, initialisieren, drucken, Beispiel
  9. Java - Variablentypen
  10. C - Variablen