VHDL

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Exemplu de cod VHDL

VHDL (acronim pentru VHSIC hardware Descriere Limba, în cazul în care „VHSIC“ este acronimul pentru foarte mult Circuite integrate de mare viteză), în informatică și electronica , este un limbaj de descriere hardware născut dintr - un proiect al SUA Departamentul Apararii . VHDL sa născut în 1987 , când a devenit IEEE standardul 1076 și în 1993 o versiune actualizată a ieșit.

Este, împreună cu Verilog , cea mai limba utilizată pentru proiectarea sistemelor electronice digitale . Acesta este instrumentul fundamental pentru proiectarea digitale moderne circuite integrate și aplicațiile sale variază de la microprocesoare ( DSP , acceleratoare grafice), comunicații ( telefoane mobile , TV prin satelit ), automobile ( sisteme de navigație , de control al stabilității ) și multe altele.

Caracteristici distinctive

VHDL este în multe privințe similar cu un adevărat limbaj de programare : în special, utilizările sale tipice construcții , cum ar fi dacă ... atunci ... altceva. Cu toate acestea, fiind un limbaj care descrie funcționarea și structura hardware componente, are unele caracteristici distincte în comparație cu limbile de software. Principala este competitivitatea; acest termen indică faptul că diferite părți ale unui cod scris în VHDL, o dată traduse într - un circuit electronic, lucru simultan, deoarece acestea au hardware dedicat; dimpotrivă, într - un limbaj de software, funcțiile descrise de cod sunt în general executate secvențial, după linia de linie, deoarece acestea au un singur procesor fizic.

VHDL vă permite să modelați cu ușurință interacțiunea dintre diferitele blocuri funcționale care alcătuiesc un sistem. Aceste interacțiuni sunt în esență schimbul de semnale de control și date între diferitele obiecte care alcătuiesc sistemul. De fapt, într-un sistem hardware, fiecare obiect care trebuie modelat, fie că este o poartă logică simplă sau un microprocesor complex, reacționează instantaneu la modificările stării intrărilor sale, producând modificări la ieșirile sale. Fiecare bloc funcțional, la rândul său, este descris în relația intrare-ieșire, utilizând construcțiile clasice ale limbajelor de programare (dacă, pentru, în timp ce).

Utilizare în designul electronic

Principalele faze de proiectare sunt două:

  • în primul obiect este descris ca ENTITY , adică modul în care este văzut componenta din exterior: această secțiune include , în general , porturile de comunicare, timpii de întârziere, autobuz lățimea și parametrii de configurare;
  • în al doilea ARCHITECTURE este proiectat, care este arhitectura internă în care este descris modul în care funcționează dispozitivul; aceasta este cea mai importantă parte deoarece constituie descrierea funcțională reală.

Deși oricine poate scrie această a doua parte , deoarece acestea doresc, sunt utilizate de obicei două stiluri: comportamentale sau structurale. Primul, comportamental, descrie relația intrare-ieșire funcțională printr - o funcție sau un algoritm; dacă, pe de altă parte, se folosește stilul structural , este reprezentată structura internă a dispozitivului, constând din componente de nivel inferior și conexiunile acestora (RTL: Register transfer level ), adică se decide deja cu ce obiecte să se creeze funcționalitate și le conectează între ele.

În proiectarea unui nou dispozitiv, de obicei , se pornește de la un nivel ridicat descriere comportamental, pentru a trece apoi la o descriere RTL , care este constituită din componentele digitale fundamentale , cum ar fi registrele ACESTEA , ALU , de autobuze și statul mașini .

Ultimul pas al traducerii modelului RTL într - un netlist este realizată automat de un program software numit „sintetizator“. Exemple de sintetizatoare comerciale sunt , de exemplu , Synopsys proiectare compilatoare pentru ASIC și ISE Xilinx sau Quart Altera pentru FPGAs . Sintetizator produce un netlist , care este un fișier VHDL sau Verilog de cazuri de celule ale tehnologiei pe care circuitul digital este „cartografiate“. Tehnologia este de obicei cea a circuitelor integrate FPGA sau CMOS. Există, de asemenea, sintetizatoare gratuite, cum ar fi Alliance VHDL sau MVSIS.

