Поиск

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

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

'Документ'
13.   1С: Школа. Физика, 7-11 классы. Библиотека наглядных пособий (CD). –  М.: Министерство образования РФ, ГУРЦ ЭМТО, ООО Дрофа, ЗАО «1С», ЗАО НПКЦ ...полностью>>
'Конкурс'
Лесосибирский филиал федерального государственного бюджетного образовательного учреждения высшего профессионального образования «Сибирский государстве...полностью>>
'Документ'
Совсем недавно я присутствовала на областном форуме работников образования Белгородской области, который четко и ясно поставил перед нами задачи по ра...полностью>>
'Документ'
- местоположение земельного участка установлено относительно ориентира расположенного за пределами границ участка. Участок находится на расстоянии при...полностью>>

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

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

Процедуры и функции.

Функции применяются (как правило) для моделирования комбинаторной логики и средства синтеза генерируют комбинаторную логику по описанию функции. В функциях запрещен временной контроль. При вызове функции создается регистр, размерность и имя которого совпадает с размерностью и именем функции. Через этот регистр функция возвращает результат своей работы. Функция может возвращать также целое или вещественное число. Все параметры, передаваемые в функцию, имеют тип input.

function [7:0] swap;

input [7:0] byte;

begin

swap = {byte[3:0],byte[7:4]};

end

endfunction

Вызов функции осуществляется следующим образом:

a=swap(b);

Прежде чем рассматривать процедуры, рассмотрим иерархическую структуру Verilog модели и области видимости объектов. Локальные переменные (сигналы или параметры) могут объявляться внутри модуля, именованного блока, процедуры или функции. Если в локальной области видимости симулятору не удается обнаружить переменную, то поиск продолжается в более «высокой» области видимости до тех пор, пока не дойдет дело до переменных, сигналов, параметров объявленных внутри модуля. Если внутри модуля переменная не обнаружена, то выдается сообщение об ошибке. Таким образом, модуль является высшим элементом иерархии областей видимости. Для доступа к объектам в других модулях, которые собранные в иерархическую структуру, служит операция разрешения контекста. Эта операция задается с помощью имен модулей или именованных блоков внутри модуля (процедур или функций) разделенных точкой. Так в примере с делителем частоты (первая часть статьи) для доступа к внутреннему регистру acc модуля NCO_syn из модуля верхнего уровня testbench нужно воспользоваться такой конструкцией <имя включения (instance)>.acc .

// 2

always @(negedge clk) $write("Time %t clk %b rst %b f1 %b f2 %b phase1 %b phase2 %b\n", $time, clk, rst, f1, f2, nco1.acc, nco2.acc );

При этом на печать будут выдаваться значения фазы (из области видимости модулей NCO_syn)

Time 112000 clk 0 rst 0 f1 1 f2 1 phase1 0000 phase2 0000

Time 113000 clk 0 rst 0 f1 1 f2 1 phase1 1011 phase2 1101

Time 114000 clk 0 rst 0 f1 0 f2 0 phase1 0110 phase2 1010

Time 115000 clk 0 rst 0 f1 1 f2 1 phase1 0001 phase2 0111

Time 116000 clk 0 rst 0 f1 1 f2 0 phase1 1100 phase2 0100

Time 117000 clk 0 rst 0 f1 0 f2 1 phase1 0111 phase2 0001

Time 118000 clk 0 rst 0 f1 1 f2 1 phase1 0010 phase2 1110

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

Такой механизм доступа создает ограничение, налагаемое на локальные переменные. Также следует вспомнить о параллельном исполнении и о том, что процедуры в языках HDL не «вызываются», а «разрешаются». Такое название свидетельствует о том, что одновременно может исполняться несколько копий процедуры, так как в процедуре разрешен временной и/или событийный контроль. Но при этом память для локальных переменных НЕ ВЫДЕЛЯЕТСЯ. То есть копии одной и той же процедуры, работающие параллельно, будут «портить» друг другу локальные переменные. Иллюстрацией является практическая невозможность рекурсивных процедур или функций. На эти грабли может наступить программист, работавший с процедурными языками.

Синтаксис процедур следующий:

task my_task;

input a, b;

inout c;

output d, e;

reg foo1, foo2, foo3;

begin

// the set of statements that performs the work of the task

c = foo1; // the assignments that initialize

d = foo2; // the results variables

e = foo3;

end

endtask

При этом любое число параметров может передаваться в/из процедуры.

Вызов (или «разрешение») процедуры производится следующим образом:

my_task (v, w, x, y, z);

Функция не имеет права вызывать процедуру, а процедура может разрешать другие процедуры и вызывать себя рекурсивно (см. локальные переменные) или вызывать функции.

