Sei sulla pagina 1di 3

VerilogA

Il VerilogA è un linguaggio di descrizione dell’Hardware (HDL) pensato per descrivere il


comportamento di sistemi analogici. L’obiettivo del verilogA è permettere ai progettisti di
sistemi analogici e circuiti integrati di creare e usare dei moduli costruiti come descrizioni
comportamentali di alto livello o come descrizione strutturale di sistemi e componenti. Il
comportamento di ogni modulo può essere descritto matematicamente a partire dai suoi
terminali e dai parametri esterni forniti al modulo. La struttura di ogni componente può
essere descritta in termini dei sotto-componenti interconnessi. Queste descrizioni possono
essere usate in molte discipline come quelle elettriche, meccaniche, fluidodinamiche e
termodinamiche. Le relazioni che si usano per descrivere i vari rami del sistema sono una
descrizione delle leggi di Kirchhoff ai nodi e alle maglie.

Struttura di un modulo verilogA


La struttura di un modulo verilogA è abbastanza simile a quella del verilog, troveremo
quindi la dichiarazione degli ingressi, i tipi di dati, la dichiarazione dei parametri di ingresso
e il corpo della funzione che descrive il comportamento del blocco analogico che deve
essere modellato.

module module_name(in1, in2,…,out1); Interfaccia


input in1, in2,…;

output out1…; Dichiarazione ingressi e


uscite

electrical in1,in2, out1,x

real r,k; Tipi di dati

parameter real r=10e3;


Definizione dei parametri

analog Inizio della descrizione del


blocco analogico
begin

All’interno di questo blocco


@ ( initial_step or initial_step("dc") ) vanno specificate le
operazioni da eseguire
begin solo una volta all’inizio
della simulazione (tra
k= 10^3;
parentesi si specifica per
end che tipo di simulazione)
Branch contribution statements: sono degli
I(in1, in2) <+ (V(in1, in2) / r ; assegnamenti a dei branch. Un “branch” è
definito come un percorsi tra due nodi e può
V(out1,x)<+k*V(vin1,vin2); rappresentare una tensione o una corrente
l’assegnamento a un branch viene fatto con
l’operatore “<+”
end

endmodule

ESERCIZIO1 Modelliamo un amplificatore in verilogA. Non inseriamo inizialmente


nessuna non idealità, solamente il guadagno.

module amp(vin, vout);


input vin;
output vout;
electrical vin, vout;
parameter real gain=10^3;
analog
V(vout)<+gain*V(vin);
endmodule

ESERCIZIO 2 modificare l’esercizio precedente per includere anche l’effetto della


tensione di offset (inserire la tensione di offset come parametro da passare in ingresso).

ESERCIZIO 3 modellare un amplificatore operazionale a transconduttanza secondo lo


schema di Figura 2. Includere una resistenza di ingresso, la transconduttanza e una
resistenza di uscita. Usare come parametri di ingresso Rin=100MΩ, Rout=80kΩ a il
guadagno A=104V/V.

Figura 2: amplificatore a trans conduttanza

ESERCIZIO 4 A partire dal modello sviluppato nell’esercizio 3, aggiungere un polo


dominante nell’amplificatore in modo tale da ottenere una GBW=100e6, come
rappresentato in Figura 3, facendo in modo che il GBW sia un parametro facilmente
modificabile.
Figura 3: amplificatore a transconduttanza con modellazione del polo dominante

ESERCIZIO 5: Aggiungere al modello dell’esercizio 4 un generatore di rumore in


ingresso che modella il rumore dei componenti dell’amplificatore.

ESERCIZIO 6: utilizzando il modello di amplificatore operazionale simularne prima il


comportamento in AC variando i parametri di ingresso e, successivamente utilizzarlo nella
configurazione ad anello chiuso con il circuito riportato in Figura 4. Verificare l’effetto della
tensione di offset, del rumore e del polo in uscita mediante simulazioni di punto di lavoro,
AC e in transitorio.

Figura 4: Inseguitore di tensione

ESERCIZIO 6: Realizzare una versione fully differential dell’amplificatore a transconduttanza


precedentemente realizzato.

Potrebbero piacerti anche