
- •Введение
- •Моделирование поведенческого Verilog-описания
- •Пример и моделирование вентильного описания
- •Создание прогнозного SDF файла в системе “Cadence”
- •Моделирование вентильного описания с файлом задержек, сравнение результатов.
- •Пример описания модуля по подготовке файла с результатами моделирования.

Маршрут проектирования БИС
Моделирование вентильного описания с файлом задержек, сравнение результатов.
Моделирование выполняется аналогично моделированию на поведенческом уровне 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