Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Сраный верилог

.pdf
Скачиваний:
53
Добавлен:
01.04.2022
Размер:
4.18 Mб
Скачать

56

Verilog-HDL для моделирования и синтеза цифровых электронных схем

умножения/накопления на высоком уровне абстракции. То же устройство, но реализованное на более низком уровне абстракции (синтезируемая модель), представлено модулем МАС3.

Модуль Clock формирует сигнал синхронизации, модуль Test_Generator отвечает за формирование тестовой последовательности, а модуль Real_Conv используется для приведения типов (сигнал действительного типа разбивается на двоичные шины мантиссы и порядка).

Анализ результатов моделирования в испытательных стендах такого типа производится путем сравнения временных диаграмм двух групп выходных сигналов, полученных от моделей с низким и высоким уровнями абстракции. Обычно модель более высокого уровня абстракции гарантированно (с учетом предыдущих тестирований) не содержит ошибок, поэтому в случае рассогласований между соответствующими временными диаграммами выходных сигналов фиксируется наличие ошибки в модели более низкого уровня абстракции.

Текст Verilog-программы, реализующей рассмотренный пример испытательного стенда (рис. 3.3) для проектируемого устройства умножения/накопления, приведен ниже:

`timescale 1ps / 1ps module pic3_AbstractLevels

(Im_Res_Mantissa_1,Im_Res_Mantissa_2,Im_Res_Order_1, Im_Res_Order_2,Re_Res_Mantissa_1,Re_Res_Mantissa_

2,Re_Res_Order_1,Re_Res_Order_2) ;

output [42:0] Im_Res_Mantissa_1, Im_Res_Mantissa_2; output [42:0] Re_Res_Mantissa_1, Re_Res_Mantissa_2;

wire [42:0] Im_Res_Mantissa_1, Im_Res_Mantissa_2; wire [42:0] Re_Res_Mantissa_1, Re_Res_Mantissa_2;

output [4:0] Im_Res_Order_1, Im_Res_Order_2; output [4:0] Re_Res_Order_1, Re_Res_Order_2;

wire [4:0] Im_Res_Order_1, Im_Res_Order_2; wire [4:0] Re_Res_Order_1, Re_Res_Order_2;

Учебное§ 3. Синтезпособиеструктурных моделей цифровых устройств

57

parameter DANGLING_INPUT_CONSTANT = 1'bZ;

wire CLK, Im_A, Im_B, Im_Res, Re_A, Re_B, Re_Res, RST;

wire [42:0] Im_A_Mantissa, Im_B_Mantissa, Im_Res_Mantissa;

wire [42:0] Re_A_Mantissa, Re_B_Mantissa, Re_Res_Mantissa;

wire [4:0] Im_A_Order, Im_B_Order, Im_Res_Order, Re_A_Order, Re_B_Order, Re_Res_Order;

wire Dangling_Input_Signal = DANGLING_INPUT_CONSTANT;

// Включение компонентов

MAC2 U1

(.Im_A(Im_A), .Im_B(Im_B), .Im_Res(Im_Res),

.Re_A(Re_A), .Re_B(Re_B), .Re_Res(Re_Res));

RealConv U10

( .Mantissa(Im_Res_Mantissa_1),

.Order(Im_Res_Order_1),

.Real({Im_Res,{47{Dangling_Input_Signal}}}) );

MAC3 U2

( .CLK(CLK),

.Im_A_Mantissa(Im_A_Mantissa),

.Im_A_Order(Im_A_Order),

.Im_B_Mantissa(Im_B_Mantissa),

.Im_B_Order(Im_B_Order),

.Im_Res_Mantissa(Im_Res_Mantissa),

.Im_Res_Order(Im_Res_Order),

.RST(RST), .Re_A_Mantissa(Re_A_Mantissa),

.Re_A_Order(Re_A_Order),

.Re_B_Mantissa(Re_B_Mantissa),

.Re_B_Order(Re_B_Order),

.Re_Res_Mantissa(Re_Res_Mantissa),

58

Verilog-HDL для моделирования и синтеза цифровых электронных схем

.Re_Res_Order(Re_Res_Order) ); Test_Generator U3 (.CLK(CLK), .Im_A(Im_A),

.Im_B(Im_B), .RST(RST), .Re_A(Re_A), .Re_B(Re_B));

Clock U4 (.CLK(CLK) );

RealConv U5 (.Order(Re_A_Order),

.Real({Re_A,{47{Dangling_Input_Signal}}}));

RealConv U6 (.Order(Im_A_Order),

.Real({Im_A,{47{Dangling_Input_Signal}}}));

RealConv U7 (.Mantissa(Re_B_Mantissa),

.Order(Re_B_Order),

.Real({Re_B,{47{Dangling_Input_Signal}}}));

RealConv U8 (.Mantissa(Im_B_Mantissa),

.Order(Im_B_Order),

.Real({Im_B,{47{Dangling_Input_Signal}}}) );

RealConv U9 (.Mantissa(Re_Res_Mantissa_1),

.Order(Re_Res_Order_1),

.Real({Re_Res,{47{Dangling_Input_Signal}}}) );

assign Im_Res_Mantissa_2[42:0] = Im_Res_Mantissa[42:0]; assign Im_Res_Order_2[4:0] = Im_Res_Order[4:0]; assign Re_Res_Mantissa_2[42:0] = Re_Res_Mantissa[42:0]; assign Re_Res_Order_2[4:0] = Re_Res_Order[4:0];

endmodule

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

Учебное§ 3. Синтезпособиеструктурных моделей цифровых устройств

67

3.5. Синтез простейших логических цепей

Заметим, что оператора включения модуля уже достаточно для описания на языке Verilog простейших цифровых устройств, состоящих из стандартных логических элементов. В состав языка Verilog входит набор стандартных модулей, реализующих основные логические операции, такие как and, or, not, xor и прочие, идентификаторы которых совпадают с названиями соответствующих операций. При этом следует обратить внимание, что выходной сигнал в списке интерфейса стандартных логических модулей размещен первым, а входные сигналы, соответственно, – на втором и третьем месте. Так, например, запись

and (A, B, C)

означает A = B and C, а не C = A and B.

Рассмотрим разработку функциональных моделей устройств на логическом уровне абстракции на примере простой логической цепи, представленной на рис. 3.7.

 

GATE00

 

 

X0

g

 

Y1

 

GATE01

j

X1

and

 

or

 

GATE04

 

 

 

 

 

X2

 

 

Y0

GATE02

 

and

 

GATE03

 

k

f

X3

 

or

nand

 

 

 

 

 

 

X4

Рис. 3.7. Логическая цепь

68

Verilog-HDL для моделирования и синтеза цифровых электронных схем

В данном устройстве присутствуют 5 входных сигналов (X0 X4), 2 выходных сигнала (Y0, Y1), а также 4 внутренних сигнала (g, k, j, f), которые предназначены для передачи информации между входящими в цепь логическими элементами. Текст Verilog-программы, реализующей данную цепь (рис. 3.7), приведен ниже:

//Заголовок модуля:

module Net001 ( X0,X1,X2,X3,X4,Y0,Y1 );

//Описания портов и внутренних сигналов модуля:

input X0,X1,X2,X3,X4;

// Входные сигналы модуля

output Y0,Y1;

// Выходные сигналы модуля

wire X0,X1,X2,X3,X4,Y0,Y1;

 

//Определение внутренних сигналов модуля, связывающих

//отдельные структурные компоненты:

wire k,j,f,g;

//Описание внутренней структуры модуля:

//Включение стандартного модуля and под именем GATE00: and GATE00 (Y1, X0,X1);

//Включение прочих стандартных модулей:

or GATE01 (j, Y1,X2); or GATE02 (k, X2,X3); nand GATE03 (f, k,X4); and GATE04 (Y0, f,j);

endmodule

Полный список стандартных логических элементов языка Verilog приведен на рис. 3.8.

Учебное§ 3. Синтезпособиеструктурных моделей цифровых устройств

69

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

а) элемент И – модуль and

б) элемент И-НЕ – модуль nand

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в) элемент ИЛИ – модуль or

г) элемент ИЛИ-НЕ – модуль nor

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

д) элемент Исключающее ИЛИ –

е) элемент Исключающее ИЛИ-НЕ –

модуль xor

модуль xnor

Рис. 3.8. Стандартные логические модули языка Verilog

В отличие от модулей, создаваемых пользователем, стандартные логические элементы не имеют фиксированного количества входных портов. На вход всех элементов, перечисленных на рис. 3.8, можно подавать произвольное количество входных сигналов. Например, для реализации цепи, приведенной на рис. 3.9, достаточно использовать следующий оператор включения модуля:

wire Input0, Input2, Input3, Input3, Output0; and (Output0, Input0, Input1, Input2, Input3);

который осуществит операцию свертки по логической операции И всех разрядов входных сигналов.

70

Verilog-HDL для моделирования и синтеза цифровых электронных схем

Input0

Input1

Input2

Input3Output0

Рис. 3.9. Логическая цепь, состоящая из 3-х элементов И

Дополнительно, кроме перечисленных выше модулей, Verilog содержит шесть базовых логических элементов: buf, not, bufif1, bufif0, notif1, notif0.

Элементы buf и not (рис. 3.10) имеют один входной сигнал и произвольное число выходных сигналов. Входной сигнал всегда должен размещаться последним в списке портов оператора включения модуля. Эти блоки выполняют функцию разветвления сигналов. Кроме того, блок not осуществляет инверсию всех выходных сигналов.

а) элемент buf

б) элемент not

Рис. 3.10. Стандартные модули buf и not

Блоки bufif1, bufif0, notif1 и notif0 (рис. 3.11) отличаются от блоков buf и not наличием управляющего входа ctrl. Если на управляющем входе блока bufif1 или notif1 установлен низкий уровень сигнала, то, независимо от состояния второго входа, на выход блока поступает сигнал z. Блоки bufif0 и notif0 функционируют аналогичным образом, но с учетом инверсии сигнала ctrl.

Учебное§ 3. Синтезпособиеструктурных моделей цифровых устройств

71

ctrl

ctrl

а) элемент bufif1

б) элемент notif1

ctrl

 

ctrl

 

в) элемент bufif0

г) элемент notif0

Рис. 3.11. Стандартные модули bufif1, bufif0, notif1 и notif0

Таблица 3.1

Таблица истинности для модуля bufif1

Таблица 3.2

Таблица истинности для модуля bufif0

In

ctrl

0

1

x

z

 

 

 

 

 

 

 

0

 

z

0

L

L

1

 

z

1

H

H

x

 

z

x

x

x

z

 

z

x

x

x

In

ctrl

0

1

x

z

 

 

 

 

 

 

 

0

 

0

z

L

L

1

 

1

z

H

H

x

 

x

z

x

x

z

 

x

z

x

x

Таблица 3.3

Таблица истинности для модуля notif1

Таблица 3.4

Таблица истинности для модуля notif0

In

ctrl

0

1

x

z

 

 

 

 

 

 

 

0

 

z

1

H

H

1

 

z

0

L

L

x

 

z

x

x

x

z

 

z

x

x

x

In

ctrl

0

1

x

z

 

 

 

 

 

 

 

0

 

1

z

H

H

1

 

0

z

L

L

x

 

x

z

x

x

z

 

x

z

x

x

72

Verilog-HDL для моделирования и синтеза цифровых электронных схем

В табл. 3.1-3.4 приведены полные таблицы истинности для моду-

лей bufif1, bufif0, notif1 и notif0.

На примере, приведенном на рис 3.12, рассматривается применение стандартных модулей bufif1, bufif0, notif1 и notif0 для организации работы нескольких устройств на общую шину, что и составляет основную задачу их функционирования.

Устройство, показанное на рис. 3.12, содержит два четырехбитных регистра Reg1 и Reg2, подключенных посредством элементов bufif1 к общему четырехбитному выходу [Out3:Out0]. Вход select предназначен для выбора того из регистров, выходной сигнал которого будет послан на общий выход устройства.

Если на входной порт select подается высокий уровень сигнала, соответствующий логической 1, то входы ctrl блоков bufif1_01 … bufif1_04 получают значение 1, а входы ctrl блоков bufif1_05 … bufif1_08 устанавливаются в 0. Следовательно, в соответствии с таблицей истинности, блоки bufif1_01 … bufif1_04 пропускают без изменений значения сигналов, поступающих от регистра Reg1, а на выходах блоков bufif1_01 … bufif1_04 устанавливается сигнал z (высокий импеданс).

При одновременном присваивании одному и тому же сигналу различных значений в качестве результата присваивания выбирается то из значений, приоритет которого выше. Так как приоритет высокого импеданса z наиболее низкий, то любой сигнал, поступающий от регистра Reg1, будет иметь более высокий приоритет и, следовательно, именно этот сигнал устанавливается на общем выходе устройства.

Если же на вход select поступает сигнал логического 0, то, наоборот, компоненты bufif1_01 … bufif1_04 блокируют прохождение сигналов от регистра Reg1, а сигналы регистра Reg2 беспрепятственно поступают на выходы Out3 … Out0.

Представление о логическом синтезе будет неполным без обсуждения вопросов управления временными аспектами моделей.

Известно, что все реальные логические элементы обладают определенным временем задержки. Язык Verilog предоставляет развитые средства управления моделированием таких задержек. Для стандартных логических элементов существует возможность управления вре-

Select

 

 

 

структурныхпособиеСинтезУчебное.3 §

 

Reg1

 

 

X1

X1

NET40

 

X2

X2

NET132

bufif1_01

 

X3

 

 

bufif1_02

X3

NET136

моделей

 

X4

X4

NET140

bufif1_03

 

устройств цифровых

 

 

 

bufif1_04

 

Reg2

 

 

 

 

 

 

Y1

Y1

NET1032

 

Out0

Y2

Y2

NET1038

bufif1_05

Out1

 

Y3

Y3

NET1040

bufif1_06

Out2

 

Y4

Y4

NET1042

bufif1_07

Out3

 

 

 

 

bufif1_08

 

 

Рис. 3.12. Организация работы нескольких устройств на общую шину

73