Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Конкурс'
Конкурс проводится среди воспитанников детских дошкольных учреждений, учащихся начальных классов учебных заведений, учащихся учреждений дополнительног...полностью>>
'Урок'
- Правильно. Сегодня мы с вами вспомним и расскажем стихи об осени наших замечательных русских поэтов. Еще раз убедимся, как тонко и точно они рассказ...полностью>>
'Документ'
В статье анализируется опыт внедрения дистанционных технологий обучения в Донском государственном техническом университете, обосновывается необходимос...полностью>>
'Документ'
После принятия «Акта провозглашения независимости Украины» 24 августа 1991 г. у нового на политической карте мира государства — Украины — появилась во...полностью>>

Главная > Документ

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

Структурное описание:

Основной структурной единицей Verilog описания является module. Модуль соответствует entity в VHDL. Модуль описывается ключевыми словами module – endmodule. В файле может быть описано несколько модулей. Другие модули могут подключаться к цепям модуля, образуя иерархическую структуру. При запуске Verilog симулятор строит иерархическое дерево из всех модулей, которые обнаружены в файлах поданных на вход симулятора и находит модуль верхнего уровня. Если таких модулей несколько, то происходит ошибка. Как правило, модуль содержит список портов – интерфейсных сигналов, которые служат для подключения его в других модулях. Порты бывают трех типов input – входы, output –выходы, inout – двунаправленные. Входы и двунаправленные порты должны иметь тип wire, а выходы могут быть как wire, так и reg.

Синтаксис модуля рассмотрим на примере накопительного сумматора:

module NCO (FC, CO, C); // имя модуля и список портов

input FC, C; // входы

output CO; // выход

// описание используемых сигналов

wire [3:0] FC;

wire C; // не обязательно – так как по умолчанию вход – однобитный провод

reg [3:0] acc;

reg CO;

// описание поведения системы

initial

begin

acc=0;

CO=0;

end

always @(posedge C) // событие – фронт С

{CO,acc}={CO, acc}+FC;

endmodule

Модуль NCO не включает в себя другие модули и является модулем нижнего уровня иерархии. В модуле присутствуют две «поведенческие» конструкции: initial и always. Initial служит для описания действий которые выполняются один раз (при запуске модели), а always обозначает действия, которые выполняются постоянно. Ключевые слова begin/end имеют такое же значение как в процедурном языке Паскаль (соответствуют {} в С). Для того чтобы always имело смысл используется событийный контроль – конструкция @(posedge C) означает по положительному фронту сигнала С. То есть операция {CO,acc}={CO,acc}+FO; выполняется по каждому фронту С. Фигурные скобки обозначают объединение сигналов с различными именами в шину. «Объединение» может находится как слева, так и справа от знака = в операции присвоения.

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

module hello_word; // интерфейсные порты отсутствуют

initial

$display(“HELLO, WORLD !!!”); // вызов системной функции

endmodule

После запуска симулятора должно получиться приблизительно следующее:

Highest level modules:
hello_word
 
HELLO, WORLD !!!
0 simulation events

В данном примере была использована системная функция $display, которая используется для печати либо форматированной строки (как С функция printf из библиотеки stdio), либо своих аргументов (как writeln в Паскале). Все системные функции и функции, написанные пользователем и подключенные через PLI интерфейс, начинаются со знака $.

Немного забегая вперед, следует сказать, что язык Verilog (так же как и VHDL) изначально предназначался для моделирования, и средства синтеза появились позже. Поэтому часть конструкций языка не поддерживается синтезом. Одной из таких конструкцией является initial. Для того чтобы осуществить начальную инициализацию в синтезируемой модели следует предусмотреть специальный сигнал сброса.

module NCO_syn (FC, CO, C, Rst); // имя модуля и список портов

input FC, C, Rst; // входы

output CO; // выход

// описание используемых сигналов

wire [3:0] FC;

wire C, Rst; // не обязательно – так как по умолчанию вход – однобитный провод

reg [3:0] acc;

reg CO;

// описание поведения системы

always @(posedge C or posedge Rst) // событие – фронт С или Rst

if (Rst)

{CO,acc}=5’b0;

else

{CO,acc}={CO, acc}+FC;

endmodule

В данном примере добавлена процедурная конструкция if. Как можно видеть, она подобна конструкции if в языке C, нулевое значение в скобках соответствует false, ненулевое - true. Подробно о процедурных конструкциях будет рассказано позже. Но следует заметить, что если в скобках стоит выражение, имеющее после вычисления биты со значением z или х, то выполняется else ветвь.

Для проверки работоспособности модуля используются испытательные стенды (testbench). Это модуль верхнего уровня, в котором могут использоваться несинтезируемые конструкции (initial) и типы данных (event, time, real). Также испытательные стенды содержат системные функции для вывода информации ($display, $write, $monitor), записи файлов изменения сигналов (vcd – value change dump) для последующего анализа, исследования статистических свойств сигналов и т.п.

Предположим, что модуль NCO будет использоваться для генерации частот 33МГц и 40МГц при тактовой частоте 100МГц. Для этого в накопительный сумматор на вход FC (frequency code) следует подать 11 и 13 соответственно. При этом полученные частоты будут 34.375МГц (ошибка 1.375МГц) и 40.9125МГц (ошибка 0.9125МГц), что предположим и требуется. В модуле testbench будут использоваться временные задержки – конструкции вида #NN, где NN время в наносекундах. Более подробно различные виды задержек (delay) будут рассмотрены ниже. Оба модуля (NCO и testbench) могут быть записаны либо в один, либо в разные файлы.

