Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
dsd1-10 / dsd-07=Verilog / Rukovodstvo_po_Verilog.pdf
Скачиваний:
90
Добавлен:
05.06.2015
Размер:
284.57 Кб
Скачать

Маршрут проектирования БИС

Моделирование вентильного описания с файлом задержек, сравнение результатов.

Моделирование выполняется аналогично моделированию на поведенческом уровне c использованием того же файла оснастки tests.v, в котором надо после ключевого слова initial добавить строку типа:

$sdf_annotate("count5_.sdf",test_t.count5,,,"MAXIMUM","1.0:1.0:1.0","FROM_MTM");

Запуск моделирования аналогичен моделированию на поведенческом уровне:

verilog.exe counter_syn.v tests.v –v Lib.v

Можно просмотреть, как и при моделировании на поведенческом уровне, графические окна выдачи..

Можно в одной оснастке задать все три модели – поведенческую, вентильную c учетом собственной задержки, вентильную c SDF файлом.

Тогда в файле tests.v необходимо описать подключение схем, например:

count5

e1(q, data, load, clock, enable, reset);

// поведенческое описание

count5_syn

e2(q_, data, load, clock, enable, reset);

//

вентильное описание

count5_syn

e3(q3s, data, load, clock, enable, reset);

//

вентильное c SDF файлом

Соответственно должен быть текст типа:

$sdf_annotate("count5_.sdf",test_t.e3,,,"MAXIMUM","1.0:1.0:1.0","FROM_MTM");

Eсли сделать задание на выдачу:

$gr_waves("clock",clock,"data %d",data,"reset",reset,"q_ver %d",q, // входы и выход повед. модель

"q_netl %d",q_,

// выход вентильная модель

"q_nSDF %d",q3s,"strob",strob,

// выход вентильная модель с SDF

"testN %d",testnumber);

// номер теста

то диаграмма моделирования для такого примера приведена ниже.

14

Маршрут проектирования БИС

Сравнение результатов можно осуществлять разными способами. Наиболее простой - вставить в блок posedge strob сравнение сигналов, и выдачу в случае расхождения в файл verilog.log, например:

always @(posedge strob) begin

if( q != q3s) $display(“Error q get/except %b/%b

test_number $d”,q,q3s,testnumber);

end

Если выходов в проекте несколько, то все проверки по выходам надо поместить в этот блок.

15

Маршрут проектирования БИС

Пример описания модуля по подготовке файла с результатами моделирования.

Ниже приведен пример описания модуля формирования файла входных воздействий и ответных реакций. Допустим, моделируем проект, у которого следующий список внешних выводов:

D – входная шина, 4 разряда;

DB – двунаправленная шина, 6 разрядов;

OUT – выход, один разряд;

CLK – одиночный входной импульс.

Cигнал управления DB вырабатывается внешним сигналом en.

Ниже приведено описание модуля в файле TESTER.v. Для тестовых векторов

используются строковые переменные и операторы работы с файлами.

Входные

сигналы в результирующем файле — символы 0 и 1, выходные —

H

и L.

Если тестовые вектора повторяются, то модуль формирует кратность (

число

после символа “:” ).

 

 

Этот модуль должен быть подключен в тестовую оснастку. Проект имеет имя DESIGN. Маленькими буквами указаны имена цепей. В оснастке должны быть строки, приведенные ниже.

DESIGN DESIGN_1(.CLK(clk),.D(d),.DB(db),.OUT(out));

TESTER TESTER(.CLK(clk),.D(d),.DB(db),.OUT(out),.EN(en));

// Описание модуля TESTER.v

 

`define delta1

// задержка строба относительно начала теста

`define delta2

//продолжение строба до конца теста

module TESTER (CLK,D,DB,OUT,EN);

input CLK;

input [3:0] D; inout [5:0] DB; output OUT;

reg [8*12:1] tstring; // текстовая строка по всем выводам

reg [8*12:1] oldstring; // предыдущая текстовая строка по всем выводам

reg [8*1:1] Dstr[3:0],DBstr[5:0],OUTstr;

reg tester_clk;

integer r_file;

reg [4:0] i; reg [15:0] povtor;

always begin

#`delta1 tester_clk=1; #`delta2 tester_clk=0;

16

Маршрут проектирования БИС

 

end

 

 

initial begin

 

 

r_file=$fopen(“TEST_R.TES”);

 

tester_clk=0; povtor=0; oldstring=” “; tstring=”

“;

$fdisplay(r_file,”%%TESTDEF;\n CLK,D,DB,OUT=”);

end

 

 

always @(posedge tester_clk)

// всегда по положительному фронту

begin

 

 

for(i=0; i<4; i=i+1) begin

// входная шина D

 

if( D[i]==1’b1) Dstr[i]=”1”;

 

else begin if(D[i]==1’b0) Dstr[i]=”0”;

 

else Dstr[i]=”X”;

 

end

 

 

for(i=0; i<6; i=i+1) begin

// шина DB

 

if(EN==1) begin

// шина – в режиме входа

if( DB[i]==1’b1) DBstr[i]=”1”;

else begin if(DB[i]==1’b0) DBstr[i]=”0”; else DBstr[i]=”X”;

end

else begin // шина – в режиме выхода if( DB[i]==1’b1) DBstr[i]=”H”;

else begin if(DB[i]==1’b0) DBstr[i]=”L”; else DBstr[i]=”X”;

end

end

end

if( OUT==1’b1) OUTstr[i]=”H”;

else begin if(OUT==1’b0) OUTstr=”L”; else OUTstr=”X”;

end

tstring={ Dstr[3],Dstr[2], Dstr[1],Dstr[0], // сборка текстовой строки

DBstr[5],DBstr[4], DBstr[3],DBstr[2], DBstr[1],DBstr[0],OUT }; if( tstring == oldstring) povtor=povtor+1;

else if(povtor != 0)

17

Маршрут проектирования БИС

begin

$fdisplay(r_file,”+%s:%d,oldstring,povtor); // выдача в файл

povtor=0;

end

else $fdisplay(r_file,”+%s,”,tstring);

// выдача в файл

oldstring=tstring;

end // конец блока always

Ниже приведен пример текстового файла TEST_R.TES

%TESTDEF;

CLK,D,DB,OUT=

+0101XXXXXX0,

+01010000001,

+01110000001:20,

+1010HHHLLL1,

+1011HLHLLL1:5,

18

Соседние файлы в папке dsd-07=Verilog