Sunteți pe pagina 1din 114

VHDL - continuare

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Cod sintetizabil in VHDL

VHDL este utilizat in mod frecvent pentru simularea design-ului


electronic si sinteza acestora.
Sinteza este procesul in care sursa VHDL este compilata si mapata in
tehnologii de genul FPGA sau ASIC.
Producatorii de FPGA ofera unelte de sinteza gratuit sau ieftine.
Uneltele pentru programare ASIC sunt in general foarte scumpe.

Nu toate constructiile VHDL sunt sintetizabile (desi sunt simulabile).


De exemplu: constructii care au explicit timpi, wait for 10 ns

subset al VHDL synthesizable = IEEE 1076.6

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Pachete gratuite pentru design si simulare care folosesc ambele
limbaje: VHDL/Verilog:

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Considerente privind procesul de proiectare (unelte software)
pentru Sisteme Reconfigurabile

Design Entry Realizarea design-ului


Se pot folosi mai multe tehnici pentru a introduce un design: prin realizarea
schemei, sau prin descriere a hardware-ului folosind un limbaj dedicat (HDL-
Hardware Description Language) sau prin combinarea celor doua metode.
O alta metoda, mai putin folosita si limitata de uneltele de dezvoltare, este prin
realizarea de masini de stari (state machine)
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Synthesis Sinteza = Este procesul prin
care se translateaza codul VHDL sau
Verilog intr-un format netlist. In
procesul de sinteza se verifica si sintaxa
codului si se analizeaza ierarhia in
design. Netlist-ul este salvat intr-un
fisier NGC( Native Generic Circuit)
(pentru Xilinx Synthesis Technology
(XST)).

Implementarea
Este un process care consta dintr-o secventa de 3 pasi:
1. Translate - translatarea
2. Map - maparea
3. Place and Route plasarea si rutarea

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
1. Translate este un process care combina toate intrarile din netlist
si constrangerile intr-un fisier care va contine logica design-ului.
Informatia este salvata ca un fisier NGD (Native Generic Database)
se foloseste programul NGD Build.
Constrangerile reprezinta alocarea porturilor din design la elemente
fizice (pini, butoane, switch-uri etc). Informatia este stocata intr-un
fisier UCF (User Constraints File).
Uneltele folosite pentru a crea sau modifica UCF - PACE, Constraint
Editor (editor de constrangeri)

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
2) Maparea este un process care divide intreg circuitul cu
elemente logice in sub-blocuri astfel incat sa se potriveasca cu
blocurile logice din FPGA. In acest process se potrivesc
elementele logice definite de fisierul NGD cu elementele FPGA
(Combinational Logic Blocks (CLB), Input Output Blocks (IOB))
si se genereaza fisierul NCD (Native Circuit Description) care
reprezinta fizic maparea design-ului in componentele FPGA. Se
foloseste in acest scop programul MAP.

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
3) Place and Route Se foloseste in acest scop programul
PAR. Procesul plaseaza sub-blocurile rezultate in procesul de
mapare in blocurile logice in mod corespunzator cu conectica
blocurilor logice si in functie de constrangeri.
Unealta PAR preia fisierul NCD (maparea) si il foloseste ca
intrare si produce a rutare completa. Iesirea fisierului NCD
constituie informatia de rutare.

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Device Programming Programarea circuitului
Design-ul trebuie incarcat in FPGA si pentru aceasta trebuie convertit intr-un format
astfel incat sa fie acceptat de catre circuit. Programul BITGEN realizeaza
conversia.Fisierul rutarii NCD este furnizat programului BITGEN care va genera un
stream (flux) de biti (un fisier cu extensia .BIT) care va fi folosit la configurarea
circuitului FPGA. Acest lucru se va realiza folosind un cablu (care va depinde de
tehnica folosita).

Verificare design-ului - Design Verification


Verificarea se poate face in diferite etape

Behavioral Simulation (RTL Simulation)


Este primul pas in simulare este realizata inainte de a face procesul de sinteza. Are
ca scop verificarea RTL (comportarea) codului si de a confirma ca design-ul se
comporta conform asteptarilor.
Simulare Behavioral se poate realiza pt design in VHDL sau Verilog. In acest process
se observa semnalele, variabilele, procedurile, functiile si se pot introduce
breakpoints. Este o simulare rapida si permite modificarea codului HDL daca este
cazul. Deoarece design-ul nu este inca sintetizat la nivel de porti, nu se cunosc timpii
si resursele utilizate.
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Functional simulation (Post Translate Simulation)