`timescale 1ns/10ps //директива симулятора – установка шага времени (необязательно, так как 1ns/10ps – значения по умолчанию)

module testbench;

// объявление сигналов

reg clk, rst;

reg [3:0] fc1,fc2

wire f1, f2;

// объявление переменных

integer clk_cnt, f1_cnt, f2_cnt;

real ratio;

//построение иерархии

NCO_syn nco1(.Rst(rst), .C(clk), .FC(fc1), .CO(f1)); //подключение по имени

NCO_syn nco2(fc2, f2, clk, rst); //подключение по расположению

initial

begin

clk=0;

rst=0;

fc1=4’d11;

fc2=4’d13;

clk_cnt=0;

f1_cnt=0;

f2_cnt=0;

end

always #5 clk=~clk; // генератор тактовой частоты 100МГц

// управление

initial

#1 rst=1'b1; // формирование сброса

#2 rst=1'b0;

#1200; //время симуляции

$display("toggle: clk ", clk_cnt, " , f1 ", f1_cnt, " , f2", f2_cnt); /*вывод результатов – без использования формат строки */

ratio=100.0*$itor(f1_cnt)/$itor(clk_cnt); // $itor – преобразование integer в real

$write("freqv @ clk=100MHz f1=%f", ratio);

ratio=100.0*$itor(f2_cnt)/$itor(clk_cnt);

$display(" f2=%f", ratio);

$finish; // завершение симуляции

end

// сбор статистики

always @(posedge clk)

clk_cnt=clk_cnt+1;

always @(posedge f1)

f1_cnt=f1_cnt+1;

always @(posedge f2)

f2_cnt=f2_cnt+1;

//два метода индикации (выбрать один, чтобы не засорять выход)

// 1

// печатает при изменении одного из сигналов

//initial $monitor("Time %t clk %b rst %b f1 %b f2 %b",$time,clk,rst,f1,f2);

// 2

//печатает по срезу clk

always @(negedge clk) $write("Time %t clk %b rst %b f1 %b f2 %b \n", $time, clk, rst, f1, f2);

endmodule.

Как можно видеть блоков initial и always может быть сколько угодно, исполнение происходит одновременно (о том как работает симулятор, будет рассказано при рассмотрении операции присваивания). Порядок исполнения различных конструкций определяется только по времени исполнения.

Построение иерархии (подключение модулей) возможно двумя способами: по имени (указываются имена портов, использованные при описании модуля) или по расположению (порядок сигналов такой же, как в описании модуля).

После запуска со вторым вариантом печати будет выдано следующее:

Compiling source file "testbench.v"

Compiling source file "nco.v"

Highest level modules:

testbench

Time 1000 clk 0 rst 0 f1 0 f2 0

Time 2000 clk 0 rst 0 f1 1 f2 1

Time 3000 clk 0 rst 0 f1 0 f2 0

Time 4000 clk 0 rst 0 f1 0 f2 1

Time 5000 clk 0 rst 0 f1 1 f2 0

Time 6000 clk 0 rst 0 f1 0 f2 0

Time 7000 clk 0 rst 0 f1 0 f2 1

Time 8000 clk 0 rst 0 f1 1 f2 0

Time 9000 clk 0 rst 0 f1 0 f2 1

[----------- skipped --------------]

Time 118000 clk 0 rst 0 f1 1 f2 1

Time 119000 clk 0 rst 0 f1 1 f2 0

Time 120000 clk 0 rst 0 f1 0 f2 1

toggle: clk 120 , f1 41 , f2 49

freqv @ clk=100MHz f1=34.166667 f2=40.833333

L41 "testbench.v": $finish at simulation time 120300

Время измеряется в единицах, заданных вторым параметром директивы timescale (10ps), и соответственно time 7000 означает 70ns после старта симуляции. Общее время симуляции составило 1+2+1200=1203ns. Размерность временные параметров задаваемых в исходном коде модуля определяется первым параметром директивы timescale (1ns).

Вычисленные значения f1 и f2 отличаются от полученных моделированием. При увеличении длины выборки (времени моделирования) разница будет уменьшаться.



Похожие документы:

  1. Контрольные вопросы 23

    Контрольные вопросы
    ... деятельности, как объект разработки и как технологии разработки информационных систем. Это ... Предполагают, что между первыми инструментами обработки материальных объектов и средствами ... услугой. Переход к технологиям цифровой связи приводит к сближению служб ...
  2. ПЕРЕЧЕНЬ НАУЧНЫХ СТАТЕЙ И ДОКЛАДОВ опубликованных в 2014 году

    Документ
    ... для линейного логического синтеза цифровых структур / Н.Н. ... уравнения базовых схем включения мультидифференциальных ... 21 Разработка оптико-электронного устройства для ... Каращенко, В.В. Учёт финансовых инструментов и инвестиций в соответствии ... .auris-verlag.de/ ...
  3. Оправилах записи программы 9 Очем можно не беспокоиться 9 Описание архитектуры объекта 9

    Реферат
    ... описывать поведение, т.е. алгоритмы функционирования цифровых систем, а также проводить ... определение можно заменить структурной схемой. Можно моделировать: параллелизм, ... следующие стили проектирования и описания схем: структурный, потоковый, поведенческий, ...
  4. Болотова алла Константиновна

    Документ
    ... Л.С.Выготского через разработку общепсихологической теории ... (см. схему) Схема хронотопической детерминации ... деятельности является необходимым инструментом приспособления к меняющимся ... наименьшей ошибкой (показания электронного секундомера, вмонтированного ...
  5. Базы знаний интелектуальных систем гаврилова хорошевский

    Документ
    ... , традиционная схема разработки СПЗ I ... электронные учебники. Размещение в узлах сети не только текстовой и цифровой ... 1994. «Сценарий» — инструмент визуальной разработки компьютерных программ // Компьютерные техноло­ ... and Languages, Springer-Verlag. 287. Fridman ...

Другие похожие документы..