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

VHDL Records Gebruiken voor Schone, Herbruikbare FIFO-interfaces

In VHDL bieden records een krachtige manier om uw ontwerp te stroomlijnen, vergelijkbaar met structs in C. Door gerelateerde signalen in een enkel type te groeperen, kunt u codeduplicatie drastisch verminderen, leesbaarheid verbeteren, en port maps over meerdere entiteiten vereenvoudigen.

Records schitteren wanneer u werkt met grote, terugkerende interfaces – zoals die verbonden met off-chip geheugens of FIFO's – waar dezelfde set controle- en datasignalen herhaaldelijk voorkomt. Een record eenmaal definiëren in een package en overal hergebruiken houdt uw entiteitsinterfaces netjes en vergemakkelijkt toekomstige wijzigingen.

Het volgende voorbeeld demonstreert hoe twee recordtypen in een toegewijde package (example_record_pkg.vhd) te creëren en ze te gebruiken om de in- en uitgaande signalen van een FIFO te modelleren. Een enkel recordsignaal vertegenwoordigt alle ingangen van de FIFO, en een ander alle uitgangen naar de FIFO.

Belangrijkste punten:

  1. Records vereenvoudigen entiteitsdeclaraties en port maps in VHDL.
  2. Ze kunnen elementen van variërende typen bevatten – std_logic, integer, std_logic_vector, etc.
  3. Records zijn analoog aan C structs, wat een vertrouwd paradigma biedt voor veel engineers.
  4. Gedeelde recordtypen zouden in een enkele package moeten residieren voor consistentie.
  5. Recordsignalen kunnen geïnitialiseerd worden met constanten voor voorspelbare opstartwaarden.
  6. Arrays van records maken gestructureerde datahantering mogelijk, zoals een tabel van FIFO-configuraties.

Hieronder staat de package-definitie, gevolgd door een voorbeeldentiteit die de recordtypen gebruikt om FIFO read/write-logica te managen. De code is volledig compliant met de IEEE 1076-2008 standaard.

 library ieee; use ieee.std_logic_1164.all; package example_record_pkg is -- Outputs van de FIFO. type t_FROM_FIFO is record wr_full : std_logic; -- FIFO Vol Vlag rd_empty : std_logic; -- FIFO Leeg Vlag rd_dv : std_logic; rd_data : std_logic_vector(7 downto 0); end record t_FROM_FIFO; -- Inputs naar de FIFO. type t_TO_FIFO is record wr_en : std_logic; wr_data : std_logic_vector(7 downto 0); rd_en : std_logic; end record t_TO_FIFO; constant c_FROM_FIFO_INIT : t_FROM_FIFO := (wr_full => '0', rd_empty => '1', rd_dv => '0', rd_data => (others => '0')); constant c_TO_FIFO_INIT : t_TO_FIFO := (wr_en => '0', wr_data => (others => '0'), rd_en => '0'); end package example_record_pkg; 
 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use work.example_record_pkg.all; -- PACKAGE HIER GEBRUIKT! entity example_record is port ( i_clk : in std_logic; i_fifo : in t_FROM_FIFO; o_fifo : out t_TO_FIFO := c_TO_FIFO_INIT -- initialiseer output record ); end example_record; architecture behave of example_record is signal r_WR_DATA : unsigned(7 downto 0) := (others => '0'); begin -- Handles schrijven naar de FIFO p_FIFO_WR : process (i_clk) is begin if rising_edge(i_clk) then if i_fifo.wr_full = '0' then o_fifo.wr_en <= '1'; o_fifo.wr_data <= std_logic_vector(r_WR_DATA + 1); end if; end if; end process p_FIFO_WR; -- Handles lezen van de FIFO p_FIFO_RD : process (i_clk) is begin if rising_edge(i_clk) then if i_fifo.rd_empty = '0' then o_fifo.rd_en <= '1'; end if; end if; end process p_FIFO_RD; end behave; 

VHDL

  1. De Kunst en Proces van LP Platen Productie
  2. AC-Analyse Configuratie: Kurven, Punten en Frequentie-sweep Instellingen
  3. Inleiding tot VHDL: Uw Eerste AND-poort Bouwen
  4. Uitgebreide Gids voor VHDL Type Conversies met Numeric_Std en Std_Logic_Arith
  5. VHDL Procedure Voorbeeld: Een Standard Logic Vector Incrementeren
  6. Signed vs. Unsigned Typen in VHDL: Praktische Inzichten
  7. VHDL Variabelen Uitgelegd: Praktische Voorbeelden & Regels voor Betrouwbaar Ontwerp
  8. Formele verificatie van VHDL-modules met PSL meesteren
  9. Dynamische string-lijsten in VHDL: Best Practices & Voorbeeld
  10. VHDL Generate Statements onder de knie: Herbruikbare Debouncers bouwen met gemak
  11. Een VHDL-testbench netjes beëindigen: methoden en best practices