Системные функции.

В примерах данной статьи я неоднократно использовал системные функции $monitor, $display, $write, $finish, $time. Это малая часть средств, которые предоставляются Verilog системой программисту для анализа результатов моделирования. Благодаря наличию механизма PLI, обеспечивающего подключение исполняемого кода (написанного либо пользователем, либо третьей стороной), число системных функций и задач, которые выполняются с их помощью, очень велико. Основное назначение – это сбор/анализ информации и взаимодействие с системой. Признак системной функции - $. Остановимся на наиболее популярных системных функциях:

$finish – завершение моделирования

$stop – переход в интерактивный режим

$display, $write – вывод данных в stdout (дублируется в лог-файл), поведение либо как C функция printf с формат строкой (поддерживаются дополнительные форматы, например, %b -бинарный), либо как Паскаль процедура write с разделенными «,» аргументами. $display завершает вывод «переводом строки»

$monitor – отслеживает изменения аргументов, в конце каждого временного шага печатает при обнаружении изменения значения. Формат как у $display

$readmemb, $readmemh – обеспечивают считывание данных (в бинарном или шестнадцатеричном представлении) из файла в память (см. первую часть статьи). Формат файла очень простой – в каждой строке либо слово требуемой разрядности, либо конструкция @<адрес загрузки>. Очень удобно применять для моделирования ПЗУ.

$system – выполняет команду ОС (вызов С функции system())

файловые операции - $fopen, $fclose, $fwrite, $fmonitor … – позволяют записывать в файлы

запись дампфайлов - $dumpfile, $dumpvars … позволяют записать изменения сигналов модуля, всего проекта или отдельных в специальном формате для последующего изучения. Очень полезный и сильный механизм

$time – возвращает время симуляции

численные функции $itor, $random … - выполняют преобразования или возвращают результат математической функции.

Это малая часть стандартных функций. Полный список следует искать в документации к симулятору. Так же есть функции, которые не являются стандартными (в настоящий момент времени), но поставляются в виде отдельных объектных модулей или С кода. Примером таких функций являются $utConnectivity, записывающая список соединений модели для последующего просмотра с помощью Undertow (/), или $toggle_count, служащая для сбора статистики переключения сигналов.

Параметры.

При описании цифровых схем возникает необходимость в задании констант, определяющих какие-либо фиксированные параметры. Эти константы могут описывать характерные задержки, ширину шин или любой другой параметр, не изменяющийся во время симулирования модели и известный на момент компиляции. Но в то же время при использовании модели одного и того же модуля в различных технологических условиях или включения его различным образом в модули высшего уровня данные константы должны иметь возможность изменятся. В языке VHDL данную функцию решают с помощью generic. В Verilog для этого используются параметры. То есть в описании модуля наряду с описанием переменных и сигналов могут описываться и параметры:

module parity (bus, out);

parameter width=8, typ_delay=1, modul_delay=typ_delay*2;

wire [width-1:0] bus;

wire out;

assign #modul_delay out=^bus;

endmodule

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

Включать модуль в иерархию можно следующим образом:

parity U1(bus1,out1); // будут использованы значения по умолчанию (width=8, typ_delay=1, modul_delay=typ_delay*2)

parity #(4, 0.5) U2(bus2,out2); // ширина шины – 4 бита, типовая задержка 0.5 (задержка в модуле 0.5*2=1)

parity #(16, 1, 5) U3(bus3,out3); // ширина шины – 16 бит, типовая задержка 1 (игнорируется), задержка в модуле 5

То есть конструкция #(фактический параметр, фактический параметр, … ) соответствует map generic языка VHDL. Может возникнуть путаница между конструкциями временного контроля и параметрами, но, во-первых, временной контроль и привязка параметров происходит в разных конструкциях языка и по контексту видно значение знака #, а во-вторых, параметры, как правило, определяют временные задержки внутри модуля.

Кроме такого механизма установки параметров существует механизм defparam и иерархические имена, позволяющий сгруппировать все фактические параметры в модулях в одном месте вышестоящего модуля. То есть пример можно переписать следующим образом.

module top; //модуль верхнего уровня

…..

parity U1(bus1,out1);

parity U2(bus2,out2);

parity U3(bus3,out3);

….

defparam

top.U2.width=4;

top.U2.typ_delay=0.5;

top.U2.width=16;

top.U2.modul_delay=5;

endmodule

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

Следует, однако, помнить, что не всякий синтез поддерживает иерархические имена и defparam, поэтому следует пользоваться первым механизмом для написания синтезируемого кода.



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

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

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

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

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

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

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

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