Simularea functionala da informatii despre operarea logica a


circuitului. Se poate verifica functionalitatea folosind acest process
dupa procesul de translatare. Daca functinalitatea nu este cea
asteptata, se modifica codul si se parcurg din nou pasii de
implementare.

Static Timing Analysis

Se face dupa procesele MAP sau PAR.


Raportul Post MAP timing listeaza intarzierile pentru caile de
semnal.

Raportul Post Place and Route timing informatii privind intarzierile


in intreg designul.
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Odat faza de rutare si plasare terminat un alt program va extrage
starea elementelor de comutaie din matricele de rutare i va
genera o descriere sub forma unui ir de bii (bitstream). ntr-o
descriere simplificatoare biii n 0 corespund unui comutator
deschis, iar cei in 1 unui comutator nchis (n realitate lucrurile
sunt mai complicate!). Fisierul de tip Bitstream generat poate fi
uneori transformat si intr-un fiier de tip JEDEC, fiier coninnd
i alte informaii, fiier a crui form i coninut sunt standardizate.
Fiierul Bitstream poate fi acum ncrcat (download) n circuitul
fizic (conectat n circuit i alimentat!) cu ajutorul unui program
dedicat i al unui dispozitiv de programare extern (JTAG
programmer). Dispozitivul de programare se conecteaz cu
circuitul reconfigurabil prin intermediul interfeei JTAG standard
i utilizeaz unul din porturile externe ale calculatorului gazd
(paralel, serial sau USB). Dup realizarea ncrcrii programrii,
circuitul reconfigurabil se va comporta conform descrierii din
sursa HDL.
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
ETAPE IN PROCESUL DE PROIECTARE
EXEMPLU UTILIZARE ISE PROJECT NAVIGATOR XILINX
Fisiere intrare (HDL, Schematic, ambele)

Sinteza

Implementare

Programare dispozitiv (generare .bit sau alta metoda spec.)

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Modul Schematic DESIGN ENTRY (1)

Se apeleaza
pentru a asocia
simboluri unor
module VHDL
Module VHDL
Aceste
simboluri pot fi
apoi inserate in
modulul
schematic

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
DESIGN ENTRY (2) Fisiere intrare (HDL, Schematic, ambele)

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
DESIGN ENTRY (3)
Fisiere intrare (HDL, Schematic, ambele)

Aici HDL
Este VHDL

Reguli specifice

Avantajos pentru
proiecte de
complexitate
mare permite
rapiditate in
dezvoltare
Nu este neaparat mai eficient decat descrierea schematica
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
SINTEZA (1)

Aici s-a sintetizat doar


Modulul leddcd.vhd

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
SINTEZA (2)

Pentru a sintetiza toate modulele implicate se activeaza modulul


top (din varful) din ierarhia de module in acel exemplu modulul .sch

Fisier NGC
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
IMPLEMENTARE ( 1- Translate)

Se iau in considerare constrangerile (UCF) => fisier NGD

IMPLEMENTARE ( 2 - Map)
Se identifica si se aloca CLB, IOB, etc. din FPGA conform net-list
generat anterior

Se poate utiliza Modelsim pentru


analiza statica a propagarilor

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
IMPLEMENTARE ( 3 Place and Route)

Permite vizualizarea alocarii


pe FPGA aintregului proiect

Permite analiza puterii consumate


Alte utilitare, aici se poate face o simulare care include si
timpii specifici de propagare (post-Place and Route) cea
mai exacta, care precede simularea functionala (pe chip)
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Generate Programming File

iMPACT software pentru configurare care permite


configurarea circuitelor reconfigurabile folosind 2 procedee:
Xilinx Slave Serial (Single Bit Serial) - Two-line
implementation with performance up to 66 Mbits.
JTAG (IEEE 1149.1) = (Boundary Scan mode) foloseste o
interfata cu 4 fire, folosita pentru testare si diagnosticare

iMPACT foloseste mai multe tipuri de cabluri:


Parallel Cable IV
Platform Cable USB II

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
$125.00

Xilinx Parallel Cable IV cablul se conecteaza pe portul paralel al


PC-ului si la sistemul care se configureaza prin intermediul portului
JTAG. Se poate programa circuitul, se asigura suport pentru debug, si
control al executie.
Hardware debugger (on-chip debugger) = ChipScope tool.

Joint Test Action Group (JTAG) - IEEE 1149.1 Standard Test


