Сраный верилог
.pdf56 |
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 |
|||
|
|
|
|