Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ю.Ф. Адамов - Кристалдағы жүйелерді жобалау.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
380.29 Кб
Скачать

7.Verilog-a тілін қолдана отырып аналогты-сандық жүйені модельдеу

Аналогты құрылғыларды сипаттау тілдері және қолданылатын симулятор

Аналогтық схемаларды бөлшекті модельдеу транзисторлық деңгейде жүргізілгені тарихи қалыптасты. Өзінің мәні бойынша бұл электродинамика заңдарына негізделген физикалық модельдеу. Сандық схемалар негізінде вентильді немесе мінез-құлықтық деңгейлерде модельденеді. Аналогты модельдеу үшін өзінің кіріс тілдері бар Spectre және SPICE симуляторлары, сандық модельдеуге NC Verilog қолданылады. Модельдеу жүйелерінің өнімділігін арттыру аналогтық құрылғылардың мінез-құлықтық модельдерін қолданумен және олардың сандық құрылғылардың мінез-құлықтық модельдерімен бірге қолданылуын іске асырумен қол жеткізіледі. Аналогтық блоктардың мінез-құлықтық модельдерін сипаттау үшін Verilog-A, Verilog-AMS, VHDL-AMS тілдері қолданылады. Аналогты-сандық құрылғыларды модельдеу үшін Cadence фирмасының Spectre-Verilog және AMS Designer симуляторлары қолданылады. Сандық және аналогтық блоктарды қолданатын жүйені құру кезінде олардың арасындағы байланыс шын схемада болмайтын математикалық аналогты-сандық және сандық-аналогты түрлендіргіштерді қосу керек.

Verilog-a тілін қолдану аймағы

Verilog-A әртүрлі табиғаттағы үздіксіз процесстерді модельдеу үшін қолданылады: электр, магниттік, механикалық және т.б. Біз тілдің тек қана электр тізбектерінің анализі үшін қолданылуын қарастырамыз. Тілдің негізгі ұғымдары «түйін потенциалы» және «бұтақ ағыны» деген электр тізбектері үшін кернеу және электр тогы деп түсініледі. Кернеу мен токтан басқа тілде элементтер, модульдер және түйіндер атаулары, сонымен бірге толық, жарамды, кешенді және векторлық параметрлер қолданылады. Verilog-A аналогты жүйенің екі типін сипаттай алады: консерваторлық және сигналды (мінез-құлықтық). Консерваторлық жүйелерде Кирхгоф, Ом және басқа тізбектер теориясының заңдары орындалады, ал сигналдар кіріс және шығыс болып бөлінбейді. Сигналдық жүйелерде шығыс сигналдары кіріс сигнал функциялары ретінде анықталады және кіріс сигналдарына кері әсері болмайды. Транзисторлық деңгейде схеманы суреттеу консерваторлық жүйе ретінде модельденеді. Verilog-A тілін қолданатын симуляторлар Spectre немесе SPICE-симуляторлары үшін арналған электр схемаларының қарапайым сипаттамасын да қабылдайды.

Verilog-a тілінің негізі

а) Жүйенің ирархиясы

Жүйенің барлық блоктары, жүйенің басты блогымен қоса модельдер түрінде сипатталады. Жүйенің құрылымдық сипаттамасы қосылған әрбір модель түйіндердің тізімі көрсетілген модельдердің тізімін қамтиды. Сонымен қатар, модельдің сипаттамасы берілген сұлбадағы көрсетілген атауымен бірге қамтылады. Мысалы, бір ғана блок транзисторлы немесе мінездемелік деңгейлерде әр түрлі толықтыру дәрежесімен бірнеше рет сипатталуы мүмкін.

channel c1 (count, cin)

үлгінің атауы көрсетімі түйіндер

Модель сипаттамалары келесі түрлерде болуы мүмкін :

-құрылымдық (транзисторлы);

- функционалдық (қарапайым);

- аралас құрылымды-функционалды;

- мінездемелік

Транзисторлы деңгей блоктарының құрылымдық сипаттамасы, SPICE - симулятордың шығыс тілінде сипатталуымен іске асуы мүмкін.

б) Verilog-A тілінде модельдің құрылымы

№1 мысал. Құрылымдық модель

module modem (dout, din);

inout dout, din;

еlectrical dout, din;

parameter real fc=100.0 eG;

electrical clk, cin, cout;

gam_mod # (.carrier_freg(fc)) mod (cin,din,clk);