Access Port and Boundary-Scan Architecture
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Interfata JTAG o interfata speciala cu 4/5 pini adaugati unui chip.
Mai multe circuite pe o placa pot avea linii JTAG conectate impreuna
(daisy-chained).
Pinii portului JTAG sunt:
1.TDI (Test Data In)
2.TDO (Test Data Out)
3.TCK (Test Clock)
4.TMS (Test Mode Select)
5.TRST (Test Reset) optional.

Test Access Ports (TAPs)


Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
$225.00

Platform Cable USB II - cablu compatibil cu portul USB folosit la


configurarea si programarea in-circuit pentru toate circuitele Xilinx
(PROM, FPGA, CPLD).
Este folosit si la debug pentru embedded software si firmware
(program microcontroler) foloseste aplicatii de la Xilinx, cum ar fi
Embedded Development Kit si ChipScope Pro Analyzer.
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Exemplu: Alocarea resurselor in diferite arhitecturi FPGA

Prin utilizarea aceluiasi cod .vhd pentru circuite din familii


diferite (Xilinx Project Navigator ISE6 10

Inmultitor de 4x4 biti -> rezultat pe 8 biti

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
CPLD
144 macro-cells

Concl: se poate implementa


Si pe CPLD-ul cel mai ieftin
Cu 36 macrocell

Fit este echivalentul Place and Route la FPGA


Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Fitter report ->

Din 2 FB-uri (Functional


Blocks)

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Dublu click pe un anume MC (macro cell) - CPLD

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Double click -> schema de detaliu

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
ECS
Element de biblioteca
(nu mai este detaliata schema
la nivel de porti)

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Este direct alocat un inmultior disponibil in arhitectura Spartan 3

De comparat cu CPLD

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Se mentine functia
de biblioteca

De comparat cu Spartan 3
(! Mai putine porti !!)
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Detaliu alocarea resurselor pe FPGA

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Pentru aceasta familie de circuite se poate face si o analiza a
puterii consumate

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Cele din fam. Virtex sunt
mai scumpe

Situatie similara cu cea de la Spartan 3 de ce ?


S-a alocat un inmultitor de 18x18 biti

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Alocarea pe chip (aplicatia Floorplanner)
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Efectul acestei alocari nerationale:
- un circuit scump, ineficient folosit
- putere consumata 411 mW !! (fata de 24 in cazul Spartan 2)

Morala: Nu intotdeauna FPGA/CPLD cu arhitecturi complexe sunt


cele mai adecvate unei aplicatii. Este necesar un astfel de studiu
inainte de a alege o anumita arhitectura.
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
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, variables si constants (semnale,
variabile si constante)
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 <= - reprezinta operatorul de atribuire (asignare) (atribuie valoarea
din partea dreapta pentru variabila din partea stanga )
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
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,
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Tipul std_ulogic_vector 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;


Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
1) High impedance = hi-Z, tri-stated, floating starea unei iesiri care
nu este comandata de catre circuit. Semnalul nu este nici high nici
low este in stare "tristated = "floating" wire
In circuitele digitale, un fir cu high impedance are o tensiune in
jurul valorii de 0 sau chiar mai mica. Pentru a verifica ca un fir este
in stare hi-Z, se foloseste un rezistor pull-up cu rol de a conecta firul
la high sau low. Un semnal non-hi-Z nu va putea fi conectat la high
sau low in acest fel.

2) Referitor la limbajele HDL amanunte se gasesec la:


