HDL Draft Curs4

download HDL Draft Curs4

of 70

Transcript of HDL Draft Curs4

  • 7/25/2019 HDL Draft Curs4

    1/70

    Limbaje de descriere hardware (HDL)

    Considerente privind VHDL si Verilog

  • 7/25/2019 HDL Draft Curs4

    2/70

    Aplicatii ale HDL

    Limbajele de descriere hardware (HDL - Hardware Description Language) sunt limbaje

    dezvoltate si optimizate pentru a descrie comportamentul sistemelor digitale.

    modelul in HDL poate fi

    refolosit pentru mai multe

    proiecte

  • 7/25/2019 HDL Draft Curs4

    3/70

    VHDL (VHSIC HDL - Very High Speed Integrated Circuit Hardware Description

    Language) - standard IEEE 1076 din 1987. A fost refacut in 1993, devenind " standard IEEE

    1076 /1993".

    Verilog HDL este mai vechi decat VHDL si este utilizat intensiv din 1983. A devenit IEEEstandard 1364 I /1995.

    Pentru a modela hardware in orice limbaj HDL sunt importante 2 aspecte: comportamentul

    abstract si structura hardware.

    VHDL/Verilog comparatie

    Capabilitatea:Structura hardware poate fi modelala in ambele tipuri de limbaj. Alegerea unui tip de limbaj

    se face in functie de preferinta personala, disponibilitate in uneltele de dezvoltare etc.

    Figura 1. HDL capabilitati de modelare infunctie de nivelul de abstractizare

  • 7/25/2019 HDL Draft Curs4

    4/70

    CompilareaVHDL.

    Multiple unitati de design (perechi entitate/arhitectura = entity/architecture), care se afla in

    acelasi fisier sistem, pot fi compilate separate. Un design bine proiectat va avea fiecare unitate

    in alt fisier.

    Verilog.

    Trebuie tinut cont de ordinea in care se face compilarea codului scris intr-un singur fisier si

    compilarea mai multor fisiere. Rezultatele simularii se pot schimba prin simpla schimbare a

    ordinii compilarii.

    Tipuri de dateVHDL.

    Se pot folosi mai multe tipuri de date definite in limbaj cat si definite de utilizator. Exista

    functii dedicate care fac conversia dintr-un tip in alt tip de date. VHDL este preferat, deoarece

    ofera o flexibilitate mai mare.

    Verilog.

    Comparat cu VHDL, tipurile de date din Verilog sunt mai simple, usor de folosit si apropiate

    modelarii structurii hardware in opozitie cu modelarea hardware abstracta.

    Nu sunt premise tipuri de date definite de utilizator.

    Exemplu de tipuri de date: net, wire, reg (registru).

  • 7/25/2019 HDL Draft Curs4

    5/70

    Reutilizarea design-uluiVHDL. Procedurile si functiile pot fi plasate in pachet (package) astfel incat sa fie disponibile

    pentru orice design.

    Verilog. Nu exista un concept de pachet ca in VHDL. Functiile si procedurile utilizate intr-un

    model trebuie definite in modul. Pentru a le face accesibile din diferite module, se vor plasa infisiere separate si incluse unde este nevoie prin folosirea directivei de compilare include .

    Usurinta de invatareVerilog este probabil mai usor de invatat. VHDL poate parea mai putin intuitiv dar dupa

    invatare este mai robust, mai puternic. Sunt mai multe posibilitati de a modela acelasi circuit,

    mai ales pentru structuri mari, ierarhice.

    Constructii de nivel inaltVHDL. Sunt mai multe posibilitati in modelarea de nivel inalt in VHDL decat in Verilog. Tipul

    de date abstract poate fi folosit cu urmatoarele declaratii:

    * package pentru reutilizarea modelului,

    * configuration - configurare structura design,

    * generate pentru structuri repetitive,

    * generic model generic care poate fi caracterizat individual, de exemplu latimea unui vector

    Toate aceste declarati din limbaj sunt utile in sintetizarea unui model.

    Verilog. In afara de parametrizarea unui model prin supraincarcarea parametrilor, nu exista

    echivalent pentru modelare de nivel inalt.

  • 7/25/2019 HDL Draft Curs4

    6/70

    Extensia de limbajVHDL. Are un atribut denumit 'foreign care permit arhitecturilor si subprogramelor sa fie

    modelate in alte limbaje.

    Verilog. Foloseste Programming Language Interface (PLI) mecanism de interfata intre

    modelul Verilog si uneltele de dezvoltare pentru Verilog. Un vanzator de unelte pentru Verilog

    poate specifica functii in limbajul C si apelarea din descrierea surselor in Verilog.

    Utilizarea acestor functii speciale va face ca modelele sa fie nestandard si se poate sa nu poata

    fi folosite de alte unelte Verilog. Utilizarea nu este recomandata.

    Biblioteci

    VHDL. O biblioteca este pentru a stoca entitati compilate, arhitecturi, pachete si configuratii.Sunt utile pentru proiecte cu multiple design-uri.

    Verilog. Nu exista conceptul de biblioteca in Verilog. Aceasta se datoreaza faptului ca la

    origini este un limbaj interpretativ.

    Constructii de nivel low levelVHDL. Operatori logici simpli pentru 2 intrari care sunt construiti in limbaj: NOT, AND, OR,

    NAND, NOR, XOR si XNOR. Orice specificare de timp trebuie facuta dupa clauza after.Verilog. Verilog a fost dezvoltat avand la baza modelarea la nivel de poarta. Example: User

    Defined Primitive(UDP), tabele de adevar si blocuri pentru specificarea intarzierilor intr-un

    modul.

  • 7/25/2019 HDL Draft Curs4

    7/70

    Gestionarea proiectelor mariVHDL. Declaratiile configuration, generate, generic si package sunt foloste pentru a gestiona

    proiecte mari.

    Verilog. Nu exista declaratii care sa ajute gestionarea proiectelor mari.

    OperatoriMajoritatea operatorilor sunt la fel in cele 2 limbaje. Verilog are operatori unari de reducere,

    ceea ce in VHDL se rezolva prin bucle. VHDL are modul operator care nu este si in Verilog.

    Parametrizarea modelelor.

    VHDL. Un model specific de o anumite latime de biti poate fi instantiat printr-un model generic

    de n-bit, folosind o declaratie de tip generic. Modelul generic nu va fi sintetizabil decat dacaeste instantiat si este data valoarea generica.

    Verilog. O latime specifica de bit intr-un model poate fi instantiata de la un model generic n-bit

    folosind suprascrierea parametrilor. Modelul generic trebuie sa aiba o valoare implicita definita.

    Proceduri si task-uri

    VHDL permite apelarea procedurilor concurente. Verilog nu permite apelul concurent.

    Usurinta intelegerii codului

    VHDL este un limbaj concis cu radacini in limbajul Ada. Verilog este mai apropiat de C

    deoarece constructia lui este 50% C si 50% Ada.

  • 7/25/2019 HDL Draft Curs4

    8/70

    Replicarea structurala

    VHDL. Declaratiagenerate statement permite folosirea unui numar de instante ale aceluiasi

    design si conectarea potrivita a acestora.

    Verilog. Nu are un echivalent pentrugenerate.

  • 7/25/2019 HDL Draft Curs4

    9/70

    VHDL Bazele limbajului

    Limbajele HDL au doua atributii principale:

    Modelare (simulare)

    Descriere (sinteza)

    VHDL are foarte multe capabilitati pentru a descrie comportarea componentelor electronice

    de la porti logice pana la microprocesoare. (Se pot descrie fronturile crescatoare si respectiv

    descrescatoare ale semnalelor, intarzierile prin porti, operatii functionale).

    VHDL furnizeaza 2 clase de

    obiecte care pot fi folosite

    pentru modelare in hardware

    Concepte fundamentale:concurenta si ierarhia

  • 7/25/2019 HDL Draft Curs4

    10/70

    VHDL Aria de utilizare

    Hardware design

    ASIC: technology mapping

    FPGA: CLB mapping

    Solutii standard, modele, descrieri comportamentale

    Software designVHDL - C interface (unelte specifice)

    cercetare (hardware/software co-design). Intrebarea care se pune este ce parte

    trebuie implementate in software si ce parte in hardware. (constrangerile vor fi

    date de performante, cerinte si pret)

  • 7/25/2019 HDL Draft Curs4

    11/70

    Standarde pentru limbajul VHDL

    VHDL este construit prin folosirea mai multor standarde IEEE:

    IEEE std 1076-1987 primul standard VHDL. Este referit prin abrevierea VHDL 87.

    IEEE std 1076-1993 al doilea standard VHDL. Este referit prin abrevierea VHDL 93.

    IEEE std 1164-1993 - package STD_LOGIC_1164. Include tipuri referitoare la hardware si functii de

    conversie.

    IEEE std 1076a - imbunatateste folosirea variabilelor partajate

    IEEE std 1076.1 VHDL-AMS, - standard extins pentru analogic.

    IEEE std 1076.2 pachete matematice. Este divizat intr-un pachet pentru numere reale si alt pachetpentru imaginare.

    IEEE std 1076.3 operatori si tipuri descrisi pentru sinteza.

    IEEE std 1076.4 VITAL (VHDL Initiative Towards ASIC Libraries). De exemplu folosit pentru

    specificarea timpilor pentru simulare

    IEEE std 1076.5 modelarea bibliotecilor in VHDL.

    IEEE std 1076.6 defineste partea pentru sinteza RTL.

  • 7/25/2019 HDL Draft Curs4

    12/70

    Execution of assignments:

    Sequential

    Concurrent

    Methodologies: tehnici demodelare

    Abstraction

    Modularity

    Hierarchy

    Se executa consecutiv, ca la orice limbaj de programare. Este importanta ordinea in care

    apar atribuirile si declaratiile.

    Declaratiile sunt active continuu, ordinea nu este importanta. Sunt potrivite pentru modele

    paralele.

    Concepte VHDL: concurenta si ierarhia

  • 7/25/2019 HDL Draft Curs4

    13/70

    Abstractizare permite descrierea diferitelor parti din sistem. Informatia care este prea in

    detaliu si nu este importanta pentru descriere va fi indepartata. Nivelul de abstractizare este

    caracterizat de informatii comune pentru toate modelele de la acest nivel.

    Nivelul de abstractizare in proiectarea IC

    La nivelul comportamental se descrie functionarea modelului. Nu exista clock pentru

    sistem, tranzitii ale semnalelor etc. Uzual, este simulabil, nu si sintetizabil.

    Register Transfer Level (RTL) designul este divizat in elemente de logica combinationala

    si elemente de stocare. Elementele de stocare (Flip Flops (FFs), latches) sunt controlate de un

    ceas al sistemului. Descrierea la nivel RT este numita descriere sintetizabila.

    La nivel logic, design-ul este reprezentat ca o lista de legaturi cu porti logice (AND, OR,NOT, ) si elemente de stocare.

  • 7/25/2019 HDL Draft Curs4

    14/70

    Descrierea comportamentala in VHDL

    o

  • 7/25/2019 HDL Draft Curs4

    15/70

    RT Level in VHDL

    In VHDL comportamentul functional este modelat folosind procesul (processes).

    La nivel RT:

    proces combinational pur

    proces comandat de ceas (implica FF si pot fi descrisi in termeni de masini de stare)

  • 7/25/2019 HDL Draft Curs4

    16/70

    Gate Level in VHDL

    Fiecare elemnt al circuitului (ex. U86) este instantiat ca si componenta (ND2) si esteconectata la semnalele corespunzatoare (n192, n191, n188). Fiecare poarta folosita

    apartine unei biblioteci unde se gasesc si informatii aditionale cum ar fi aria, intarzierile de

    propagare, capacitate etc.

  • 7/25/2019 HDL Draft Curs4

    17/70

    Modularitatea si ierarhia

    Modularitatea - Se partitioneaza blocuri functionale mari in unitati mici. Existenta subsistemelor

    permite mai multor proiectanti sa lucreze in paralel la acelasi proiect.Ierarhia un design poate fi alcatuit din module care la randul lor contin sub-module. Un nivel ierarhic

    poate contine unul sau mai multe module cu un grad diferit de abstractizare .

    Modularitatea si ierarhia permit organizarea unui proiect.

  • 7/25/2019 HDL Draft Curs4

    18/70

    Procesul de proiectare incepe cu faza de specificare. Componenta care este proiectata este

    definita in ceea ce priveste functiile, interfata etc.

    Modulele continute trebuie definite la nivel de sistem (system level). Se descrie interfata (intrari,

    iesiri, formatul datelor), marimea clock-ului, mecanismul de reset. Pe baza acestei informatii se

    poate implementa si modelul de simulare. Modelul comportamental poate fi integrat in sistem

    folosind modele deja existente.

    La nivel logic (logic level) - modelul trebuie descris avand in vedere toate aspectele necesare

    pentru a fi sintetizabil. In urma sintezei din descrierea modelului abstract se deriva functiile

    boolean si se mapeaza elementele in blocurile logice configurabile ale FPGA sau in biblioteca de

    porti pentru ASIC. Rezultatul este o lista de legaturi, netlist la nivel de poarta - gate level

    Fiecare tranzitie la un nivel de abstractizare de nivel mai scazut va fi verificat prin validari

    functionale (validation). Pentru acest scop, se simuleaza descrierea in asa fel incat pentru toti

    stimulii (=semnale de intrare pentru simulare) se compara cu raspunsurile modulului.

    VHDL este potrivit pentru proiectare de la system level la gate level.

  • 7/25/2019 HDL Draft Curs4

    19/70

  • 7/25/2019 HDL Draft Curs4

    20/70

    Numai un subset al limbajului VHDL este sintetizabil!

  • 7/25/2019 HDL Draft Curs4

    21/70

    Comentarii: '--' pana la sfarsitul liniei

    Declaratiile se termina cu ';

    Delimitator lista ','Atribuire semnal: '

  • 7/25/2019 HDL Draft Curs4

    22/70

    Elemente structurale VHDL

    Entity : descrie o interfata constituita dintr-o lista de porturi

    Architecture : descrie functia unui modul corespunzator

    Configuration : model, structura, ierarhie (in general este utilizata pentru simulare)

    Process : permite o executie secventiala - eveniment controlat

    Package : pentru design modular. Contine: solutii standard, tipuri de date, constante

    Library : o colectie de unitati compilate VHDL (cod obiect)

    Plasarea declaratiilor pentru diferite obiecte in VHDL

    Ex. declararea

    unui port este

    permisa numaiin entitate

  • 7/25/2019 HDL Draft Curs4

    23/70

    Entitate si arhitectura(Entitie/ Architectures)

    Fiecare descriere a unui design in VHDL va contine cel putin o pereche entity/architecture

    ( referita si ca design entity).

    entity descrie circuitul asa cum apare din exterior, din perspectiva interfetei intrare/iesire. Se va

    furniza interfata completa a circuitului (numele, directia si tipul de date pentru fiecare port).

    architecture orice entitate va avea o arhitectura corespunzatoare care va descrie functiaacesteia. Orice este declarat in entitate, va fi automat accesibil in arhitectura.

  • 7/25/2019 HDL Draft Curs4

    24/70

  • 7/25/2019 HDL Draft Curs4

    25/70

    Structura generala a

    arhitecturii

  • 7/25/2019 HDL Draft Curs4

    26/70

    Un modul poate fi alcatuit din mai multe sub-module. Conexiunea dintre submodule este definita

    intr-o arhitectura de tip top module . Exemplu: un modul fulladder poate fi realizat din 2

    module halfadders (module1, module2) si o poarta OR (module3).O arhitectura structurala va contine o lista de componente si definirea interconexiunilor.

    Conectare ierarhica

    D l i i i i

  • 7/25/2019 HDL Draft Curs4

    27/70

    Declararea si instantierea unei componente

  • 7/25/2019 HDL Draft Curs4

    28/70

    Instantierea componentelor : Asocierea numelor semnalelor

  • 7/25/2019 HDL Draft Curs4

    29/70

    Un proces care este privit ca un intreg este

    tratat concurent, ca orice declaratie dintr-o

    arhitectura

  • 7/25/2019 HDL Draft Curs4

    30/70

    Exemplu proces:

  • 7/25/2019 HDL Draft Curs4

    31/70

    Exemplu proces:

  • 7/25/2019 HDL Draft Curs4

    32/70

    Exemplu proces:

  • 7/25/2019 HDL Draft Curs4

    33/70

  • 7/25/2019 HDL Draft Curs4

    34/70

  • 7/25/2019 HDL Draft Curs4

    35/70

    package colecteaza declaratii folosite in mod global pentru diferite unitati de design Este alcatuit

  • 7/25/2019 HDL Draft Curs4

    36/70

    package colecteaza declaratii folosite in mod global pentru diferite unitati de design. Este alcatuitdin: declaratii de tip, constante, sub-programe etc. Acestea vor fi vizibile in orice unitate de design dintr-

    un proiect si pot fi compilate intr-o biblioteca pentru o utilizare ulterioara. Consta din 2 parti: parte

    declarativa si optional dintr-un corp. Se va folosi use pentru a putea fi folosit in unitatile de design.

    Exemplu:

  • 7/25/2019 HDL Draft Curs4

    37/70

  • 7/25/2019 HDL Draft Curs4

    38/70

    Biblioteci (library)

  • 7/25/2019 HDL Draft Curs4

    39/70

    Model de comunicare VHDL

    Toate procesele se executa paralel, fara sa conteze entitatea sau nivelul ierarhic unde sunt

    localizate. Comunica intre ele prin intermediul semnalelor. (signals)

    Obi i i d d i i

  • 7/25/2019 HDL Draft Curs4

    40/70

    Obiecte, tipuri de date si operatori

    Obiectele(objects) folosite pentru a reprezenta si stoca date.

    Tipuri de baza (folosite la descrierea unui design pentru sinteza sau folosite pentru a crea

    teste functionale unde de test): signals, variablessi constants (semnale, variabile siconstante)

    Fiecare obiect declarat are un tip de date specific - data type (cum ar fi bit sau integer) cu

    un set unic de posibile valori.Exemplu: un obiect de tip bit poate avea numai doua valori

    posibile, '0' si '1',

    Nota: Simbolul VHDL

  • 7/25/2019 HDL Draft Curs4

    41/70

    Tipuri de date Standard Logic

    Standard Logic IEEE 1164

    Pachetul std_logic_1164 este compilat intr-o biblioteca numita ieee, si include urmatoarele

    tipuri de date:

    Type Std_ulogic reprezinta un singur fir (wire) care poate avea diferite valori logice

    std_ulogic este un tip enumerare similar cu tipul bit din standardul 1076. Este un tip de

    date unresolved . Un semnal de acest tip poate avea numai un singur driver,

    Tipul std_ulogic_vector

  • 7/25/2019 HDL Draft Curs4

    42/70

    p g

    Reprezinta o colectie de fire (wire) sau un bus de marime arbitrara.

    type std_ulogic_vector is array ( natural range ) of std_ulogic;

    Std_ulogic_vector reprezinta o arie de std_ulogic, si este analog cu tipul standard

    bit_vector.

    Tipul Std_logic

    Este un tip de date resolved bazat pe std_ulogic (este un sub-tip), cu urmatoarea

    declaratie: subtype std_logic is resolved std_ulogic;

    In cazul driverelor multiple, cele noua valori std_logic sunt rezolvate cu valori dupa cum

    urmeaza: ("std_logic" permite existenta driverelor multiple pentru un semnal simplu)

    Tipul Std_logic_vector type std_logic_vector is array ( natural range ) of std_logic;

  • 7/25/2019 HDL Draft Curs4

    43/70

  • 7/25/2019 HDL Draft Curs4

    44/70

  • 7/25/2019 HDL Draft Curs4

    45/70

  • 7/25/2019 HDL Draft Curs4

    46/70

  • 7/25/2019 HDL Draft Curs4

    47/70

  • 7/25/2019 HDL Draft Curs4

    48/70

  • 7/25/2019 HDL Draft Curs4

    49/70

    Operatori standard:

  • 7/25/2019 HDL Draft Curs4

    50/70

    Valorile, semnalele si variabilele unui tip pot fi combinate in expresii prin folosirea operatorilor

    Exemplu: Descrierea unui comparator folosind IEEE 1164 standard logic

  • 7/25/2019 HDL Draft Curs4

    51/70

    comentariu

    declarare library se incarca biblioteca IEEE.

    Use - specifica ce anume din biblioteca ieee

    este disponibil pentru design-ul realizat

    (declarat prin antitate si arhitectura). Forma

    generala include 3 campuri, separate prin

    punct.

    std_logic si std_logic_vector, sunt tipuri de

    date standard din IEEE 1164 standard si in

    biblioteca asociata IEEE

    Descrie functionalitateacomparatorului

  • 7/25/2019 HDL Draft Curs4

    52/70

  • 7/25/2019 HDL Draft Curs4

    53/70

  • 7/25/2019 HDL Draft Curs4

    54/70

    ANEXE

    Problema: Realizarea unui algoritm si a unui circuit care realizeaza operatia de aflare a celui mai

    di i S f l i li b j l VHDL V il C

  • 7/25/2019 HDL Draft Curs4

    55/70

    mare divizor comun. Se vor folosi limbajele VHDL, Verilog, C

    1) Se vor realiza la nivel de algoritm 3 algoritmi care vor determina cel mai mare divizor comun (Greatest

    Common Divisor (GCD)) in C si in 2 limbaje de descriere hardware: VHDL si Verilog.

    2) Se vor modela algoritmii GCD la nivelul RTL pentru sinteza in ambele tipuri de limbaje HDL, VHDL siVerilog. Modelul trebuie sa fie generic, astfel incat sa fie aplicabil pt diferite latimi de biti.

    Semnalul Load indica cand datele de intrare sunt valide

    Semnalul led Done va fi activat in momentul ibn care datele de iesire sunt valide

    Modelul Generic se va verifica pentru semnale de 8 biti..

    3) Se vor face testari ale modelelor: 1) la nivel de algoritm se va folosi acelasi fisier 2). Se vor instantia

    ambele modele RTL si la nivel de porta sintetizabila si se vor simula si testa in acelasi timp.

    Fisierul de test:

    file: gcd_test_data.txt file: gcd_test_data_hex.txt

    21 49 7 15 31 7 // Decimal 21 49 7

    25 30 5 19 1E 5 // Decimal 25 30 5

    19 27 1 13 1B 1 // Decimal 19 27 1

    40 40 40 28 28 28 // Decimal 40 40 40

    250 190 10 FA 6E A // Decimal 250 190 10

    5 250 5 5 FA 5 // Decimal 5 250 5

    Algoritmul folosit este dupa cum urmeaza:

    http://gcd_test_data_hex.txt/http://gcd_test_data.txt/
  • 7/25/2019 HDL Draft Curs4

    56/70

    Algoritmul modelat in C

    #include

    main ()

    {

  • 7/25/2019 HDL Draft Curs4

    57/70

    {

    int A_in, B_in, A, B, Swap, Y, Y_Ref, Passed;

    FILE *file_pointer;

    file_pointer = fopen("gcd_test_data.txt", "r");

    Passed = 1;

    while (!feof(file_pointer))

    {/*------------------------------------*/

    /* Read test data from file */

    /*------------------------------------*/

    fscanf (file_pointer, "%d %d %d\n", &A_in, &B_in, &Y_Ref);

    /*----------------------------------*/

    /* Model GCD algorithm */

    /*----------------------------------*/

    A = A_in;

    B = B_in;

    if (A != 0 && B != 0){

    while (B != 0)

    {

    while (A >= B)

    {

    A = A - B;

    }

    Swap = A;

    A = B;

    B = Swap;

    }

    }

    else

    {

    A = 0;

    }

    Y = A;

    /* */

  • 7/25/2019 HDL Draft Curs4

    58/70

    /*------------------------------*/

    /* Test GCD algorithm */

    /*------------------------------*/

    if (Y != Y_Ref)

    {

    printf ("Error. A=%d B=%d Y=%d Y_Ref= %d\n", A_in, B_in, Y, Y_Ref);

    Passed = 0;

    }

    }

    if (Passed = 1) printf ("GCD algorithm test passed ok\n");

    }

    Algoritmul descris in VHDL

    Modelul in VHDL urmareste principiul din C. Cand se citesc valorile intregi din fisierul de test,

    acestea vor fi introduse intr-o variabila nu vor putea fi citite si assignate unui semnal Rezultatele

  • 7/25/2019 HDL Draft Curs4

    59/70

    acestea vor fi introduse intr o variabila, nu vor putea fi citite si assignate unui semnal. Rezultatele

    vor fi inscrise intr-un fisier. Deoarece este la nivel de algoritm, entitatea folosita nu va contine nici

    intrari si nici iesiri.

    VHDL algorithmic level model

    library STD;

    use STD.TEXTIO.all;

    entity GCD_ALG is

    end entity GCD_ALG;

    architecture ALGORITHM of GCD_ALG is

    --------------------------------------------

    -- Declare test data file and results file

    --------------------------------------------

    file TestDataFile: text open

    read_mode is "gcd_ test_data.txt";

    file ResultsFile: text open write_mode is

    "gcd_alg_test_results.txt";

    begin

    GCD: process

    variable A_in, B_in, A, B, Swap, Y, Y_Ref: integer range 0 to 65535;

    variable TestData: line;

    variable BufLine: line;

    variable Passed: bit := '1';

    begin

    while not endfile(TestDataFile) loop

    --------------------------------------- Read test data from file

    -------------------------------------

    readline(TestDataFile, TestData);

    read(TestData, A_in);

    read(TestData, B_in);

    read(TestData, Y_Ref);

    ------------------------------------

    -- Model GCD algorithm

  • 7/25/2019 HDL Draft Curs4

    60/70

    ode GC a go t

    ------------------------------------

    A := A_in;

    B := B_in;

    if (A /= 0 and B /= 0) then

    while (B /= 0) loop

    while (A >= B) loop

    A := A - B;end loop;

    Swap:= A;

    A := B;

    B := Swap;

    end loop;

    else

    A := 0;

    end if;

    Y := A;

    ---------------------------------

    -- Test GCD algorithm

    ---------------------------------if (Y /= Y_Ref) then -- has failed

    Passed := '0';

    write(Bufline, st ring'("GCD Error: A="));

    write(Bufline, A_in);

    write(Bufline, string'(" B="));

    write(Bufline, B_in);

    write(Bufline, string'(" Y="));

    write(Bufline, Y);

    write(Bufline, string'(" Y_Ref="));

    write(Bufline, Y_Ref);

    writeline(ResultsFile, Bufline);

    end if;

    end loop;

    if (Passed = '1') then -- has passed

    write(Bufline, string' ("GCD algorithm test has passed"));

    writeline(ResultsFile, Bufline);

    end if;

    end process;

    end architecture ALGORITHM;

    Algoritmul in Verilog

    Modelul Verilog va urma de asemenea principiile descrise in C.

    O dif t j t V il t iti l i i l di t fi i D t l itit di t

  • 7/25/2019 HDL Draft Curs4

    61/70

    O diferenta majora este aceea ca Verilog nu poate citi valori zecimale dintr-un fisier. Datele citite dintr-unfisier sunt:

    1) citire folosind $readmemh sau $readmemb si

    2) stocarea in memorie. Datele de citire vor fi in format binary sau in hex. Se va folosi fisierul

    "gcd_test_data_hex.txt"

    Verilog algorithmic level model

    module GCD_ALG;

    parameter Width = 8;

    reg [Width-1:0] A_in, B_in, A, B, Y, Y_Ref;

    reg [Width-1:0] A_reg,B_reg,Swap;

    parameter GCD_tests = 6;

    integer N, M;

    reg Passed, FailTime;

    integer SimResults;

    // Declare memory array for test data

    // ----------------------------------

    reg [Width-1:1] AB_Y_Ref_Arr[1:GCD_tests*3];

    //----------------------------------

    // Model GCD algorithm

    //----------------------------------

    always @(A or B)

    begin: GCD

    A = A_in;

    B = B_in;

    if (A != 0 && B != 0)

    while (B != 0)

    while (A >= B) begin

    A = A - B;Swap = A;

    A = B;

    B = Swap;

    end

    else

    A = 0;

    Y = A;

    end

    //------------------------------

    // Test GCD algorithm

    //-----------------------------

  • 7/25/2019 HDL Draft Curs4

    62/70

    initial begin

    // Load contents of

    // "gcd_test_data.txt" into array.

    $readmemh("gcd_test_data_hex.txt", AB_Y_Ref_Arr);

    // Open simulation results file

    SimResults = $fopen("gcd.simres");Passed = 1;

    / Set to 0 if fails

    for (N=1; N

  • 7/25/2019 HDL Draft Curs4

    63/70

    Intrari: Clock, Reset_N si Load,

    Iesirea:Done.

    Cand Load este la nivel logic 1, datele de intrare sunt disponibile la iesire si se incarca in registri separati

    A_hold si B_ hold.

    Cand Done=1, semnifica ca s-a calculat cel mai mare divizor comun.Procesul va dura cativa cicli de ceas.

    Modelul se imparte in 3 procese process (VHDL) si/always (Verilog)

    I)primulprocess/always LOAD_SWAP. Presupune folosirea a doua registre care opereaza dupa cum urmeaza:

    1) Reset_N = 0, A_hold and B_hold = zero.

    2) Cand not 1) si Load = 1, datele in A si B sunt incarcate in A_hold si B_hold.

    3) Cand not 1) sau 2) si A_hold este mai mic decat B_hold, valorile in A_hold si B_hold sunt schimbate intreele,

    4) Cand not 1), 2) sau 3), A_hold este reincarcat cu aceeasi valoare. Valoarea A_hold - B_hold, din cel de aldoilea process/always statement, este incarcat in B_hold.

    II) al doileaprocess/always SUBTRACT_TEST.

    Primul iftesteaza daca A_hold este mai mare sau egal cu B_hold.

    Daca este asa, se face scaderea A_hold - B_hold, rezultatul este introdus in A_New care va fi incarcat inB_hold pe urmatorul front crescator al ceasului.

    Daca A_hold este mai mic decat B_hold, scaderea nu se face, A_New va avea valoarea B_hold, schimbarea

    va fi facuta dupa urmatorul front pozitiv al semnalului de ceas.

  • 7/25/2019 HDL Draft Curs4

    64/70

    Al doilea if verifica daca B_hold are valoarea 0.

    Daca da, semnalul Done=1, valoarea A_ hold este incarcata la iesirea Y prin intermediul unei functii de

    multiplexare.

    Problema este sintetizabila pentru un model generic cu semnale de 8 biti.In Verilog se seteaza parametrul Width=8. Nu mai nevoie de a fi instantiat separate inainte de a fi sintetizat.In VHDL se foloseste generic. Valoarea este specificata numai in momentul instantierii

    VHDL RTL model

  • 7/25/2019 HDL Draft Curs4

    65/70

    library IEEE;

    use IEEE.STD_Logic_1164.all, IEEE.Numeric_STD.all;

    entity GCD is

    generic (Width: natural);

    port (Clock,Reset,Load: in std_logic;

    A,B: in unsigned(Width-1 downto 0);

    Done: out std_logic;

    Y: out unsigned(Width-1 downto 0));

    end entity GCD;

    architecture RTL of GCD is

    signal A_New,A_Hold,B_Hold: unsigned(Width-1 downto 0);

    signal A_lessthan_B: std_logic;

    begin

    ----------------------------------------------------

    -- Load 2 input registers and ensure B_Hold < A_Hold

    ---------------------------------------------------

    LOAD_SWAP: process (Clock)

  • 7/25/2019 HDL Draft Curs4

    66/70

    begin

    if rising_edge(Clock) then

    if (Reset = '0') then

    A_Hold '0');

    B_Hold '0');

    elsif (Load = '1') then

    A_Hold

  • 7/25/2019 HDL Draft Curs4

    67/70

    SUBTRACT_TEST: process (A_Hold, B_Hold)

    begin

    -------------------------------------------------------

    -- Subtract B_Hold from A_Hold if A_Hold >= B_Hold

    ------------------------------------------------------

    if (A_Hold >= B_Hold) then

    A_lessthan_B

  • 7/25/2019 HDL Draft Curs4

    68/70

    parameter Width = 8;

    input Clock, Reset, Load;

    input [Width-1:0] A, B;

    output Done;

    output [Width-1:0] Y;

    reg A_lessthan_B, Done;

    reg [Width-1:0] A_New, A_Hold, B_Hold, Y;

    //--------------------------------------------

    ---------

    // Load 2 input registers and ensure B_Hold = B_Hold

    //--------------------------

    ------------------------

    if (A_Hold >= B_Hold) begin

    A_lessthan_ B = 0;

    A_New = A_Hold - B_Hold;

    end

    else begin

    A_lessthan_B = 1;

    A_New = A_Hold;

    end

    //--------------------------

    --------------------

    // Greatest common divisorfound if B_Hold = 0

    //--------------------------

    --------------------

    if (B_Hold == 0) begin

    Done = 1;

    Y = A_Hold;

    end

    else begin

    Done = 0;

    Y = 0;end

    end

    endmodule

    Referinte bibliografice:[1] Douglas J. Smith - VHDL & Verilog Compared & Contrasted - Plus Modeled Example Written in

  • 7/25/2019 HDL Draft Curs4

    69/70

    VHDL, Verilog and C

    [2] - http://www.vhdl-online.de/tutorial/englisch/t_13.htm

    [3] - Accolade VHDL Reference Guide - http://www.acc-eda.com/vhdlref/

    [4] Prof. Sherief Reda Division of Engineering, Brown University Spring 2007 - ReconfigurableComputing

    [5] - Dr. Gilles SASSATELLI- Lecture on Reconfigurable Technologies, 2009

    http://www.acc-eda.com/vhdlref/http://www.vhdl-online.de/tutorial/englisch/t_13.htmhttp://www.daneprairie.com/
  • 7/25/2019 HDL Draft Curs4

    70/70

    This document was created with Win2PDF available at http://www.daneprairie.com.The unregistered version of Win2PDF is for evaluation or non-commercial use only.

    http://www.daneprairie.com/http://www.daneprairie.com/http://www.daneprairie.com/http://www.daneprairie.com/