Master VHDL:uitgebreide introductie voor FPGA- en ASIC-ontwerp
Tutorial – Inleiding tot VHDL
VHDL is een vreselijk acroniem. Het staat voor V HSIC H ardware D omschrijving L taal. Een acroniem in een acroniem, geweldig! VHSIC staat voor V ery H hoog S plaste I geïntegreerde C stroom. Daarom is VHDL uitgebreid V ery hogesnelheidsgeïntegreerd circuit H ardware D omschrijving L taal. PHEW dat is een mondvol. VHDL is een van de twee talen die door het onderwijs en het bedrijfsleven worden gebruikt om FPGA's en ASIC's te ontwerpen. U kunt eerst profiteren van een introductie tot FPGA's en ASIC's als u niet bekend bent met deze fascinerende schakelingen. VHDL en Verilog zijn de twee talen die digitale ontwerpers gebruiken om hun circuits te beschrijven, en ze verschillen qua ontwerp van traditionele softwaretalen zoals C en Java.
Voor het onderstaande voorbeeld maken we een VHDL-bestand dat beschrijft een En-poort. Ter opfrissing:een eenvoudige And Gate heeft twee ingangen en één uitgang. De uitvoer is alleen gelijk aan 1 als beide invoer gelijk zijn aan 1. Hieronder ziet u een afbeelding van de And Gate die we zullen beschrijven met VHDL.
Een En-poort
Laten we aan de slag gaan! De fundamentele eenheid van VHDL wordt een signaal genoemd . Laten we voorlopig aannemen dat een signaal een 0 of een 1 kan zijn (er zijn eigenlijk andere mogelijkheden, maar daar komen we nog op terug). Hier is wat basis VHDL-logica:
signal and_gate : std_logic; and_gate <= input_1 and input_2;
De eerste coderegel definieert een signaal van het type std_logic en heet and_gate. Std_logic is het type dat het meest wordt gebruikt om signalen te definiëren, maar er zijn andere waarover u meer zult leren. Deze code genereert een EN-poort met een enkele uitgang (and_gate) en 2 ingangen (input_1 en input_2). Het sleutelwoord “en” is gereserveerd in VHDL. De operator <=staat bekend als de toewijzingsoperator. Wanneer je de bovenstaande code mondeling parseert, kun je hardop zeggen:"Het signaal and_gate KRIJGT input_1 en wordt verwerkt met input_2."
Nu vraag je je misschien af waar input_1 en input_2 vandaan komen. Zoals hun naam al aangeeft, zijn dit invoergegevens voor dit bestand, dus u moet de tools hierover informeren. Invoer en uitvoer naar een bestand worden gedefinieerd in een entiteit . Een entiteit bevat een poort die alle invoer en uitvoer naar een bestand definieert. Laten we een eenvoudige entiteit maken:
entity example_and is port ( input_1 : in std_logic; input_2 : in std_logic; and_result : out std_logic ); end example_and;
Dit is je basisentiteit. Het definieert een entiteit genaamd voorbeeld_en en 3 signalen, 2 ingangen en 1 uitgang, die allemaal van het type std_logic zijn. Er is nog een ander VHDL-trefwoord nodig om dit compleet te maken en dat is architectuur . Een architectuur wordt gebruikt om de functionaliteit van een bepaalde entiteit te beschrijven. Zie het als een scriptie:de entiteit is de inhoudsopgave en de architectuur is de inhoud. Laten we een architectuur voor deze entiteit maken:
architecture rtl of example_and is signal and_gate : std_logic; begin and_gate <= input_1 and input_2; and_result <= and_gate; end rtl;
De bovenstaande code definieert een architectuur genaamd rtl van entiteit example_and. Alle signalen die door de architectuur worden gebruikt, moeten worden gedefinieerd tussen de trefwoorden “is” en “begin”. De feitelijke architectuurlogica bevindt zich tussen de trefwoorden ‘begin’ en ‘eind’. Je bent bijna klaar met dit bestand. Een laatste ding dat u de tools moet vertellen, is welke bibliotheek ze moeten gebruiken. Een bibliotheek definieert hoe bepaalde trefwoorden zich in uw bestand gedragen. Ga er voorlopig van uit dat je deze twee regels bovenaan je bestand nodig hebt:
library ieee; use ieee.std_logic_1164.all;
Gefeliciteerd! U hebt uw eerste VHDL-bestand gemaakt. Het ingevulde bestand kunt u hier bekijken:
library ieee; use ieee.std_logic_1164.all; entity example_and is port ( input_1 : in std_logic; input_2 : in std_logic; and_result : out std_logic ); end example_and; architecture rtl of example_and is signal and_gate : std_logic; begin and_gate <= input_1 and input_2; and_result <= and_gate; end rtl;
Lijkt het erop dat je veel code moest schrijven om een stupid and gate te maken? Allereerst, en poorten zijn niet dom. Ten tweede heb je gelijk; VHDL is een zeer uitgebreide taal. Wen er maar aan dat het doen van iets dat heel eenvoudig was in software, u aanzienlijk langer zal kosten in een HDL zoals Verilog of VHDL. Maar vraag gewoon aan een softwareman om te proberen een beeld te genereren op een VGA-monitor waarop Conway's Game of Life wordt weergegeven en kijk hoe hun hoofd van verbazing tolt! Die video is trouwens gemaakt met VHDL en een FPGA. Dat zul je snel genoeg kunnen doen!
Vervolgens bespreken we een ander fundamenteel VHDL-trefwoord:process.
VHDL
- Basis VHDL Quiz – deel 1
- Stimulusbestand gelezen in testbench met TEXTIO
- Een timer maken in VHDL
- Hoe RAM vanuit een bestand te initialiseren met TEXTIO
- Hoe u uw eerste VHDL-programma maakt:Hello World!
- BMP-bestand bitmapafbeelding lezen met TEXTIO
- Wachten en wachten tot gebruiken in VHDL
- Automatiseer FPGA-ontwikkeling met Jenkins, Vivado en GitHub op een Linux VPS
- Tutorial - Combinatie- en sequentiële code schrijven
- Simulatie stoppen in een VHDL-testbench
- Een eindige-toestandsmachine maken in VHDL