channel c1 (cout,cin);

gam_demod # (.carrier_freg(fc)) demod (dout,cout,clk);

endmodule

- порттар тізімімен бірге модельдің атауы

- порттардың тағайындалуы

- порттарды көрсете отырып, пәндердің тағайындалуы

-ішкі түйіндердің тағайындалуы

- кіріс модельдерінің тізімі

- сипаттаманың соңы

Әрбір блок module сөзімен басталады және endmodule сөзімен аяқталады. Сипаттаманың жолдары (;) символымен аяқталады. Процедуралық операторлар тыныс белгілерімен белгіленбейді.

№2 мысал. Сигналды модель

module sah (out,in,clk);

output out;

input in,clk;

electrical out,in,clk;

real state=0;

analog begin

@ (cross (V (clk)-2.5+1.0));

begin

state=V (in);

end

V (out)<+transition (state,1m,0.1u);

end

end module

- порттар тізімімен бірге модельдің атауы

-жекеленген шығыс пен кіріс порттарының тағайындалуы

Порттарлың белгіленуі жүйенің конвертивті немесе сигналды түрлерін анықтайды.

- порттарды көрсете отырып, пәндердің тағайындалуы

- Параметрлердің тағайындалуы

- Аналогты операциялардың басталуы, егер оператор жалғыз болса, онда бір ғана “analog” сөзін қолдануға болады.

- Аналогты операторлар

- end- аналогты операцияның соңы

Егер “analog” сөзі және бір ғана оператор қолданылса, команда керек емес.

- модель сипаттамсының соңы

Ішкі құрылымымен түсіндірілген, аналогты операторлар мен ішкі айнымалылар арқылы модельдердің әсерлесуімен ішкі айнымалылар мен мінездемелік сипаттамаларының тағайындалуымен, модельдер аралас түрде болуы мүмкін.

в) Аналогты операторлар.

- меншіктеу операторлары (<+) тек түйіндердің кернеулері мен бұтақтағы тоқтарға әсер етеді. Бірнеше операторларды тізбектей қолдану қортындылардың қосындысын береді. Мысалы, P1, P2 тоқтары, P0, P1 және PP, P1 тоқтарының қосындысына тең.

I (P1,P2) <+ ν (P0,P1)/R1; I (P1,P2) <+ ν (PP,P1)/R2;

- Процедуралық операторлар:

“analog” немесе жұп analog begin

e nd

аналогты операторлардың әсер ету зонасын анықтайды.

- Шартты ауысу операторлары:

if (шарт)

оператор №1

else

оператор №2 оператор №2

шартты орындау №1оператор орындайды, керісінше болса, №2 оператор орындайды. Бірнеше аналогты операторларды екі команда көмегімен біріктіруге болады:

begin

end

-Тернарды оператор

(шарт)? (оператор №1): (оператор №2);

операторлардың шартты алмасуының қысқаша жазбасы.

- ddt (x(t)) уақыт бойынша дифференциялдану операторы

V(out) <+ scale* ddt (V(in)).

- idt (x(t)+x0) уақыт бойынша интегралдану операторы

V(out) <+ scale* idt (V(in),start).

- delay (x(t),tздр) кешігу операторы

V(out) <+ delay (V(in),50n).

- transition (параметр, tздр, tфр, tср) ауыстыру операторы

V(out) <+ transition (V(in),2n,5n,5n).

- slew (параметр, өсу жылдамдығы, азаю жылдамдығы) түзету операторы;

өсу мен азаю жылдамдықтарының максималды мәндерін шектеуші оператор

V(out) <+ slew (V(in),5e8,-5e8).

-Лаплас түрлендірілуі- жиіліктік фильтр

V(out) <+ laplace_np (V(in),{.....}).

Оператордың төрт түрлі жазылу формасы бар: zp,zd,np,nd;

инструкциямен сәйкестелген параметрлердің тізімі.

- Дискретизация параметрлері де төрт түрлі формада болады: zp,zd,np,nd.

V(out) <+ zi_nd (V(in), 1{.0 ,} {1.0}, 10n). -Қиылысу операторы @ cross (параметр, бағыты)

@ cross (V(in),+1.0)

begin

꞉ (аналогты оператор)

end

- Таймер-@ timer (басталу, период) @ timer (1n,10n)

begin

V(out) <+ V(out)+0.1;

end

- Түзу емес меншікті операторлар (: = =)