În timpul execuției întregului flux de proiectare, simulări sunt efectuate pentru a verifica dacă congruența dintre diferitele modele de comportament, RTL și netlist este menținută. Pentru a realiza aceste simulări este utilizat un banc de test, de asemenea , scrise în VHDL, care are funcția de generare a stimulilor la intrările circuitului și verificarea corectitudinii rezultatelor.

Concepte fundamentale

Construcțiile VHDL pot fi împărțite în două clase: constructe paralele și constructe secvențiale.

Constructe paralele sunt executate ori de câte ori cel puțin una dintre intrările de stat se schimbă; cel mai simplu exemplu este descrierea unei AND poarta:

 Z <= A și B; 
- dacă A sau B schimbă valoarea, Z își asumă noua valoare după un interval delimitat infinitesimal (aceasta este pentru a diferenția tipul de semnal de date de tipul de date variabile). Dacă Z ar fi o variabilă, s-ar schimba instantaneu

Procesele sunt folosite pentru a descrie funcții mai complexe; de exemplu , pentru a descrie un flip-flop vom scrie:

 Flipflop: proces (ceas, reset) - Procesul este executat în cazul în care cel puțin unul dintre semnalele de ceas și resetare modifică valoarea
începe
dacă (= resetare '1') atunci
  Q <= '0';
elsif (ceas „eveniment și ceas =“ 1 ') , atunci
  Q <= D;
în cazul în care se încheie;
procesul se încheie;

Toate procesele dintr-un cod VHDL acționează ca și cum ar fi rulate în același timp. De exemplu, presupunând că aveți multe procese care descriu fiecare un flip-flop ca cel precedent, cu același ceas de comandă pentru toți, atunci când aveți marginea ascendentă a ceasului trebuie să vă imaginați că toate procesele rulează în același timp , deci „competitiv”. În cazul unui simulator de software, întrucât un computer efectuează un număr limitat de operații simultane, dacă nu doar una câte una, starea inițială este urmărită și procesele sunt simulate în ordine calculând efectul pe care l-ar fi avut dacă fusese paralel.

Constructe secvențiale sunt executate linie cu linie ca și în limbi de software. De exemplu, toate constructele dintr-un proces sunt executate secvențial (a se vedea exemplul de mai sus). Comenzile secvențiale includ dacă ... atunci ... altceva, caz, bucla de ... și altele.

Ultimul exemplu

Un exemplu de program în VHDL: sincron tip JK flip-flop

ieee bibliotecă;
utilizați ieee.std_logic_1164. toate;
  
entitate jk_ff este
  generic (prop_delay: Timp: 10 = ns); - timpul de propagare
  Port (clk: in std_logic; - semnal de ceas
        j: în std_logic;
        k: în std_logic;
        q: out std_logic; -- ieșirea
        q_n: out std_logic); - ieșirea refuzată
se încheie jk_ff;

Comportamentul arhitectura jk_ff este
  semnal outp: std_logic;
începe
  ff: proces (clk)   
  începe
    dacă (clk 'eveniment și clk =' 1 ') , atunci
      if (j = '1' și k = '0') atunci
        outp <= '1';
      elsif (j = '0' și k = '1') , atunci
        outp <= '0';
      elsif (j = '0' și k = '0') atunci
        null;
      elsif (j = '1' și k = '1') , atunci
        outp <= nu outp;
      în cazul în care se încheie;
    în cazul în care se încheie;
  termina procesul ff;
     
  q <= outp după prop_delay;
  q_n <= nu q după prop_delay;
termina comportamentale;

Arhitectura structurală a jk_ff este
  nand3 componente - NAND porți logice de apel
    Portul (a, b, c: în std_logic; - cu 3 intrări (nand3)
          q: out std_logic);
  se încheie componente;
    
  NAND2 componentă
    Portul (a, b: în std_logic; - sau 2 intrari (NAND2)
          q: out std_logic);
  se încheie componente;
    
  semnal sgn_1, sgn_2: std_logic; - semnalele interne sunt definite
    
începe - conexiunile sunt descrise
  nand3_a: port harta nand3 (a => j, b => clk, c => q_n, q => sgn_1);
  nand3_b: port harta nand3 (a => k, b => clk, c => q, q => sgn_2);
  nand2_a: NAND2 port harta (a => sgn_1, b => q_n, q => q);
  nand2_b: NAND2 port harta (a => sgn_2, b => q, q => q_n);
termina structural;

Alte proiecte

linkuri externe

Controlul autorității LCCN (RO) sh89002702