литература / kondratenko_yu_p_mokhor_v_v_sidorenko_s_a_verilog_hdl_dlya_m
.pdf
Учебное§ 3. Синтезпособиеструктурных моделей цифровых устройств |
53 |
reg [n:0] X_Out; // Разрядностьзаданаспомощью параметраn wire CLK;
wire WE;
//Задержка задана с помощью параметра
//Setting_Time (см. разделы 4.1.2, 4.2.7)
always @(posedge CLK) //Поведенческие операторы
#Setting_Time X_Out = WE? X_In : X_Out;
endmodule
Далее создадим модуль верхнего уровня, дважды включающий в себя модуль Reg с различными значениями параметров. Включение Reg16 интерпретируется как 16-разрядный регистр с временем задержки 40 ns, а включение Reg4 – как 4-разрядный регистр с временем задержки 70 ns:
module Main ();
reg [15:0] Bus01; wire [15:0] Bus02; reg [3:0] Bus03; wire [3:0] Bus04;
wire clk, we;
//Определение параметров включения Reg16 defparam Reg16.n = 15;
defparam Reg16.Setting_Time = 4; Reg Reg16 ( .X_In(Bus01), .CLK(clk),
.WE(we), .X_Out(Bus02) );
//Определение параметров включения Reg4 defparam Reg4.n = 3;
defparam Reg4.Setting_Time = 7; Reg Reg4 ( .X_In(Bus03), .CLK(clk),
.WE(we), .X_Out(Bus04) );
endmodule
54 |
Verilog-HDL для моделирования и синтеза цифровых электронных схем |
В вышеприведенной программе для установки конкретных значений настраиваемых параметров включаемого модуля Reg использован оператор defparam, синтаксис которого приводится ниже:
defparam Имя_Включения.Параметр = Значение_Параметра;
Таким образом, использование настраиваемых параметров (например, n и Setting_Time) представляет собой удобный механизм для создания гибких универсальных настраиваемых структурных компонентов.
54 |
Verilog-HDL для моделирования и синтеза цифровых электронных схем |
3.3. Испытательные стенды
Одной из важных задач, решаемых с применением оператора включения модулей, является разработка испытательных стендов для программ на языке Verilog.
Под «испытательным стендом» понимается специальный модуль, созданный для тестирования и верификации разрабатываемого устройства, а не какое-либо физическое устройство в общепринятом смысле.
Простейший испытательный стенд состоит из двух частей – тестируемого устройства (UUT – Unit Under Testing) и кода, генерирующего тестовую последовательность. В более сложном случае испытательный стенд может включать модули, реализующие одно и то же устройство, но описанные на разном уровне абстракции (см. раздел 1.2). При этом задача испытательного стенда также состоит в сравнении результатов работы устройств с разным уровнем абстракции. Тестовые последовательности могут быть сгенерированы различными способами [20; 21], а также считаны из внешних источников (например, из дисковых файлов).
На рис. 3.3 приведен пример испытательного стенда, содержащего модели различных уровней абстракции для устройства умножения/ накопления комплексных чисел, описанные в разделе 1.2 (см. рис. 1.2, 1.3).
Блок МАС2 представляет собой модуль, реализующий устройство
Учебное§ 3. Синтезпособиеструктурных моделей цифровых устройств |
55 |
Рис. 3.3. Структура испытательного стенда со сравнением моделей двух уровней абстракции
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. Синтезпособиеструктурных моделей цифровых устройств |
59 |
3.4.Использование редактора блок-диаграмм пакетаActive-HDL
Среда Active-HDL предоставляет пользователям широкий набор средств эффективного управления процессами разработки и верификации цифровых электронных устройств. В частности, время, затрачиваемое на построение структурной модели, значительно сокращается при использовании входящего в состав пакета Active-HDL развитого редактора блок-диаграмм (Block diagram editor).
Панели инструментов редактора блок-диаграмм представлены на рис. 3.4. Как видно из рис. 3.4, интерфейс редактора является стандартным для Windows-приложений и легко понимается интуитивно.
Созданная в редакторе блок-диаграмма транслируется специальной программой в код на языке описания оборудования (VHDL или Verilog, в соответствии с установками пользователя). При помощи соответствующей кнопки можно просмотреть результирующий код, что особенно полезно для начинающих пользователей в качестве примера хорошего стиля в структурном моделировании на языке Verilog.
На рис. 3.5 показаны обозначения, принятые в блок-диаграммах среды Active-HDL.
Пример блок-диаграммы, реализующей сумматор для восьмиразрядныхбеззнаковых целыхчисел всредеActive-HDL, показан нарис. 3.6.
Блок-диаграммы могут состоять из блоков, символов, связей специальных знаков (заземление, высокий уровень сигнала и т.д.), а также текстовых и графических комментариев. Кроме того, к блокдиаграммам можно добавлять фрагменты кода на языке Verilog, которые будут помещены в итоговую программу.
Следует обратить внимание, что приведенный пример содержит 7 включений устройства Full_Adder. Они имеют одинаковое имя, так как ссылаются на один и тот же модуль, написанный на языке Verilog, но в то же время отдельные включения различаются по уникальному идентификатору, расположенному над компонентом (например, U3, U12). Каждый блок (компонент) может быть реализован кодом на языках Verilog или VHDL, а также с помощью диаграмм конечных автоматов или блок-диаграмм. Все шины и цепи на схеме также могут иметь уникальные идентификаторы.
60 |
Verilog-HDL для моделирования и синтеза цифровых электронных схем |
Стандартные |
Кнопки отмены |
Кнопки для перехода |
кнопки |
и восстановления |
между страницами |
«Вырезать», |
предыдущей операции |
диаграммы и по иерархии |
«Копировать», |
|
|
проекта |
|
«Вставить» |
|
|
|
|
Кнопки управления |
Кнопки генерирования и |
|||
масштабом |
просмотра Verilog-кода, |
|||
изображения |
соответствующего |
|||
|
диаграмме |
|||
|
Кнопка «Добавить |
|||
|
элемент интерфейса» |
|||
Кнопка «Показать |
|
|
|
|
|
Кнопка «Добавить |
|
||
библиотеку символов» |
|
фрагмент Verilog-кода» |
|
|
Кнопка «Добавить блок» |
|
|
|
|
|
|
|
||
|
|
Кнопки вставки текстовых |
||
|
|
|
и графических комментариев |
|
Кнопки «Добавить цепь» |
|
|
|
|
и «Добавить шину» |
|
|
Кнопки вставки |
|
|
|
|
||
|
|
|
специальных знаков |
|
Рис. 3.4. Панели инструментов редактора блок-диаграмм
Идентификатор данной копии
устройства
Названия сигналов (для шин указана разрядность)
Завершенное (библиотечное) устройство
Входные сигналы устройства |
U9 |
|
|
U3 |
Двунаправленный сигнал |
|
|
Sig_001 |
|
||||
Input0 |
Carry_In |
S |
Sig_001 |
Bus_01(7:0) |
||
|
||||||
Input1 |
X1 Carry_Out |
|
Bus_01(7:0) |
BusBidirectional0(7:0) |
||
X2 |
|
|
|
|
||
Input2 |
|
|
|
Выходной сигнал устройства |
||
Full_Adder |
|
BusOutput0(7:0) |
||||
|
|
|
||||
|
|
|
|
|
|
|
|
BusOutput0(7:0) |
Идентификатор устройства |
|
Device_001 |
|
|
||||
|
Многоразрядный сигнал (шина) |
|||||||
Одноразрядный сигнал |
|
|
|
|
|
|
|
Output0 |
Разрабатываемое (незавершенное) |
|
|||||||
|
|
|
||||||
|
|
устройство |
|
|
|
|||
Рис. 3.5. Принятые для блок-диаграмм обозначения в среде Active-HDL
устройств цифровых моделей структурныхпособиеСинтезУчебное.3 §
61
