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

литература / kondratenko_yu_p_mokhor_v_v_sidorenko_s_a_verilog_hdl_dlya_m

.pdf
Скачиваний:
0
Добавлен:
13.05.2026
Размер:
8.49 Mб
Скачать

Учебное§ 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