(өзгертетін параметр) : (теңдік шарты)

Тері кері байланыс тізбектері бар амалдық күшейткіштің сұлбасы үшін жазбасы

V(out) : V(in1,in2) = = 0.0

Синусоидалы генератор V(x) = sin(w·t)

begin

if (analysis(“dc”))

V(dx) <+ W;

else

V(dx) <+ ddt(V(x));

V(x) : ddt (V(dx)) = = - W*W* V(x);

end

- бір танымал толық сан үшін итерация операторы

repeat (қайталау шарты);

(операторлар)

мысал: repeat (11);

···

- Мақсатқа жету үшін итерация операторы

while (шарт)

мысал: while (V(out)>1.0);

г) Матаматикалық функциялар

- Күрделі- (+) x + y

- Азайту (-) x - y

- Көбейту (*) x * y

- Бөлу (/) x / y

- Абсолютті мағынасы (abs(x)) abs (x)

- Синус, косинус sin(x), cos(x) sin (x), cos(x)

және басқа да тригонометриялық функциялар қарапайым математикалық жазбаға ие.

- Логарифмдер ln(x), log(x),

- Дәрежелер xy – pow(x,y)

- Түбірлер sqrt(x), sqrt (x)

Мысал

// VerilogA for CMP100v6Test, OpAmp, veriloga

`include "constants.vams"

`include "disciplines.vams"

`define PI

3.14159265358979323846264338327950288419716939937511

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

// opamp

//

// - operational amplifier

//

// vin_p,vin_n: differential input voltage [V,A]

// vout: output voltage [V,A]

// vref: reference voltage [V,A]

// vspply_p: positive supply voltage [V,A]

// vspply_n: negative supply voltage [V,A]

//

// INSTANCE parameters

// gain = gain []

// freq_unitygain = unity gain frequency [Hz]

// rin = input resistance [Ohms]

// vin_offset = input offset voltage referred to

negative [V]

// ibias = input current [A]

// iin_max = maximum current [A]

// slew_rate = slew rate [A/F]

// rout = output resistance [Ohms]

// vsoft = soft output limiting value [V]

//

// MODEL parameters

// {none}

//

module OpAmp(vout, vref, vin_p, vin_n);

input vref;

inout vout, vin_p, vin_n;

electrical vout, vref, vin_p, vin_n, vspply_p,

vspply_n;

parameter real gain = 40;

parameter real freq_unitygain = 1.0e6;

parameter real rin = 1e6;

parameter real vin_offset = 0.0;

parameter real ibias = 0.0;

parameter real iin_max = 100e-6;

parameter real slew_rate = 0.5e6;

parameter real rout = 80;

parameter real vsoft = 0.5;

parameter real vspply_p = 3.3;

parameter real vspply_n = 0;

real c1;

real gm_nom;

real r1;

real vmax_in;

real vin_val;

electrical cout;

analog begin

@ ( initial_step or initial_step("dc") ) begin

c1 = iin_max/(slew_rate);

gm_nom = 2 * `PI * freq_unitygain * c1;

r1 = gain/gm_nom;

vmax_in = iin_max/gm_nom;

end

vin_val = V(vin_p,vin_n) + vin_offset;

//

// Input stage.

//

I(vin_p, vin_n) <+ (V(vin_p, vin_n) +

vin_offset)/ rin;

I(vref, vin_p) <+ ibias;

I(vref, vin_n) <+ ibias;

//

// GM stage with slewing

//

I(vref, cout) <+ V(vref, cout)/100e6;

if (vin_val > vmax_in)

I(vref, cout) <+ iin_max;

else if (vin_val < -vmax_in)

I(vref, cout) <+ -iin_max; else

I(vref, cout) <+ gm_nom*vin_val ;

//

// Dominant Pole.

//

I(cout, vref) <+ ddt(c1*V(cout, vref));

I(cout, vref) <+ V(cout, vref)/r1;

//

// Output Stage.

//

I(vref, vout) <+ V(cout, vref)/rout;

I(vout, vref) <+ V(vout, vref)/rout;

//

// Soft Output Limiting.

//

if (V(vout) > (V(vspply_p) - vsoft))

I(cout, vref) <+ gm_nom*(V(vout,

vspply_p)+vsoft);

else if (V(vout) < (V(vspply_n) + vsoft))

I(cout, vref) <+ gm_nom*(V(vout, vspply_n)-

vsoft);

end

endmodule