http://www.asic-world.com/
Tutoriale Verilog - http://www.asic-
world.com/verilog/veritut.html
Exemplu: Detalii despre operatorii de egalitate
(http://www.asic-world.com/verilog/operators.html)

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Operatori standard:
Valorile, semnalele si variabilele unui tip pot fi combinate in expresii prin folosirea
operatorilor

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Instructiuni conditionale (de control ) descriu functii
combinationale, indica prioritati in operatii, sau specifica alte
comportamente de high-level
If-Then-Else

if first_condition then if outer_condition then


statements statements
elsif second_condition then else
statements if inner_condition then
else statements
statements end if;
end if; end if;
Se pot folosi mai multe niveluri
de declaratii if-then-else

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Conditia specificata intr-o constructie de tipul if-then-else
trebuie sa evalueze un tip Boolean.

procedure Mux(signal A, B, S: in std_logic;


signal O: out std_logic) is
if S = '1' then CORECT!
begin
O <= B;
if S then -- Error: S is not Boolean!
else
O <= B;
O <= A;
else
end if;
O <= A;
end Mux;
end if;
end Mux;

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Case Statements
Poate fi folosita ca o constructie alternativa la if then- else

case control_expression is
when test_expression1 =>
statements
when test_expression2 =>
statements
when others =>
statements
end case;
Expresiile de test trebuie sa fie mutual exclusive, nu pot fi adevarate in acelasi
timp 2 expresii de test. Diferenta fata de if then-else consta in faptul ca cea
din urma implica o prioritate a conditiile, in timp ce pentru instructiunea
case acest lucru nu este valabil.
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Bucle FOR permite specificarea unui numar fix de interatii in descrierea
unui design. Bucla for include o declaratie automata pentru index
library ieee;
use ieee.std_logic_1164.all;
entity parity10 is
port(D: in std_logic_vector(0 to 9);
ODD: out std_logic);
constant WIDTH: integer := 10;
end parity10; Exemplu:
architecture behavior of parity10 is
Generator de paritate de 8-
begin
bit folosind o bucla for.
process(D)
variable otmp: Boolean;
Begin
otmp := false;

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
for i in 0 to D'length - 1 loop
if D(i) = '1' then
otmp := not otmp;
end if;
end loop;
if otmp then
ODD <= '1';
else
ODD <= '0';
end if;
end process;
end behavior;
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Functii si Proceduri
Functiile si procedurile in VHDL se numesc generic subprograms, si
reprezinta o analogie directa cu functiile si procedurile definite in
limbaje de programare de nivel inalt
Procedura subprogram care are o lista de argumente care constau
din intrari, iesiri si nu returneaza nicio valoare.
Functia - subprogram care are numai intrari in lista de argumente si
returneaza o valoare.
Subprogramele pot fi definite local (intr-o arhitectura) sau intr-un
package. Declaratiile din subprogram sunt secventiale (ca in proces).
Pot fi apelate dintr-o zona concurenta dintr-o arhitectura sau dintr-un
proces. De asemenea se pot apela din alt subprogram.
De evitat scrierea functiilor si procedurilor recursive, acestea nefiind
sintetizabile!

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
package my_package is
function my_global_function(...)
return bit;
my_package a fost compilat intr-o
end my_package; biblioteca
package body my_package is
use
function my_global_function(...)
work.my_package.my_global_function;
return bit is
entity my_design is
begin
begin
...
...
end my_global_function;
end my_design;
end my_package;
...
my_global_function() a fost declarata in
package my_package
Se obtine un subprogram global
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Subprograme locale
Se declara local, intr-o arhitectura.
architecture my_architecture of my_design is
begin
my_process: process(...)
function my_local_function(...)
return bit is
begin
...
end my_local_function;
begin
...
end process my_process;
end my_architecture;
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Functii = Un subprogram cu zero sau mai multe argumente de tip intrari si
care returneaza o singura valoare de iesire.

function maxval (arg1, arg2: integer) return integer is


variable result: integer;
begin function rising_edge (signal s: std_logic)
if arg1 > arg2 then return boolean is
begin
result := arg1; return (s'event and (To_X01(s) = '1') and
else (To_X01(s'last_value) = '0'));
end;
result := arg2;
end if;
return result;
end maxval;
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Proceduri => Nu returneaza valori, argumentele includ atat intrari cat si
iesiri. Se folosesc pentru a modulariza o descriere complexa a unui design. Se
folosesc in zona concurenta dintr-o arhitectura sau intr-un proces.
procedure jkff (signal Rst, Clk: in std_logic; signal J, K: in std_logic; signal Q,Qbar: inout
std_logic) is
begin
if Rst = 1 then Q <= '0';
elsif Clk = 1 and Clkevent then
if J = '1' and K = '1' then Ex: JK flip-flop cu reset asincron:
Q <= Qbar;
Variabilele declarate intr-o
elsif J = '1' and K = '0' then procedura nu se stocheaza intre
Q <= '1'; diferite executii ale procedurii.
elsif J = '0' and K = '1' then La procese, variabile isi
Q <= '0'; pastreaza valorile intre executii.
end if; end if;
Qbar <= not Q;
end jkff;
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Test Benches VHDL folosit in procesul de simulare
Se aplica secvente de stimuli la intrarea circuitului care se testeaza (the Unit
Under Test, sau UUT). Formele de unda de test reprezinta valorile
semnalelor la diferite momente de timp.

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Exemplu: cod VHDL pentru
simulare

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Utilizare Project Navigator Pentru Simulare si Modelare
(generare Testbench si apel Modelsim)

Unui modul VHDL (sau alta descriere) i se poate


asocia un testbench:

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Se pot prescrie unele informatii de timing

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
In zona de culoare albastra se pot programa semnalele de test
In zona de culoare galbena se poate preciza (iesirea) dorita

Tastez save si verific ca de fapt s-a generat un fisier VHDL


Care este o descriere a testbench (forme de unda + modul asociat)
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Este evidentiat acest bench (banc de lucru) pot fi mai multe
Si se deschid automat unelte de simulare asociate

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Se vede ca unui bench ii corespunde un modul VHDL

Acesta va fi transmis si analizat de Modelsim care are utilitare mai


perfectionate pentru vizualizare forme de unda etc.
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
O simulare minimala se obtine direct in Project Navigator
Prin activarea Generate Expected Simulation Results

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Se pot face simulari asociate diferitelor etape din procesul de proiectare
(behavioral, translate .. Dar cea mai completa ca informatii este
post place and route

Fereastra
deschisa de
Modelsim

Aici se observa clar efectele luarii in considerare a unor timpi de


propagare specifici pozitionarii si rutarii efectuate la place and
route la care se adauga si informatiile temporale specifice
device-ului FPGA/CPLD folosit in proiect

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Bench2 este de fapt o ierarhie de module VHDL care contin
inglobate informatii de timing pe care unealta Project
Navigator le furnizeaza. In acest caz VHDL este folosit si ca
limbaj de simulare

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Exemple cod VHDL
Descrierea unui comparator folosind IEEE 1164 standard logic

Comentariu --
declarare library se incarca biblioteca
IEEE.
Use - specifica ce anume din biblioteca
ieee este disponibil pentru design-ul
realizat (declarat prin entitate si
arhitectura).
Forma generala include 3 campuri,
separate prin punct.

Blocul arhitectura descrie


std_logic si std_logic_vector, sunt tipuri de
functionalitatea date standard din IEEE 1164 standard si in
comparatorului biblioteca asociata IEEE

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Exemplu: counter
cu reset asincron,
incarcare paralela
si dimensiune
configurabila.

utilizare 'unsigned'
type si generics.

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
4-bit synchronous
up counter.
active high,
synchronous reset.
Active high enable.

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Introducere in Verilog

Verilog este un limbaj de descriere hardware similar ca


sintaxa cu limbajul de programare C

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Modulele descrise in Verilog
reset toggle
module toggle(q, clk, reset); q

<functionality of module>
clk

endmodule
Reconfigurable Computing
S. Reda, Brown University

Fiecare modul poate fi definit pentru 4 nivele de abstractie

Behavioral sau la nivel algoritmic


Dataflow level
Gate level
Switch level

Verilog permite ca diferite nivele de abstractizare sa fie introduse in


acelasi modul

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Concepte de baza
Comentarii prin introducerea // sau prin /* - */ pentru un bloc de
mai multe linii
specificare numere.

<size><base format><number>

Nr de biti

d sau D pentru decimal Numar care


Examples: h sau H depinde de
4b1111 pentruhexadecimal baza
12habc b sau B pentru binary
16d235 o sau O pentru octal
12h13x X sau x: dont care
-6d3 Z sau z: high impedence
12b1111_0000_1010 _ : folosit pentru claritate

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Tipuri de date
Net-urile reprezinta conexiuni intre elementele. Se declara
folosind cuvantul cheie wire.
wire a;
wire b, c;
wire d=1b0;

Registri reprezinta elemente de stocare a datelor. Ei au aceeasi


valoare pana cand o alta valoare este inscrisa in ei. In Verilog, un
registru este mai mult o variabila care poate stoca o valoare. Nu
necesita un clock asa cum au nevoie registrii hardware.
reg reset;
initial
begin
reset = 1b1;
#100 reset=1b0;
end
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Un net sau un registru poate fi declarat ca vector. Exemple
de declaratii:
wire a;
wire [7:0] bus;
wire [31:0] busA, busB, busC;
reg clock;
reg [0:40] virt_address;

Este posibil sa se adreseze biti sau parti din vector


busA[7]
bus[2:0]
virt_addr[0:2]

Se foloseste integer pentru numarare. Exemplu.


integer counter
initial
counter = -1;
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Real
real delta;
initial
begin
delta = 4e10;
delta = 2.13;
end
integer i;
initial
i = delta;

Tablouri (Array). Se pot defini tablouri de tip intreg, real


sau registri
integer count[0:7];
reg [4:0] port_id[0:7];
integer matrix[4:0][0:255];
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Memorie. Folosit pentru modelare RAM si ROMs. Se
modeleaza folosind tablouri de registri uni-dimensionali.
Example.
reg mem1bit[0:1023];
reg [7:0] membyte[0:1023];
membyte[511];

Parameteri. Definire constante care nu pot fi folosite ca


variabile.
parameter port_id=5;

Sirurile pot fi stocate in registri. Latimea variabilei registru


trebuie sa fie suficient de mare pentru a stoca tot sirul.
reg [8*19:1] string_value;
initial
string_value = Hello Verilog World;
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Module si porturi
module fulladd4(sum, c_out, a, b, c_in);
output [3:0] sum;
output c_out;
input [3:0] a, b;
input c_in;


endmodule

Declararea porturilor (input, output, inout)


sunt implicit declarate ca wire.
Daca iesirea stocheaza valoarea, trebuie declarate ca reg

module DFF(q, d, clk, reset);


output reg q;
input d, clk, reset;


endmodule
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Declarare module (Stil ANSI C)

module fulladd4(output reg[3:0]


sum,
output reg c_out,
input [3:0] a, b,
input c_in);


endmodule

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Instantierea modulelor
module Top;
reg [3:0] A, B; externe, intrarile pot fi reg sau wire;
reg C_IN; interne trebuie sa fie wire
wire [3:0] SUM;
wire C_OUT; Extern trebuie sa fie wire
// one way
fulladd4 FA1(SUM, C_OUT, A, B, CIN);
// another possible way
fulladd4 FA2(.c_out(C_OUT), .sum(SUM), .b(B), .c_in(C_IN), .a(A));

endmodule
module fulladd4(sum, c_out, a, b, c_in);
output [3:0] sum;
output c_out;
input [3:0] a, b;
input c_in;


endmodule
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Modelare la nivel de poarta (structural)

.
wire Z, Z1, OUT, OUT1, OUT2, IN1, IN2;

and a1(OUT1, IN1, IN2);


nand na1(OUT2, IN1, IN2);
xor x1(OUT, OUT1, OUT2);
not (Z, OUT);
buf final (Z1, Z);
.

Toate instantele se executa concurent ca in hardware.


Numele instantei nu este necesar

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Tablouri de instante pentru porti
wire [7:0] OUT, IN1, IN2;

// array of gates instantiations


nand n_gate [7:0] (OUT, IN1, IN2);

// which is equivalent to the following


nand n_gate0 (OUT[0], IN1[0], IN2[0]);
nand n_gate1 (OUT[1], IN1[1], IN2[1]);
nand n_gate2 (OUT[2], IN1[2], IN2[2]);
nand n_gate3 (OUT[3], IN1[3], IN2[3]);
nand n_gate4 (OUT[4], IN1[4], IN2[4]);
nand n_gate5 (OUT[5], IN1[5], IN2[5]);
nand n_gate6 (OUT[6], IN1[6], IN2[6]);
nand n_gate7 (OUT[7], IN1[7], IN2[7]);
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Modelare Dataflow
Modulul este definit pentru a specifica comunicarea datelor intre
registri hardware si modul in care datele sunt procesate in design

Atribuirea continua constructia principala in modelarea


comunicarii datelor
assign out = i1 & i2;
assign addr[15:0] = addr1[15:0] ^ addr2[15:0];
assign {c_out, sum[3:0]}=a[3:0]+b[3:0]+c_in;

Atribuirea continua este activa permanent si expresia de atribuire


este evaluata in momentul in care se modifica variabila din
dreapta.

Partea stanga trebuie sa fie un scalar sau un vector.


Partea dreapta (operandul drept) trebuie sa fie registri, fire, intregi,
real.

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Tipuri de operatori

Operatorii sunt similari celor din C (mai putin ++ sau )

Arithmetic: *, /, +, -, % and **
Logical: !, && and ||
Relational: >, <, >= and <=
Equality: ==, !=, === and !==
Bitwise: ~, &, |, ^ and ^~
Reduction: &, ~&, |, ~|, ^ and ^~
Shift: <<, >>, >>> and <<<
Concatenation: { }
Replication: {{}}
Conditional: ?:

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Exemplu:

module mux4(out, i0, i1, i2, i3, s1, s0);


output out;
input i0, i1, i2, i3;
output s1, s0;

assign out = (~s1 & ~s0 & i0) |


(~s1 & s0 & i1) |
(s1 & ~s0 & i2) |
(s1 & s0 & i3);

// OR THIS WAY
assign out = s1 ? (s0 ? i3:i2) : (s0 ? i1:i0);

endmodule

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Modelarea comportamentala
Design-ul este exprimat la nivel algoritmic (nu
mai este nevoie de o gandire in termeni de porti .
sau comunicare date). .
reg a, b, c;
Proiectarea la acest nivel este foarte
asemnanatoare cu programarea in C. initial a=1b0;
.
Algorimul este implementat intre doua declaratii .
: always si initial. always
begin
b = a ^ 1b1;
Fiecare always si initial reprezinta o activitate
separata. De retinut ca ruleaza in paralel. c = a + b;
end
.
Pot fi mai multe initial si always dar nu pot fi
.
intercalate

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
initial
initial blocul incepe la timpul 0, se executa o singura data
Daca sunt mai multe blocuri initial, fiecare bloc incepe sa fie
executat concurent de la momentul 0, fiecare bloc terminand
executia independent de celelalte.
Declarari multiple comportamentale se grupeaza folosind begin si
end.

reg x, y, m;
initial m=1b0;

initial
begin
x=1b0;
y=1b1;
end

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
always
always incepe la timpul 0 si executa instructiunile in
blocul always in mod continuu (ca la bucle).
Modeleaza un bloc in care activitatea circuitului digital
se repeta continuu.

integer count;

count=0;

always
begin
count=count+1;
end

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Evenimente
Un eveniment event modificarea valorii registrului sau a net-ului.
Se folosesc pentru a porni executia intr-un bloc.
Simbolul @ - este folosit pentru a specifica controlul unui
eveniment
Declaratiile se pot executa la modificarea valorilor semnalelor,
sau in momentul tranzitiilor pozitive sau negative ale semnalului.
(posedge) (negedge).

input clock; input clock; input clock1, clock 2;


integer count; integer count; integer count;

count=0; count=0; count=0;

always @(clock) always @(clock) always @(clock1 or clock2)


begin begin begin
count=count+1; count=count+1; count=count+1;
end end end
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Proceduri de atribuire
Atribuirile procedurale actualizeaza valorile variabilelor pentru reg,
integer, sau real.
Valorile raman nemodificate pana cand se foloseste alta asignare
2 tipuri de atribuiri procedurale: blocking si nonblocking.

Blocking statements, folosesc Nonblocking statements, folosesc


operatorul =, sunt executate in operatorul <=, sunt executate fara a
ordinea in care sunt bloca declaratiile dintr-un bloc
specificate in blocul secvential secvential.

reg x, y;
reg x, y;
initial
initial begin
begin x<=1b1;
x=1b1;
y<=1b0;
y=1b0;
end end

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Folosirea atribuirilor nonblocking

always @(posedge clock) always @(posedge clock)


begin begin
a = b; a <= b;
b = a; b <= a;
end end

Nonblocking elimina conditiile de


intrecere. Pe frontul crescator al ceasului,
se citesc valorile din partea dreapta, se
evalueaza expresiile si se asigneaza partii
din stanga.

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Instructiuni conditionale
Asemanator cu C .
Intotdeauna apar in if(alu_control == 0)
blocurile always si y = x + z;
initial else if (alu_control == 1)
y = x z;
else if (alu_control == 2)
. y = x * z;
if(x) else
begin y = x;
y= 1b1; .
z= 1b0;
end reg [1:0] alu_control;
expression
. ..
if (count < 10) case (alu_control)
count = count+1; 2d0 : y = x + z;
else 2d1 : y = x z;
count = 0; 2d2 : y = x * z;
. default: y=x;
endcase
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Loops
integer count;
integer y=1;
integer x=2;

initial
for (count = 0; count < 128; count = count + 1)
begin
x <= x + y;
y <= x;
end

initial initial Trebuie sa contina


count = 0; count = 0; un numar sau o
while (count < 128) repeat(128) valoare a
begin begin semnalului, se
. . evalueaza o
. . singura data la
count = count +1; count = count +1;inceput
end end

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Exemplu: Mux4x1
module mux4x1(out, i0, i1, i2, i3, s1, s0);
output out;
input i0, i1, i2, i3;
input s1, s0;
reg out;

always @(s1 or s0 or i0 or i1 or i2 or i3)


begin
case({s1, s0})
2d0: out = i0;
2d1: out = i1;
2d2: out = i2;
2d3: out = i3;
endcase
endmodule

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Exemplu: Clipire LED la 1 sec
module sec (input CLOCK_50, output reg [8:0] LEDG);

integer count=0;

initial LEDG[0]=1'b0;

always @(posedge CLOCK_50)


begin
count=count+1;
if(count == 50_000_000)
begin
count=0;
if(LEDG[0]) LEDG[0]=1'b0;
else LEDG[0]=1'b1;
end
end

endmodule
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
VHDL-AMS

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Este derivat din VHDL ((IEEE standard 1076-1993). Include extensii mix-signal
(AMS) pentru a defini sisteme analogice si mix-signal (IEEE 1076.1-1999).

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Exemplu de cod: Descrierea unei diode in cod VHDL-AMS

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
VHDL_AMS lucrari stiintifice in IEEE Xplore
539 for vhdl-ams (rezultat al cautarii din 2016)

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Structura de baza VHDL-AMS

Entity
Descrie interfata unui device fizic sau a unui sistem
Specifica intrarile si iesirile modelului (porturile)
Poate specifica parametrii de intrare ai modelului (A =, B =, C = ..)
Architecture
Descrie modelul
Poate avea atat semnale analogice (continue) cat si digitale (discrete)
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Exemplu de utilizare: modelarea unui convertor DC/DC
Componente (R, L, C, Diode, Switch, opamp, etc)
Modelare componente digitale din circuitul de modulare

Definire a specificatiilor convertorului de putere


Input/Output Voltage, Putere
Mod de operare (CCM, DCM, Current or Voltage mode)
Specificatii de curent
Frecventa de comutare
Load/line regulation

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
VHDL-AMS Modelare digitala

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
ANEXE
Exemplu de unelte de dezvoltare CAD
(Computer Aided Design)

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Ansoft Simplorer - System Simulation Software for Multi-Domain
Design
Simplorer is a multi-domain system simulation software program.
It is used for the design, modeling, analysis and optimization of high-
performance systems that include electrical, thermal, electromechanical,
electromagnetic, and hydraulic designs. These complex systems are commonly
found in the automotive, aerospace/defense, and industrial automation
industries.
Simplorer provides a wide range of modeling techniques, analysis capabilities,
and post processing. This enables the engineer to investigate system
functionality, performance, and overall design verification. The result is a
dramatic reduction in development time and cost, increased system reliability
and system optimization.

http://www.ansoft.com/products/em/simplorer/

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
New in Simplorer v8
Next generation User Interface
Advanced Model Editing
Characterization tools
Enhanced Spice and Pspice model import
New component library concept
Expanded VHDL-AMS functionality
Enhanced Solver Performance
Enhanced Transient Co-simulation with Maxwell
New Dynamic Coupling with Maxwell/RMxprt/Q3D Extractor
3rd Party Co-simulation Coupling
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Digital VHDL-AMS Modelarea blocului modulator

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
VHDL-AMS limbaj de modelare pentru mix-signal (analog/digital) dar si pentru
proiecte care vizeaza tehnologii mixte (Electric, Mecanic, Termic, Magnetic, etc.).

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Behavioral Simulation:
ModelSim is an industrial strength high level VHDL/Verilog simulator from
Mentor Graphics.

A light version of it (ModelSim XE II) is included with Xilinx's ISE


WebPACK and a free license can be obtained from Xilinx.

Dolphin SMASH: Multi-domain simulator, a version of SPICE with support for


VHDL, VHDL-AMS and other simulation extensions - free download with limited
abilities-. HAMSTER site: VHDL-AMS simulation environment -free download-.

The Hamburg site for VHDL provides a wealth of information on high level
behavioral modeling and synthesis tools. Here is another comprehensive site for
analog and mixed signal extensions to VHDL (VHDL-AMS).

Behavioral Synthesis:
FPGA vendors such as Xilinx and Altera have their own tools for synthesis from
VHDL. For ASIC design, Synopsys and Leonardo Spectrum from Mentor
Graphics can be used with the Tanner libraries to synthesize custom layout from
VHDL.

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016
Referinte bibliografice:
[1] Prof. Sherief Reda Division of Engineering, Brown University Spring Reconfigurable Computing
[2] http://en.wikipedia.org/wiki/VHDL-AMS
[3] http://www.asic-world.com/vhdl
[4] - Accolade VHDL Reference Guide - http://www.acc-eda.com/vhdlref/
[5] Steve Chwirka - Applying VHDL-AMS and other Advanced Modeling Techniques

[6] - http://www.ansoft.com/products/em/simplorer/

[7] http://www2.ece.jhu.edu/faculty/andreou/495/Resources/CAD/CAD.htm

Ioana Dogaru, Radu Dogaru, Curs Sisteme Reconfigurabile de Calcul, Univ. Politehnica din Bucuresti, 2016