Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> VHDL

Variabelen - VHDL-voorbeeld

Variabelen in VHDL werken op dezelfde manier als variabelen in C. Hun waarde is geldig op de exacte locatie in de code waar de variabele is gewijzigd. Daarom, als een signaal de waarde van de variabele voor . gebruikt de toewijzing, zal deze de oude variabele waarde hebben. Als een signaal de waarde gebruikt van de variabele na de toewijzing zal het de nieuwe variabele waarde hebben.

Variabelenregels:

  • Variabelen kunnen alleen binnen processen worden gebruikt
  • Elke variabele die in het ene proces is gemaakt, kan niet in een ander proces worden gebruikt
  • Variabelen moeten worden gedefinieerd na het trefwoord proces maar voordat het zoekwoord begin
  • Variabelen worden toegewezen met de := toewijzingssymbool
  • Variabelen die worden toegewezen krijgen onmiddellijk de waarde van de toewijzing

Het belangrijkste om te begrijpen is dat variabelen onmiddellijk de waarde van hun toewijzing aannemen. Hier is een voorbeeld dat een handige manier laat zien om variabelen te gebruiken:gegevens opslaan voor tijdelijk gebruik . Het gebruikt een case-statement en de en-teken (&) aaneenschakelingsoperator.

  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

In het vorige voorbeeld hebben we de twee signalen aaneengeschakeld zodat ze in de case-statement konden worden gebruikt. De variabele v_Choices was direct beschikbaar voor gebruik zodra deze was toegewezen. Laten we naar een ander voorbeeld kijken. Het onderstaande voorbeeld is uitgebreider en laat zien hoe variabelen onmiddellijk de waarde van hun toewijzing krijgen. De signalen r_Var_Copy1 en r_Var_Copy2 lijken hetzelfde te zijn, maar r_Var_Copy2 kan nooit op 5 komen voordat het wordt gereset.

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;

Om ons ontwerp te simuleren, moeten we een testbank maken. Ook kunnen variabelen een beetje lastig zijn om in simulatie weer te geven. Als je Modelsim gebruikt, lees dan meer over hoe je je variabelen kunt zien in het golfvormvenster van Modelsim.

Testbank:

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;


Variabelen Voorbeeld testbank-golfvorm

Het bovenstaande voorbeeld laat zien hoe variabelen anders werken dan signalen. De signalen r_Var_Copy1 en r_Var_Copy2 lijken hetzelfde te zijn, maar r_Var_Copy2 kan nooit op 5 komen voordat het wordt gereset.


VHDL

  1. Procedureverklaring - VHDL-voorbeeld
  2. Records - VHDL-voorbeeld
  3. Analyse-opties
  4. C#-variabelen en (primitieve) gegevenstypen
  5. C++ variabelen, literalen en constanten
  6. C Variabelen, constanten en literalen
  7. C opslagklasse
  8. Strings in C:variabele declareren, initialiseren, afdrukken, voorbeeld
  9. Java - Variabele Types
  10. C - Variabelen
  11. Variabel bereik in C++