апкс 2011 02_verilog

50
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected] 1 2. Основные понятия и конструкции языка Verilog Автоматизация проектирования компьютерных систем VERILOG

Upload: irina-hahanova

Post on 15-Jun-2015

1.009 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: апкс 2011 02_verilog

2/9/2011д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ

e-mail: [email protected] 1

2. Основные понятия и конструкции языка Verilog

Автоматизация проектирования компьютерных систем

VERILOG

Page 2: апкс 2011 02_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

2

Цель лекции и содержание

Цель – знакомство с базовыми конструкциями языка Verilog

План1. Модуль – базовая единица языка Verilog.2. Уровни абстракции описания моделей3. Лексические соглашения4. Классы и типы данных5. Описание портов модуля6. Параметры7. Директивы компилятора8. Стандартные логические элементы9. Определенные пользователем примитивы10. Задержки

Page 3: апкс 2011 02_verilog

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 схем, особенно для проектов низкого уровня.

Наиболее популярен в Северной Америке и Азии, особенно в Японии. Непопулярен в Европе.

Page 4: апкс 2011 02_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

4

Диаграмма стандартов Verilog

Page 5: апкс 2011 02_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

Page 6: апкс 2011 02_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

6

2. Уровни абстракции моделей

поведенческий (или алгоритмический) dataflow-уровень (уровень передачи данных) вентильный уровень транзисторный уровень (switch-level)

Page 7: апкс 2011 02_verilog

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

Поведенческий или алгоритмический – это верхний уровень описания проектов, отражающий алгоритм их функционирования без деталей реализации

Page 8: апкс 2011 02_verilog

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

Page 9: апкс 2011 02_verilog

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

Модели вентильного уровня задаются логическими элементами и соединениями между ними.

Page 10: апкс 2011 02_verilog

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

Page 11: апкс 2011 02_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

11

4 Лексические соглашенияИдентификатор имен в Verilog: Может состоять из букв, цифр, $, символа подчеркивания(_).

Должен начинаться с буквы или символа подчеркивания.

Не может содержать пробелы. Чувствителен к регистру символов.

Например,reg enable; wire _ready;integer group_a; reg and5;tri clk$1;

Page 12: апкс 2011 02_verilog

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-ю разрядами

Page 13: апкс 2011 02_verilog

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

Page 14: апкс 2011 02_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

14

Строковые значенияСтроковые значения в Verilog записываются в двойных кавычках.

var = “Hello world!”;

В строках могут быть использованы специальные символы:

• \n – новая строка• \t – табуляция• \\ \ – символ \• \” – символ “ .

Page 15: апкс 2011 02_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

15

5. Классы и типы данных

Логический уровень Значение

0 логический 0, условие false1 логический 1, условие truex неизвестное значениеz высокий импеданс

Классы данных

Page 16: апкс 2011 02_verilog

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

Page 17: апкс 2011 02_verilog

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;

Page 18: апкс 2011 02_verilog

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

Page 19: апкс 2011 02_verilog

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

Page 20: апкс 2011 02_verilog

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]; // декларация массива линий

Page 21: апкс 2011 02_verilog

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

Page 22: апкс 2011 02_verilog

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

Page 23: апкс 2011 02_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

23

Правило соединения портов

reg net/reg net/

inputnet

net

inout

output

netnet

Page 24: апкс 2011 02_verilog

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);

Page 25: апкс 2011 02_verilog

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

Page 26: апкс 2011 02_verilog

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.

Page 27: апкс 2011 02_verilog

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;

Page 28: апкс 2011 02_verilog

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

Page 29: апкс 2011 02_verilog

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

Page 30: апкс 2011 02_verilog

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;

Page 31: апкс 2011 02_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

31

Директивы компилятора.2

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

`define max(a,b) ((a) > (b) ? (a): (b))

n = `max(p+q, r+s);

Page 32: апкс 2011 02_verilog

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

Page 33: апкс 2011 02_verilog

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

Page 34: апкс 2011 02_verilog

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

Page 35: апкс 2011 02_verilog

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);

Page 36: апкс 2011 02_verilog

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.

Page 37: апкс 2011 02_verilog

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

Page 38: апкс 2011 02_verilog

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

Page 39: апкс 2011 02_verilog

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

Page 40: апкс 2011 02_verilog

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-триггера

Page 41: апкс 2011 02_verilog

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

Page 42: апкс 2011 02_verilog

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

Page 43: апкс 2011 02_verilog

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

Page 44: апкс 2011 02_verilog

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);

Page 45: апкс 2011 02_verilog

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

Page 46: апкс 2011 02_verilog

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

Page 47: апкс 2011 02_verilog

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) содержит самый старший бит

значения?

Page 48: апкс 2011 02_verilog

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]

48

Контрольные вопросы и задания

1. Указать название стандартного примитива.2. Сколько выходов может иметь

определенный пользователем примитив? 3. Как описывается поведение определенного

пользователем примитива? 4. Чему будут равны задержки следующим

образом описанного элемента?and #(5) a1(out, i1, i2);

Page 49: апкс 2011 02_verilog

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) ;

Page 50: апкс 2011 02_verilog

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