Upload
irina-hahanova
View
1.006
Download
6
Embed Size (px)
Citation preview
2/9/2011д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ
e-mail: [email protected] 1
2. Основные понятия и конструкции языка Verilog
Автоматизация проектирования компьютерных систем
VERILOG
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
2
Цель лекции и содержание
Цель – знакомство с базовыми конструкциями языка Verilog
План1. Модуль – базовая единица языка Verilog.2. Уровни абстракции описания моделей3. Лексические соглашения4. Классы и типы данных5. Описание портов модуля6. Параметры7. Директивы компилятора8. Стандартные логические элементы9. Определенные пользователем примитивы10. Задержки
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
3
Язык Описания аппаратуры: Verilog
1984 -1985 гг. Филип Мурби(Philip Moorby) разрабатывает язык Verilog, который принадлежит фирме GatewayDesign Automatiion.
1985-1987гг. Рост популярности Verilog.
1990 г.Фирма Cadence покупает Gateway и делает язык Verilogобщедоступным
1993 г. 85% всех ASIC-проектов разрабатывается с помощью Verilog
1995 г. Создается IEEE-1364 -стандарт языка Verilog
2000 г. Более 10000 разработчиков SUN, Apple и Motorola работают на Verilog
2001 г. Стандарт 1364- 2001 “Verilog- 2001”
Стандарты IEEE Std 1364-95. IEEE Std 1364-2001
значительно переработанный по сравнению с предыдущим.
IEEE Std 1364-2005 добавил небольшие исправления, уточнения.
Verilog проще для анализа использования.
Получил признание в проектировании ASIC схем, особенно для проектов низкого уровня.
Наиболее популярен в Северной Америке и Азии, особенно в Японии. Непопулярен в Европе.
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
4
Диаграмма стандартов Verilog
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
5
1 Модуль – базовая единица языка Verilog
Синтаксис модуля:module identifier (ports_list) ;
ports_declaration ;module_body ;
endmoduleПример описания модуля: module module_1(a, b, c) ;
input [3: 0] a, b ;output [3: 0] c;assign c = a & b;
endmodule
module identifier(ports_declaration_list) ;
module_body ;endmodule
• module module_2• (input [3: 0] a, b,
output [3: 0] c);assign c = a & b;
endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
6
2. Уровни абстракции моделей
поведенческий (или алгоритмический) dataflow-уровень (уровень передачи данных) вентильный уровень транзисторный уровень (switch-level)
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
7
Поведенческий уровень
D-триггерmodule dff (clk, d, q);
input clk, d;output q;reg q;
always @(posedge clk)q = d;
endmodule
module dff(input clk, d,output reg q);
always @(posedge clk)q = d;
endmodule
Поведенческий или алгоритмический – это верхний уровень описания проектов, отражающий алгоритм их функционирования без деталей реализации
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
8
Dataflow-уровень
Dataflow – описывает процесс изменения данных при их передаче между регистрами
Модель мультиплексора 4-в-1, заданного уравнением.
module mux4_to_1 //Декларация портов(output out, input i0, i1, i2, i3, // Входы данныхinput s1, s0); // Управляющие входы
assign out = (~s1 & ~s0 & i0) | (~s1 & s0 & i1) | (s1 & ~s0 & i2) | (s1 & s0 & i3);
endmodule
In3Sel0Sel1In2 Sel0'Sel1In1Sel0 Sel1'In0 Sel0' Sel1'Out
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
9
Вентильный уровень
Модель мультиплексора 4-в-1 вентильного уровня
module mux_4_to_1 (output Out,input In0, In1, In2, In3, Sel1, Sel0);wire NotSel0, NotSel1;wire Y0, Y1, Y2, Y3;
and (Y1, In1, NotSel1, NotSel0);not (NotSel0, Sel0);and (Y3, In3, Sel1, Sel0);or (Out, Y0, Y1, Y2, Y3);and (Y0, In0, NotSel1, NotSel0);not (NotSel1, Sel1);and (Y2, In2, Sel1, NotSel0);
endmodule
Y0
Y1
Y2
Y3
NotSel0
NotSel1
In0
In1
In2
In3
Sel1
Sel0 Out
Модели вентильного уровня задаются логическими элементами и соединениями между ними.
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
10
Транзисторный уровеньVdd
pwr
c
out
a b
gnd
my_nor
outa
b
my_nor
module my_nor(out, a, b);(output out,input a,b);
wire c;//создание линий питания и земли
supply1 pwr; supply0 gnd;
// реализации pmos-транзисторовpmos (c, pwr, b);pmos (out, c, a);// реализации nmos-транзисторnmos (out, gnd, a);nmos (out, gnd, b);endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
11
4 Лексические соглашенияИдентификатор имен в Verilog: Может состоять из букв, цифр, $, символа подчеркивания(_).
Должен начинаться с буквы или символа подчеркивания.
Не может содержать пробелы. Чувствителен к регистру символов.
Например,reg enable; wire _ready;integer group_a; reg and5;tri clk$1;
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
12
Целочисленные значенияСинтаксис :
[sign] [size] 'base number где sign – знак, size - число битов для представления значения number,
base – система счисления: d или D десятичная, h или H шестнадцатеричная, o или O восьмеричная, b или B двоичная.
Примеры15'h f 'o 17 'd 15 10'd 20‘b 1111 'b 1_1_1_1 -5'b1_1011 8'h z
8'b0 (8'b00000000) 8'b1 (8'b00000001) 4'b10?? (4'b10zz) 8'bz (8'bzzzzzzzz) 8'bx (8'bxxxxxxxx) 8'h4? (8'b0100zzzz)12'h13x // значение последних 4 битов неизвестно4'd-2 // неправильное описание-8'd3 // отрицательное число,
// представлено дополнительным кодом 8-ю разрядами
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
13
Вещественные значения
Синтаксис:sign unsigned_number.unsigned_numbersign unsigned_number.unsigned_number e sign unsigned_numbersign unsigned_number.unsigned_number E sign unsigned_number
Пример17.5 10e50.5 0.5694_e-51_000_000.0
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
14
Строковые значенияСтроковые значения в Verilog записываются в двойных кавычках.
var = “Hello world!”;
В строках могут быть использованы специальные символы:
• \n – новая строка• \t – табуляция• \\ \ – символ \• \” – символ “ .
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
15
5. Классы и типы данных
Логический уровень Значение
0 логический 0, условие false1 логический 1, условие truex неизвестное значениеz высокий импеданс
Классы данных
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
16
Типы данных класса цепи (net)net_type [range] [delay3] list_of_net_identifiers ;
Типы данных wire/tri – линия wand/triand и wor/trior – линии с И и ИЛИ элементом supply0, supply1, tri0, tri1, trireg – описание элементов низкого уровня
Примерыwire a;wire b, c; wire d = 1'b0;tri tristate_buffer;wand #5 sig_1;trireg (small) t;
0 1 x z 0 1 x z 0 1 x z0 0 x x 0 0 0 0 0 0 0 0 1 x 01 x 1 x 1 1 0 1 x 1 1 1 1 1 1x x x x x x 0 x x x x x 1 x xz 0 1 x z z 0 1 x z z 0 1 x z
wire/tri wand/triand wor/trior
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
17
Регистровый класс данных
reg [range] list_of_identifiers;integer list_of_identifiers; // 32 разряда, знак.real list_of_identifiers;time list_of_identifiers; // 64 разряда, беззнакrealtime list_of_identifiers;
Примеры:reg reset; integer i;time t; real r;realtime rt1, rt2;
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
18
ВекторыСинтаксис
net_type [msb : lsb] list_of_net_identifiers;reg [msb : lsb] list_of_register_identifiers;
Примеры:reg [3:0] addr; // 4-разрядный регистр addrwire [-3:4] d; // переменная d размером 8 битов состоит
// из элементов: d[-3] (msb), d[-2], d[-1], d[0], // d[1], d[2], d[3], d[4] (lsb).
tri [5:0] x, y, z;busA[7] // элемент шины busA с индексом 7
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
19
Знаковые векторыСинтаксис
net_type signed [msb : lsb] list_of_net_identifiers;reg signed [msb : lsb] list_of_register_identifiers;
Пример
reg signed [3:0] signed_reg;
// старший бит рассматривается как знак // задает 4-битовый вектор, который может// принимать значения в диапазоне от -8 до 7
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
20
Массивы reg width identifier depth;
integer | time identifier length;
Примеры деклараций массивов:integer count[0:7] // массив из 8 слов целого типаreg [4:0] port_id [0:7]; //массив из 8 пятиразрядных слов
count[5]; // 5-й элемент массива port_id[3]; // 3-й элемент массива port_id
reg [7:0] mem [3:0], r; mem[0] = 7;r = mem[3];
reg arrayb[7:0][0:255]; // декларация двумерного// масссива однобитовых регистровf
wire w_array[7:0][5:0]; // декларация массива линий
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
21
Описание портов модуля (старый стиль) Синтаксис модуля для декларации портов и переменных:
module name_of_module ( port, port, … ) ;[input_declaration][output_declaration][inout_declaration][net_declaration][reg_declaration][time_declaration][integer_declaration][real_declaration]
other module_body ;endmodule
Пример декларации портовmodule module_1(a, b, c) ;
input [3: 0] a, b ;output [3: 0] c;
. . .endmodule
module module_1(a, b, c) ;input [3: 0] a, b ;output [3: 0] c;wire [3: 0] a, b ;reg [3: 0] c;. . .
endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
22
Описание портов модуля (новый стиль) Синтаксис модуля для декларации портов и переменных:
module name_of_module([input_declaration], [output_declaration],[inout_declaration]);[net_declaration][reg_declaration][time_declaration][integer_declaration][real_declaration]
other module_body ;endmodule
Пример декларации портовmodule module_1
(input [3: 0] a, b,output [3: 0] c);
. . .endmodule
module module_1(input [3: 0] a, b, output reg [3: 0] c);. . .
endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
23
Правило соединения портов
reg net/reg net/
inputnet
net
inout
output
netnet
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
24
Структурные моделиСинтаксис:
module_name [parameter_assignment] instance_name (list_of_connections);
Соединение по порядкуmodule dff (clk, d, q);
input clk, d;output q; reg q;
. . .endmodule
module top;reg data, clock;wire q_out, net_1;
dff inst_1 (clock, data, net_1);dff inst_2 (clock, net_1, q_out);endmodule
Соединение по имениmodule top;
reg data, clock;wire q_out, net_1;
dff inst_1 (.d(data), .q(net_1), .clk(clock));dff inst_2 (.clk(clock), .d(net_1), .q(q_out));endmodule
Пропущенный портdff inst_1 (clock, , net_1);
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
25
Массив копий модулей module my_module
(input a, b, output c);assign c = a & b;
endmodule
module top (input [3:0] a, b, output [3:0] c);
// создает 4 копии модуля my_modulemy_module inst [3:0] (a,b,c);
endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
26
Иерархические имена
Объекты модуля top будут иметь следующие иерархические имена:top.a, top.b, top.c, top.inst,
Объекты модуля my_module представляются списком:top.inst.a, top.inst.b, top.inst.c.
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
27
Параметры.1Синтаксис:
parameter [ signed ] [ range ] identifier = const_expr {, identifier = const_expr};parameter integer identifier = const_expr{, identifier = const_expr};parameter real identifier = const_expr{, identifier = const_expr};parameter realtime identifier = const_expr{, identifier = const_expr};parameter time identifier = const_expr{, identifier = const_expr};
Примеры определения параметров:parameter lsb = 7;parameter size = 8 , word = 32 ;parameter number = 3.92, frequency = 100;parameter clk_cycle = frequency / 2;parameter byte_size = 8, byte_mask = byte_size - 1;parameter signed [3:0] mux_selector = 0;parameter real r1 = 3.5e17;
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
28
Параметры.2 Пример использования параметров // Старый стиль
module my_module (Clk, D, Q) ;parameter width = 2, delay = 10;input [width - 1:0] D; input Clk; output [width:0] Q;
assign #delay Q = D;endmodule
// Новый стильmodule my_module (Clk, D, Q)
#(parameter width = 2, delay = 10)(input [width - 1:0] D, input Clk,output [width:0] Q);
assign #delay Q = D;endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
29
Переопределение параметров в операторе реализации
копии модуля
module top;reg Clk ;reg [7:0] D ;wire [7:0] Q ;
my_module #(7, 25) inst_1(Clk, D, Q) ;
endmodule
с помощью оператора defparam
module top;reg Clk;reg [7:0] D;wire [7:0] Q;
my_module inst_1(Clk, D, Q)endmodulemodule override;
defparam top.inst_1.width = 7;endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
30
Директивы компилятора.1Для определения текстовых макросов. `define <text_macro_name> <MACRO_TEXT>
Например:`define TESTEQ1 4’b1101 // определен текстовый макрос 1101`define myzero 0
//использование текстового макроса myzero//в любом месте Verilog-кода вместо нуля assign mysig = `myzero;
`define WORDSIZE 64
reg [`WORDSIZE-1 : 0] data_bus;
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
31
Директивы компилятора.2
Макросы могут содержать параметры и могут быть использованы для реализации функций
`define max(a,b) ((a) > (b) ? (a): (b))
n = `max(p+q, r+s);
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
32
Директивы компилятора.3 Для проведения условной компиляции:
`ifdef и `endif`ifdef MYVAR
module if_MYVAR_is_declared;...
endmodule`else
module if_MYVAR_is_not_declared;...
endmodule`endif
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
33
Директивы компилятора.4 Для использования информации, содержащейся в другом файле: `include “path/file-name-to-be-included”
Для описания единиц измерения и точности вычисления параметров времени `timescale time_unit / time_precisionДопустимые численные значения: 1, 10 и 100; Единицы измерения s, ms, us, ns, ps и fs.
Например, `timescale 10 ns / 100 psassign #5 Q = D; // Q получит значение D через 50 ns
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
34
Вентильные модели
a
b
cout
e#5
#4
a
b
cout
e#5
#4
a
b
cout
e#5
#4
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
35
Стандартные логические элементы
buf
not nand
and or
nor
xor
xnor
bufif1 notif1
bufif0 notif0
ABCDE
and
wire and
A, B, C, D, E;(A, B, C, D, E);
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
36
Таблицы истинности тристабильных вентилей
0 1 x z 0 1 x z0 0 z L L 0 z 0 L L1 1 z H H 1 z 1 H Hx x z x x x z x x xz x z x x z z x x x
0 1 x z 0 1 x z0 1 z H H 0 z 1 H H1 0 z L L 1 z 0 L Lx x z x x x z x x xz x z x x z z x x x
Data
bufif1 Control
Data
notif1 Control
Data
Data
Controlbufif0
notif0 Control
Символ L означает, что выход может принимать одно из двух значений 0 и Z, символ H – 1 и Z. Задержки символов H и L подобны задержкам при переходе в X.
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
37
Пример модели вентильного уровня (Вариант 1)
Y0
Y1
Y2
Y3
NotSel0
NotSel1
In0
In1
In2
In3
Sel1
Sel0 Out
Модель мультиплексора 4-в-1 вентильного уровняmodule mux_4_to_1 (Out, In0, In1, In2, In3, Sel1, Sel0);
output Out;input In0, In1, In2, In3, Sel1, Sel0;wire NotSel0, NotSel1;wire Y0, Y1, Y2, Y3;
and (Y1, In1, NotSel1, NotSel0);not (NotSel0, Sel0);and (Y3, In3, Sel1, Sel0);or (Out, Y0, Y1, Y2, Y3);and (Y0, In0, NotSel1, NotSel0);not (NotSel1, Sel1);and (Y2, In2, Sel1, NotSel0);endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
38
Пример модели вентильного уровня (Вариант 2)
Y0
Y1
Y2
Y3
NotSel0
NotSel1
In0
In1
In2
In3
Sel1
Sel0 Out
Модель мультиплексора 4-в-1 вентильного уровняmodule mux_4_to_1
( output Out, input In0, In1, In2, In3, Sel1, Sel0) ;
wire NotSel0, NotSel1;wire Y0, Y1, Y2, Y3;
and (Y0, In0, NotSel1, NotSel0),(Y1, In1, NotSel1, NotSel0),(Y2, In2, Sel1, NotSel0),(Y3, In3, Sel1, Sel0);
not (NotSel0, Sel0),(NotSel1, Sel1);
or (Out, Y0, Y1, Y2, Y3);endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
39
Определенные пользователем примитивы(UDP)
Синтаксис( port_list ) ;
sequential_input_list: current_state: next_state;
primitive udp_nameoutput output_port;input list_of_imputs;
initial output_port = value;
endtableendprimitive
combinational_input_list : output_value;table
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
40
Примеры описания UDP
(Out, Sel, In0, In1) ;primitive Mux2to1output Out;input Sel, In0, In1;
// нет инициализации
endtableendprimitive
// Sel In0 In1 : Out 0 0 ? : 0; 0 1 ? : 1; 1 ? 0 : 0; 1 ? 1 : 1; x ? ? : x;
table
(q, d, clk, clr) ;primitive d_ffoutput q; reg q;input d, clk, clr;
initial q=0;
endtableendprimitive
// d clk clr : q : q+// -------------------------------- ? ? 0 : ? : 0 ; 0 r 1 : ? : 0 ; 1 r 1 : ? : 1 ; ? n 1 : ? : - ; * ? 1 : ? : - ; ? ? * : ? : - ;
table
Примитив мультиплексора 2-в 1 Примитив D-триггера
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
41
Символы таблиц состояний в UDP Символ Интерпретация Комментарий
0 Логический 0 1 Логическая 1 x Неизвестное значение b Заменяет 0 и 1 ? Заменяет 0, 1 и x - Отсутствие изменений Разрешается использование только с
выходами последовательностных UDP
(v w) Переключение из значения v в w Значения v и w могут быть равны 0, 1, b и ? * Эквивалентно (??) Любое изменение значения r Эквивалентно (01) Передний фронт f Эквивалентно (10) Задний фронт p Эквивалентно (01), ( 0x), ( x1) Положительный фронт n Эквивалентно (1 0 ), (1 x), (x0) Отрицательный фронт
Не разрешается для выходов
Следующие символы используются только для входов последовательностных UDP
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
42
Пример использования UDPQ0
CLR
J KClk
Q1
CLR
J KClk
Q2
CLR
J KClk
Q3
CLR
J KClk
JK1JK2
JK3
ClrClk
En
module Count4En (Q, Clr, Clk, En);output [3:0] Q; wire [3:0] Q;input Clr, Clk, En;
wire JK1, JK2, JK3;JKMS Bit0 (Q[0], Clr, Clk, En, En);JKMS Bit1 (Q[1], Clr, Clk, JK1, JK1);JKMS Bit2 (Q[2], Clr, Clk, JK2, JK2);JKMS Bit3 (Q[3], Clr, Clk, JK3, JK3);and (JK1, Q[0], En); and (JK2, Q[1], JK1); and (JK3, Q[2], JK2);
endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
43
Задержки элементов
Задержка переднего фронта (rise delay)
Задержка заднего фронта (fall delay)
Задержка отключения (turn-off)
0, х или z
1
t_rise
1, х или z
t_fall
0
1, 0, х z
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
44
Описание задержек элементов При описании логических элементов задержка указывается после его имени в формате:
#(delay) | #(rise_delay, fall_delay) | #(rise_delay, fall_delay, turn-off_delay)
Каждое значение задержки может быть задано:# (number)| # (identifier)| # ( mintypmax: mintypmax: mintypmax)
Примеры описания задержек:and #(5) a1(out, i1, i2); and #(4, 6) a2(out, i1, i2); // rise_delay=4, fall_delay=6,
// turn-off_delay=4
`timescale 1 ns / 1 ps . . .and #(3, 4, 5) a3(out, i1, i2); // rise_delay=3 ns, fall_delay=4 ns,
// turn-off_delay=5 nsand #(4:5:6) a1(out, i1, i2); and #(3:4:5, 5:6:7) a2(out, i1, i2);and #(2:3:4, 3:4:5, 4:5:6) a3(out, i1, i2);
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
45
Пример использования задержек
`timescale 1 ns / 1 psmodule D(out, a, b, c);// декларация входных портов
output out;input a, b, c;wire e; // внутренняя линия
// реализация копии примитивов вентилейand #(5) a1(e, a, b); // задержка вентиля 5 ед. времениor #(4) o1(out, e, c); // задержка вентиля 4 ед. времениendmodule
module Da
b
cout
e#5
#4
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
46
Тестирование модели`timescale 1ns/1psmodule stimulus_simple;
reg A, B, C; // Декларация внутренних переменных wire OUT;
D d1(OUT, A, B, C); // Реализация копии модуляinitial // Формирование тестовых последовательностей
beginA = 1'b0; B = 1'b0; C = 1'b0;#10 A = 1'b1; // А=1 в 10 ns#5 B = 1'b1; // B=1 в 15 ns#5 A = 1'b0; // А=0 в 20 ns#10 $finish; // Моделирование
// закончится в 30 ns
endendmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
47
Контрольные вопросы и задания (1)1. Какой из языков лучше подходит для создания сложных иерархичных
проектов цифровых устройств?2. Какой организацией был разработан стандарт языка Verilog? 3. Что описывают модели поведенческого уровня описывают?4. Что описывают модели dataflow-уровня описывают?5. Что описывают модели поведенческого уровня описывают?6. Что описывают модели вентильного уровня описывают?7. Какие классы переменных существуют в Verilog ? 8. Какой из идентификаторов не является правильным Verilog–
идентификатором? 9. Какое описание соответствует 8-битовому вектору типа линия?10. Какая из деклараций описывает память из 20 элементов целого типа? 11. Какое описание соответствует памяти из 20 слов целого типа? 12. Записан следующий оператор присваивания: A=23456; Какой формат
имеет данное число в Verilog HDL? 13. Какое выражение описывает 16-битовое двоичное число? 14. Какой элемент вектора (reg [7:0] bus) содержит самый старший бит
значения?
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
48
Контрольные вопросы и задания
1. Указать название стандартного примитива.2. Сколько выходов может иметь
определенный пользователем примитив? 3. Как описывается поведение определенного
пользователем примитива? 4. Чему будут равны задержки следующим
образом описанного элемента?and #(5) a1(out, i1, i2);
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
49
Контрольные вопросы и задания (2)1. К переменной какого типа может быть подключен выход
модуля при построении структурных моделей устройств? 2. Указать название стандартного примитива.3. Сколько выходов может иметь определенный пользователем
примитив? 4. Как описывается поведение определенного пользователем
примитива? 5. Как можно переопределить значение параметра? 6. Каким образом может быть переопределено значение
параметра? 7. Чему будет равно значение параметров для копии inst модуля
my_module?module my_module (Clk, D, Q) ;
parameter width = 16, delay = 7;. . . my_module #(32, 7) inst (Clk, D, Q) ;
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
50
Контрольные вопросы и задания (3) 1. Написать декларацию модуля для следующего 4-разрядного
регистра с именем shift_reg. Описать входные порты без внутренней реализации устройства.
2. Создать модуль верхнего уровня stimulus со следующими переменными: REG_IN(4 бита) и CLK(1-бит) типа reg и REG_OUT(4 бита) типа wire. Создать в нем копию модуля shift_reg с именем sr1. Использовать способ соединения портов по порядку. 3. Выполнить предыдущее задание, используя для соединения портов
– соединение по имени. 4. Записать иерархическое имя переменных REG_IN и REG_OUT. 5. Написать иерархическое имя для копии компонента sr1. Написать
иерархическое имя для копии его портов.
reg_in [3:0]shift_reg
(4 )разряда reg_out [3:0]
clock