Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Введение в verilog

Содержание

Стандартный поток проектирования устройств на FPGA (Design flow) Ввод описания проекта (Verilog, VHDL, Графический дизайн) RTL - моделирование, преобразование пользовательского описания в компоненты и примитивы, входящие в состав библиотеки FPGA. RTL – Register Transport Level (Уровень
Введение в Verilog Стандартный поток проектирования устройств на FPGA (Design flow) Ввод описания проекта (Verilog, Verilog – язык описания аппаратурыОписание схем, функциональных тестов и алгоритмов функционирования аппаратурыЛюбой Объект проекта – компонент – модульМодуль – базовая единица проектаМодуль должен быть Структурное описаниеРаскрывается функция компонентаМоделируемая система – множество процессов взаимодействующих с помощью сигналов. Создание экземпляра модуляmodule ModG (AA, BB, CC);  input Соединение портовПозиционный принцип – сопоставление портов в объявлении модуля и в его Net - соединение (связь, цепь, сигнал) передача сигналов между объектами, сигнал постоянно Verilog tutorial ( )Правила соединения портовВходной порт модуля должен иметь тип соединение Четырехзначный алфавит VerylogСимвол «?» так же используется для альтернативного представления «Z» состояния Функциональное моделирование. Общий подход.  Test-bench уровень (Уровень тестирующих программ)«Тest-bench» это специальный Разработка структурной схемы сумматораСумматор цифровая схема которая выполняет сложение чиселОдноразрядный полусумматор складывает Проект “adder” - сумматорСодержимое папки ‘design’top.vfull_adder.vhalf_adder_gate.vhalf_adder_rtl.vstimulus.vfull_adder_ref.vchecker.v full_adderresetclkcinin1in2sumcoutABSChalf_addermodule half_adder (S, C, A, B);      output Операторы поведенческого описания схемinitialbegin//Последовательность поведенческих операторов;end;запускается один раз в начале процесса моделирования Модуль full_adder (1/3)timescale 1ns/1psmodule full_adder(sum,cout,in1,in2,cin,clk,resetb);  output sum, cout; /выходные сигналы Full adder (2/3)module full_adder(sum,cout,in1,in2,cin,clk,resetb);  output sum, cout;  input  in1, Full adder (3/3)module full_adder(sum,cout,in1,in2,cin,clk,resetb);  output sum, cout;  input in1, in2, Структурная модель полусумматора  (описание на уровне базовых элементов (gate level))module half_adder_gate Поведенческое описание объектов Процессная форма описания поведения (Behavior model) module half_adder_beh1 (S, Поведенческое описание объектов  Полусумматор. Потоковое описание архитектуры (Data-flow model (RTL-модель)) Модели мультиплексора (Behavior model) always @ (sel or a or b or Test-bench: stimulusmodule stimulus(out1,out2,out3,clk,resetb);  output out1,out2,out3;  input clk,resetb;  reg out1,out2,out3; Verilog tutorial ( )Test-bench: full_adder_refmodule full_adder_ref(sum,cout,in1,in2,cin,clk,resetb);  output sum, cout;  input Verilog tutorial ( )Test-bench: checkermodule checker(in1,in2,cin,sum,cout,sumr,coutr,clk,resetb);  input in1,in2,cin,sum,cout,sumr,coutr,clk,resetb;  always @ Verilog tutorial ( )Test-bench:  topmodule top;  wire in1, in2, cin; Результаты моделирования Схема для лабораторной работы №3 http://www.allhdl.ru/verilog.php#primAhttp://naliwator.narod.ru/index.htmlVerilog tutorial ( ) Моделирование с использованием ModelSim GUIInvoking ModelSim form start menuCreate new projectAdd design filesCompileWave settingSimulationInvoking ModeSim project Verilog tutorial ( )Invoking ModelSim from start menu Verilog tutorial ( )File->New->Project Verilog tutorial ( )Specify project name and location Verilog tutorial ( )File->Add to Project->Existing File Verilog tutorial ( )Add files Verilog tutorial ( )After adding files Verilog tutorial ( )Compile->Compile All Verilog tutorial ( )After compilation Verilog tutorial ( )View->Debug Windows->Wave Verilog tutorial ( )After adding wave window Verilog tutorial ( )Select Library tab Verilog tutorial ( )Run simulation with top-level Verilog tutorial ( )After simulation Verilog tutorial ( )Selecting signals to be view Verilog tutorial ( )After selection Verilog tutorial ( )Run-All Verilog tutorial ( )Create a new projectInvoke ModelSimFile  New  ProjectSpecify Verilog tutorial ( )Add existing fileAdd the Verilog design file Verilog tutorial ( )Compile Verilog tutorial ( )Compile Verilog tutorial ( )Compile Verilog tutorial ( )Simulation Verilog tutorial ( )QuitThere should be ‘hello.mpf’, which is ModelSim project file.
Слайды презентации

Слайд 2 Стандартный поток проектирования устройств на FPGA (Design flow)
Ввод

Стандартный поток проектирования устройств на FPGA (Design flow) Ввод описания проекта

описания проекта (Verilog, VHDL, Графический дизайн)
RTL - моделирование,

преобразование пользовательского описания в компоненты и примитивы, входящие в состав библиотеки FPGA. RTL – Register Transport Level (Уровень регистровых пересылок)

Размещение полученных вентилей в ячейки
Временной анализ
Непосредственное размещение на микросхему и разводка связей

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

Конец разработки
Создание файла с конфигурацией устройства
Программирование микросхемы

Пользовательские
ограничения

Логический синтез, преобразование файлов в схему соединений

Моделирование на логическом уровне, функциональное моделирование

САПР


Слайд 3 Verilog – язык описания аппаратуры
Описание схем, функциональных тестов

Verilog – язык описания аппаратурыОписание схем, функциональных тестов и алгоритмов функционирования

и алгоритмов функционирования аппаратуры
Любой уровень детализации описания:
Функциональный
Описание устройств

процессор-память

Логический
Описание узлов
на уровне вентилей (gate level)
на уровне МОП-ключей (switch level)

Описание алгоритмов устройств
на уровне межрегистровых передач
и булевых функций

Описание алгоритмов ЭВМ
на уровне команд




Слайд 4 Объект проекта – компонент – модуль
Модуль – базовая

Объект проекта – компонент – модульМодуль – базовая единица проектаМодуль должен

единица проекта
Модуль должен быть задекларирован (объявлен).  подготовка
Mодуль может

быть конкретизирован (создан экземпляр)  использование
Определение модуля должно вкладывается между ключевыми словами ‘module’ и ‘endmodule’.


module module_name (список портов);
// in, out, inout объявление портов

// signal/wire/reg объявление сигналов
// data variable объявление переменных
// sub-module создание экземпляров вложенных
// модулей и подключение
// initial, always, function, task функциональные блоки,
// описывающие логику работы компонента
endmodule

module ModF (A, B, C);
input A;
inout [7:0] B;
output [7:0] C;
// описания
// описания ‘f’
endmodule

Интерфейс

Тело модуля

Интерфейс
имя модуля,
имена портов,
направленность портов (in, out, inout ),
разрядность портов (1 бит, n-битный вектор)

Тело модуля
Структурное описание
Поведенческое описание


Слайд 5 Структурное описание
Раскрывается функция компонента

Моделируемая система – множество процессов

Структурное описаниеРаскрывается функция компонентаМоделируемая система – множество процессов взаимодействующих с помощью

взаимодействующих с помощью сигналов. Изменения сигналов – события.

События порождают другие процессы.

Функция устройства представляется как структура компонент низшего уровня сложности соединяемых друг с другом связями

Компонент – объект внутренняя структура которого не имеет значения на данном уровне рассмотрения

Компонент может состоять из более простых компонент

На самом низшем уровне иерархии проекта функция компонента может быть раскрыта (поведенческое описание)

Использование библиотечных модулей – структурный синтез

Поведенческое описание

Разработчики САПР не раскрывают функцию компонента. Для разработчиков библиотечные модули доступны только в виде готовых компонентов для структурного синтеза

Создание собственных компонент для структурного синтеза. Раскрывается функция компонента.


Слайд 6 Создание экземпляра модуля
module ModG (AA, BB, CC);

Создание экземпляра модуляmodule ModG (AA, BB, CC); input   AA;

input AA;
inout

[7:0] BB;
output [7:0] CC;
wire a;
wire [7:0] b;
// описание ‘g’
// создание екземпляра ‘f’
ModF Umodf (.A(a), .B(b), .C(CC));
endmodule

создание экземпляра

Соединение портов

Имя экземпляра

Имя модуля

module ModF (A, B, C);
input A;
inout [7:0] B;
output [7:0] C;
// описания
// описания ‘f’
endmodule

Имена портов и связей совпадают

Связь между компонентами - вводятся имена


Слайд 7 Соединение портов
Позиционный принцип – сопоставление портов в объявлении

Соединение портовПозиционный принцип – сопоставление портов в объявлении модуля и в

модуля и в его экземпляре:
module ModF (A, B, C);
ModF

Umodf (a, b, cc);

Ключевой принцип - явное указание, какой сигнал подключить к какому порту модуля
module ModF (A, B, C);
ModF Umodf (.A(a), .B(b), .C(CC)); // в любом порядке





Порт

Сигнал


Слайд 8
Net - соединение (связь, цепь, сигнал)
передача сигналов

Net - соединение (связь, цепь, сигнал) передача сигналов между объектами, сигнал

между объектами, сигнал постоянно удерживается
выходом объекта - источником

(логический вентиль, комбинационная схема)
wire – простой провод


wand, wor – монтажное И/ИЛИ
tri, tri0, tri1, triand, trior, trireg - соединения с третьим состоянием
supply0 – постоянный 0 (GND)
supply1 – постоянная 1 (VCC/VDD)
Variable - переменная
Reg - регистр (сигнал не требующий драйвера)
хранение данных при отключении их от источника
не требует наличия тактирующего сигнала, изменяет значение в любой момент при поступлении новых данных
средствами синтеза интерпретируется как триггер, группа триггеров, регистр
Integer – специальный тип регистра
32-битовый знаковый тип данных
Real– регистры действительного типа
регистры действительного типа, действительные константы
Не поддерживаются средствами синтеза, функциональный синтез, отладка проекта, test-bench код

число

Типы данных Verilog

// инициализация провода
wire а;
// назначить другой сигнал
wire b; assign a = b;

// шина
wire [0:7]с;
wire [15:0]d;
// массив
// (8 32-х разрядных шин) wire [8:0] g [31:0]
assign a = c[4];

Поведенческое описание схемы - ПРОЦЕСС
аssign - оператор непрерывного присваивания

// шина
reg m[0:7];
reg n[15:0];
// присвоить проводу значение регистра wire с[1:0] = s[31:30];
// память 32 слова Х 8 бит
reg [7:0] s [31:0];

//4-х битное двоичное число
wire [3:0] t = 4'b0101; //8-ми битное шестнадцатеричное
// число A5
wire [3:0] q = 8'hA5;

real А; // регистр действительного типа
real Pi = 3.14; // действительная константа

// Массив из 11 целых чисел:
integer Data[0:10]


Слайд 9 Verilog tutorial ( )
Правила соединения портов
Входной порт модуля

Verilog tutorial ( )Правила соединения портовВходной порт модуля должен иметь тип

должен иметь тип соединение (связь)
Выходной порт модуля может иметь

тип или соединение или регистр (переменная)
Двунаправленные порты должны иметь только тип соединения

input

output

inout

reg or net

net

net

net

net

reg or net

input wire port_a, output wire [6:0] port_b,
output reg [3:0]z
input wire [0:4]w, inout wire y,


Слайд 10 Четырехзначный алфавит Verylog
Символ «?» так же используется для

Четырехзначный алфавит VerylogСимвол «?» так же используется для альтернативного представления «Z» состояния

альтернативного представления «Z» состояния


Слайд 11 Функциональное моделирование. Общий подход. Test-bench уровень (Уровень тестирующих

Функциональное моделирование. Общий подход. Test-bench уровень (Уровень тестирующих программ)«Тest-bench» это специальный

программ)
«Тest-bench» это специальный уровень кода (уровень тестирующих программ), который

создает пользовательские входные параметры (stimulus) для тестируемого проекта (DUT, design under test) и определяет, производит ли DUT ожидаемые (golden) выходные сигналы
«Тest-vector» установка значений для всех входных портов DUT(stimuli) и ожидаемых значений (образцов) выходных портов тестируемого модуля
«Тest-bench», который создает пользовательские входные сигналы, образцы выходных сигналов DUT и сравнивает выходные сигналы с ожидаемыми (golden) результатами называется однородно-проверяющим.


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

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


Слайд 12 Разработка структурной схемы сумматора
Сумматор цифровая схема которая выполняет

Разработка структурной схемы сумматораСумматор цифровая схема которая выполняет сложение чиселОдноразрядный полусумматор

сложение чисел
Одноразрядный полусумматор складывает два однобитных двоичных числа (А

и В). На выходе формируется значение суммы (S) и переноса (C).
Полный одноразрядный сумматор складывает три однобитный значения (C, A and B). На выходе формируется значение суммы (S) и переноса (C).












Многоразрядный сумматор
Суммирование с распространением переносов
Перенос из младшего полусумматора учитывается старшим полусумматором

Picture has been adopted from Wikipedia (http://en.wikipedia.org/wiki/Half_adder).

 

 

 

 


Слайд 13 Проект “adder” - сумматор
Содержимое папки ‘design’
top.v
full_adder.v
half_adder_gate.v
half_adder_rtl.v
stimulus.v
full_adder_ref.v
checker.v

Проект “adder” - сумматорСодержимое папки ‘design’top.vfull_adder.vhalf_adder_gate.vhalf_adder_rtl.vstimulus.vfull_adder_ref.vchecker.v

Слайд 14 full_adder
reset
clk
cin
in1
in2
sum
cout
A
B
S
C
half_adder
module half_adder (S, C, A, B);

full_adderresetclkcinin1in2sumcoutABSChalf_addermodule half_adder (S, C, A, B);   output S, C;

output S, C;

input A, B;
// описание модуля
endmodule

Модуль full_adder


Слайд 15 Операторы поведенческого описания схем
initial
begin
//Последовательность поведенческих операторов;
end;
запускается один раз

Операторы поведенческого описания схемinitialbegin//Последовательность поведенческих операторов;end;запускается один раз в начале процесса

в начале процесса моделирования (модельное время 0);
несколько блоков запускаются

параллельно;
игнорируется средствами синтеза логических цепей;
Назначение: формирование начальных значений и тестовых последовательностей, мониторинг значений сигналов, вывод на внешние носители информации

always [@(список чувствительности)]
begin
// Последовательность поведенческих операторов;
еnd
Оператор ожидания события
@ (A or D) / событие изменения сигналов А или В
@ posedge clk / событие фронта clk
@ negedge clk / событие среза clk
здесь следует размещаются поведенческие операторы, реализующие основной алгоритм функционирования электронного устройства.
работа процесса always – бесконечное формирование выходного сигнала электронным устройством по заданному алгоритму.

Поведенческие операторы (процессы)

аssign - оператор непрерывного присваивания

Операторы присваивания

module test1 (input wire date, input wire clk, output reg reg_a, output reg reg_b);

always @(posedge clk)
begin
reg_a<=date;
reg_b<=reg_a;
end
endmodule

reg_a=date;
reg_b=reg_a;

Неблокирующее присваивание (параллельно)

Блокирующее присваивание

В результате:
// reg_a=date;
// reg_b=reg_a;

В результате:
// reg_a=date;
// reg_b=date;


Слайд 16 Модуль full_adder (1/3)
timescale 1ns/1ps
module full_adder(sum,cout,in1,in2,cin,clk,resetb);
output sum,

Модуль full_adder (1/3)timescale 1ns/1psmodule full_adder(sum,cout,in1,in2,cin,clk,resetb); output sum, cout; /выходные сигналы input

cout; /выходные сигналы
input in1, in2, cin; /входные

сигналы
input clk, resetb; /входные сигналы
/ объявление типов связей, сигналов и соединений
wire sum, cout; /соединение (проводник)
reg rin1, rin2, rcin; /переменная (регистр)
wire s1, c1, s2, c2; /соединение (проводник)
/процедурный блок - процесс
always @ (posedge clk or negedge resetb) begin
if (resetb==1'b0) begin
rin1 <= 1'b0; rin2 <= 1'b0; rcin <= 1'b0; end
else begin
rin1 <= in1; rin2 <= in2; rcin <= cin;
end
end
/создание экземпляров модулей
half_adder_gate ha1 (.S(s1), .C(c1), .A(rin1), .B(rin2));
half_adder_rtl ha2 (.S(s2), .C(c2), .A(s1), .B(rcin));
/ процедурные присваивания
assign sum = s2;
assign cout = c1|c2;
endmodule

timescale 1ns/1ps

Дискретность времени моделирования (точность)

Длительность одного шага моделирования (единица)


Слайд 17 Full adder (2/3)
module full_adder(sum,cout,in1,in2,cin,clk,resetb);
output sum, cout;

Full adder (2/3)module full_adder(sum,cout,in1,in2,cin,clk,resetb); output sum, cout; input in1, in2, cin;

input in1, in2, cin;
input

clk, resetb;

wire sum, cout;
reg rin1, rin2, rcin;
wire s1, c1; wire s2, c2;

always @ (posedge clk or negedge resetb) begin
if (resetb==1'b0) begin
rin1 <= 1'b0; rin2 <= 1'b0; rcin <= 1'b0;
end else begin
rin1 <= in1; rin2 <= in2; rcin <= cin;
end
end

half_adder_gate ha1 (.S(s1), .C(c1), .A(rin1), .B(rin2));
half_adder_rtl ha2 (.S(s2), .C(c2), .A(s1), .B(rcin));

assign sum = s2;
assign cout = c1|c2;
endmodule

Имя модуля

Объявление портов

Описание портов

Описание сигналов и соединений

Создание экземпляров модулей полусуматора

Описание логики работы модуля, процесс

Описание логики работы модуля, процесс


Слайд 18 Full adder (3/3)
module full_adder(sum,cout,in1,in2,cin,clk,resetb);
output sum, cout;

Full adder (3/3)module full_adder(sum,cout,in1,in2,cin,clk,resetb); output sum, cout; input in1, in2, cin;

input in1, in2, cin;
input clk, resetb;

wire sum, cout;
reg rin1, rin2, rcin;
wire s1, c1; wire s2, c2;

always @ (posedge clk or negedge resetb) begin
if (resetb==1'b0) begin
rin1 <= 1'b0; rin2 <= 1'b0; rcin <= 1'b0;
end else begin
rin1 <= in1; rin2 <= in2; rcin <= cin;
end
end

half_adder_gate ha1 (.S(s1), .C(c1), .A(rin1), .B(rin2));
half_adder_rtl ha2 (.S(s2), .C(c2), .A(s1), .B(rcin));

assign sum = s2;
assign cout = c1|c2;
endmodule

Verilog типы данных: связь and переменная
net : wire
variable: reg, integer, real ...

Экземпляры моделей, которые описывают соединение портов в виде позиционного списка

Блоки непрерывного присваивания значений сигналам, которые срабатывают, если изменяется хотя бы один сигнал в правой части выражения.

Этот процесс запускается, когда наступает событие размещенное в списке чувствительности.
фронт ‘clk’
срез ‘resetb’

Блок процедурного присваивания, переменные внутри блока инициализируются и присваиваются многократно, если случается событие

=: оператор блокирующего присваивания
<=: неблокирующее присваивание

|: оператор побитового ИЛИ (OR)


Слайд 19 Структурная модель полусумматора (описание на уровне базовых элементов

Структурная модель полусумматора (описание на уровне базовых элементов (gate level))module half_adder_gate

(gate level))
module half_adder_gate (S, C, A, B);

output S, C;
input A, B;
and UAND (C, A, B);
xor UXOR (S, A, B);
endmodule

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

использование
библиотечных
модулей and и xor


Слайд 20 Поведенческое описание объектов Процессная форма описания поведения (Behavior model)

Поведенческое описание объектов Процессная форма описания поведения (Behavior model) module half_adder_beh1


module half_adder_beh1 (S, C, A, B);
output

S, C;
input A, B;
reg S, C;
always @ (A or B)
begin
if ((A==0) or (B==1)) and ((A==0) or (B==1))
begin S<=1’b1; C<=1’b0; end
else
begin
S<=1’b0;
if (A==0) and (B==0)
C<=1’b0; else C<=1’b1;
end
end

endmodule

Объект представлен в виде “черного ящика”, описывают функцию объекта - зависимость выходных сигналов от входных на уровне одного процесса.

module half_adder_beh2 (S, C, A, B);
output S, C;
input A, B;
reg S, C;
always
begin @ (A or B);
S<=A^B; / S = A or B
C<=A&B; / S = A хor B

end
endmodule


Слайд 21 Поведенческое описание объектов Полусумматор. Потоковое описание архитектуры (Data-flow

Поведенческое описание объектов Полусумматор. Потоковое описание архитектуры (Data-flow model (RTL-модель))

model (RTL-модель)) (RTL, Register Transfer Level, Уровень регистровых передач)
module half_adder_rtl

(S, C, A, B);
output S, C;
input A, B;
wire S, C;
assign C = A & B;
assign S = A ^ B;
endmodule

Объект представлен архитектурным описанием, где минимальная видимая единица примитив RTL уровня - RTL модель
Data-flow модель – модель потоков данных
Описывает поведение архитектуры объекта, потоки данных функционирующие на уровне архитектуры объекта и их преобразование.
Поведение архитектуры описывается с помощью операторов непрерывных назначений (присваиваний), которые представляют собой параллельные процессы.


Слайд 22 Модели мультиплексора (Behavior model)
always @ (sel

Модели мультиплексора (Behavior model) always @ (sel or a or b

or a or b or c or d)

if (sel == 2’b00) out = a;
else if (sel == 2’b01) out = b;
else if (sel == 2’b10) out = d;
else out = d;

always @ (sel or a or b or c or d)
case (sel)
2’b00: out = a;
2’b01: out = b;
2’b10: out = c;
default: out = d;
endcase

assign c = (s) ? b : a;

module mx_beh (sel, a, b, c, d, out);
output out;
input sel, a, b, c, d;
wire a, b, c, d;
wire [1:0]sel;
/ description
endmodule


Слайд 23 Test-bench: stimulus
module stimulus(out1,out2,out3,clk,resetb);
output out1,out2,out3;
input

Test-bench: stimulusmodule stimulus(out1,out2,out3,clk,resetb); output out1,out2,out3; input clk,resetb; reg out1,out2,out3; initial begin  out1

clk,resetb;

reg out1,out2,out3;

initial begin

out1 <=0; out2 <=0; out3 <=0;
/ ожидание сброса тригеров в 0
wait (resetb==1'b0);
wait (resetb==1'b1);
/ по фронту clk генерация на выходе трех битов
@ (posedge clk); out1=1; out2=0; out3=0;
@ (posedge clk); out1=0; out2=1; out3=0;
@ (posedge clk); out1=1; out2=1; out3=0;
@ (posedge clk); out1=0; out2=0; out3=1;
@ (posedge clk); out1=1; out2=0; out3=1;
@ (posedge clk); out1=0; out2=1; out3=1;
@ (posedge clk); out1=1; out2=1; out3=1;
@ (posedge clk);
/ повторить 3 раза
repeat (3) @ (posedge clk);

$finish; /
end
endmodule

<=: неблокируемый оператор присваивания

Initial однократно выполняемая конструкция, выполняется во время старта симуляции.

=: оператор блокирующего присваивания, присваивания выполняются последовательно

‘repeat’: Выполняет установку фиксированного количества тактов

‘wait’ – оператор ожидания условия (выполняется, когда условие станет true)

‘@’ оператор ожидания события

$finish - Системная задача, конец моделирования, выполняет остановку симулятора и передает управление назад операционной системе компьютера


Слайд 24 Verilog tutorial ( )
Test-bench: full_adder_ref
module full_adder_ref(sum,cout,in1,in2,cin,clk,resetb);
output

Verilog tutorial ( )Test-bench: full_adder_refmodule full_adder_ref(sum,cout,in1,in2,cin,clk,resetb); output sum, cout; input in1,

sum, cout;
input in1, in2, cin;
input

clk, resetb;

wire sum, cout;
reg rin1, rin2, rcin;


always @ (posedge clk or negedge resetb) begin
if (resetb==1'b0) begin
rin1 <= 1'b0;
rin2 <= 1'b0;
rcin <= 1'b0;
end else begin
rin1 <= in1;
rin2 <= in2;
rcin <= cin;
end
end

assign {cout, sum} = rin1+rin2+rcin;

endmodule

Оператор конкатенации ({, }) объединение двух или более значений в последовательность.


Слайд 25 Verilog tutorial ( )
Test-bench: checker
module checker(in1,in2,cin,sum,cout,sumr,coutr,clk,resetb);
input

Verilog tutorial ( )Test-bench: checkermodule checker(in1,in2,cin,sum,cout,sumr,coutr,clk,resetb); input in1,in2,cin,sum,cout,sumr,coutr,clk,resetb; always @ (clk)

in1,in2,cin,sum,cout,sumr,coutr,clk,resetb;
always @ (clk) begin

if ({cout,sum}=={coutr,sumr})
$display($time,,"correct");
else $display($time,,"error result=%b expect=%b", {cout, sum}, {coutr,sumr});
end
endmodule

Слайд 26 Verilog tutorial ( )
Test-bench: top
module top;
wire

Verilog tutorial ( )Test-bench: topmodule top; wire in1, in2, cin; wire

in1, in2, cin;
wire sum, cout, sumr, coutr;

reg clk, resetb;
full_adder Ufa (.sum(sum), .cout(cout), .in1(in1), .in2(in2), .cin(cin), .clk(clk), .resetb(resetb));
full_addr_ref Urf (.sum(sumr), .cout(coutr), .in1(in1), .in2(in2), .cin(cin), .clk(clk), .resetb(resetb));
stimulus Ust (.out1(in1), .out2(in2), .out3(cin), .clk(clk), .resetb(resetb));
checker Uck (.in1(in1), .in2(in2), .cin(cin), .sum(sum), .cout(cout), .clk(clk) , .resetb(resetb));
/ генератор синхроимпульсов с периодом 5ns
initial begin
clk <= 0;
forever #5 clk = ~clk;
end
initial begin
resetb <= 1’b0;
#200 resetb <= 1’b1;
end
initial begin
$dumpfile("wave.vcd");
$dumpvars(1);
$dumpvars(1, Ufa);
end
endmodule

Dumpfile задача для установки имени VCD file.

$dumpfile( filename ) ;

Dumpvars задача для установки переменных для записи в VCD file

$dumpvars ( level, module_name );

Forever – непрерывное назначение

Top-level модуль содержит весь проект, и не имеет входных портов.

VCD файлы – Value Change Dump File, текстовые файлы, описывают сигналы и моменты их изменения в проекте во время симуляции. Специальные программы - отображают сигналы в графическом виде (GTKWave)

Просмотр сигналов в графическом виде, в виде waveform

Уровень иерархии проекта относительно некоторого модуля. Без параметров - все сигналы будут выведены в файл


Слайд 27 Результаты моделирования

Результаты моделирования

Слайд 28 Схема для лабораторной работы №3

Схема для лабораторной работы №3

Слайд 30 http://www.allhdl.ru/verilog.php#primA
http://naliwator.narod.ru/index.html

Verilog tutorial ( )

http://www.allhdl.ru/verilog.php#primAhttp://naliwator.narod.ru/index.htmlVerilog tutorial ( )

Слайд 31 Моделирование с использованием ModelSim GUI
Invoking ModelSim form start

Моделирование с использованием ModelSim GUIInvoking ModelSim form start menuCreate new projectAdd design filesCompileWave settingSimulationInvoking ModeSim project

menu
Create new project
Add design files
Compile
Wave setting
Simulation
Invoking ModeSim project


Слайд 32 Verilog tutorial ( )
Invoking ModelSim from start menu

Verilog tutorial ( )Invoking ModelSim from start menu

Слайд 33 Verilog tutorial ( )
File->New->Project

Verilog tutorial ( )File->New->Project

Слайд 34 Verilog tutorial ( )
Specify project name and location

Verilog tutorial ( )Specify project name and location

Слайд 35 Verilog tutorial ( )
File->Add to Project->Existing File

Verilog tutorial ( )File->Add to Project->Existing File

Слайд 36 Verilog tutorial ( )
Add files

Verilog tutorial ( )Add files

Слайд 37 Verilog tutorial ( )
After adding files

Verilog tutorial ( )After adding files

Слайд 38 Verilog tutorial ( )
Compile->Compile All

Verilog tutorial ( )Compile->Compile All

Слайд 39 Verilog tutorial ( )
After compilation

Verilog tutorial ( )After compilation

Слайд 40 Verilog tutorial ( )
View->Debug Windows->Wave

Verilog tutorial ( )View->Debug Windows->Wave

Слайд 41 Verilog tutorial ( )
After adding wave window

Verilog tutorial ( )After adding wave window

Слайд 42 Verilog tutorial ( )
Select Library tab

Verilog tutorial ( )Select Library tab

Слайд 43 Verilog tutorial ( )
Run simulation with top-level

Verilog tutorial ( )Run simulation with top-level

Слайд 44 Verilog tutorial ( )
After simulation

Verilog tutorial ( )After simulation

Слайд 45 Verilog tutorial ( )
Selecting signals to be view

Verilog tutorial ( )Selecting signals to be view

Слайд 46 Verilog tutorial ( )
After selection

Verilog tutorial ( )After selection

Слайд 47 Verilog tutorial ( )
Run-All

Verilog tutorial ( )Run-All

Слайд 48 Verilog tutorial ( )
Create a new project
Invoke ModelSim
File

Verilog tutorial ( )Create a new projectInvoke ModelSimFile  New 

 New  Project
Specify ‘Project Name’ and ‘Project Location’


Слайд 49 Verilog tutorial ( )
Add existing file
Add the Verilog

Verilog tutorial ( )Add existing fileAdd the Verilog design file

design file


Слайд 50 Verilog tutorial ( )
Compile

Verilog tutorial ( )Compile

Слайд 51 Verilog tutorial ( )
Compile

Verilog tutorial ( )Compile

Слайд 52 Verilog tutorial ( )
Compile

Verilog tutorial ( )Compile

Слайд 53 Verilog tutorial ( )
Simulation

Verilog tutorial ( )Simulation

  • Имя файла: vvedenie-v-verilog.pptx
  • Количество просмотров: 138
  • Количество скачиваний: 1