Поиск

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

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

'Документ'
10 Дистиллятор Премиум 1 Л-ТБДР 5900 00 .107 Дистиллятор Премиум 0Л-ТБДР 900 00 .108 Дистиллятор Премиум 35Л-ТБ 8500 00 . 00 Дистиллятор Деревенский 1...полностью>>
'Документ'
12. Как звали лидера национально-освободительного движения, провозгласившего идею ненасилия, отказа от сотрудничества с колониальными властями. Бойкот...полностью>>
'Документ'
Об утверждении административного регламента предоставления муниципальной услуги «Предоставление информации о форме собственности на недвижимое имущест...полностью>>
'Учебно-методическое пособие'
Учебно-методическое пособие посвящено изучению особенностей менеджмента в автосервисе. Пособие включает задания для практической работы, рекомендации ...полностью>>

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

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

Препроцессор языка Verilog (директивы компилятора).

Наряду с механизмом параметров описанным выше в языке Verilog существует механизм сходный с текстовым препроцессором языка С. Этот механизм (по аналогии с С назову его препроцессором) позволяет проводить предварительную обработку текста до того как данные будут обработаны симулятором или средством синтеза. Данный механизм обеспечивает условную компиляцию, выполнение макроподстановок, интерфейс с внешней средой. Аналогом условной компиляции Verilog является конструкция if-generate языка VHDL.

Для работы препроцессора, а также других директив компилятора используется значек “ ` ” апострофа (не путать с кавычкой в литералах).

Наиболее употребимые директивы препроцессора `define, `include, `ifdef, `else, `endif.

Таким же образом задаются директивы компилятора, не являющиеся директивами препроцессора – например, `timescale.

Для включения текста из одного файла в другой используется `include имя_файла (например, `include "dumppins.v"). Следует помнить, что Verilog модули не могут объявляться внутри модуля (не могут быть вложенными) поэтому `include можно использовать либо вне модуля, либо включать в модуль код, не содержащий модулей (module … endmodule).

Использование `define для описания текстового макроса можно проиллюстрировать таким образом:

`define nc @(negedge clk)

Далее в коде программы данный макрос может использоваться следующим образом:

аlways `nc ….

или

a<= `nc b;

Пример директив условной компиляции может быть следующим:

`ifdef test0

`define CPUTEST0

`include "fault/test0"

`else

`define CPUTEST1

`include "fault/test1"

`endif

Так как определить макрос можно из командной строки компилятора (опция +define+_NAME_), то данный механизм позволяет использовать конфигурационные скрипты.

В настоящее время существуют средства синтеза, как не поддерживающие препроцессор (старые или недоделанные версии), так и расширяющие стандартный набор директив. Например, средство синтеза может поддерживать директиву `for , что позволяет реализовать конструкцию for-generate языка VHDL.

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

Данная статья направлена на то, чтобы осветить поведенческое моделирование и написание такого поведенческого кода, который может быть синтезирован средством синтеза. Кроме этого в языке существуют предопределенные модули. Которые могут быть использованы как структурные элементы нижнего уровня. Некоторые элементы мне не приходилось использовать, и для задач разработки СБИС или ПЛИС эти конструкции неприменимы. Например, описания транзисторных ключей: nmos pmos rnmos rpmos cmos rcmos.

Также существуют предопределенные логические ячейки: and nand nor or xor xnor buf not bufif0 bufif1 notif1 notif0.Совпадающие по названию с булевыми функциями являются двухвходовыми элементами, выполняющими соответствующую функцию, not – инвертор, buf – буффер, последние четыре элемента имеют вход разрешения и состояние высокого импеданса (z). Но так как любой из этих элементов может быть описан с использованием операторов языка, то смысл применения данных конструкций определяется предпочтением разработчика.

Например:

and U1(out,in1,in2);

то же самое что и

out=in1&in2;

или

bufif1 U2 (out,in,control);

то же самое что и

out=control?in:1’bz;

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

Для моделирования библиотечных элементов может применяться табличный механизм – UDP.

Это не синтезируемая конструкция, и по описанию похожа на модуль, но подчиняется более строгим правилам. Назначение UDP (User Defined Primitive) – моделировать логику, заданную таблицей истинности. При этом с помощью UDP можно описывать как комбинаторную логику, так и последовательную. UDP может иметь только один выход.

primitive and_or(out, a1,a2,a3, b1,b2);

output out;

input a1,a2,a3, b1,b2;

table

//state table information goes here

...

endtable

endprimitive

Как можно видеть основным элементом UDP является таблица истинности. Ее элементы могут принимать следующее значение:

0 Logic 0

1 Logic 1

x Unknown

? Iteration of 0, 1, and x Cannot be used in output field

b Iteration of 0 and 1 Like ?, except x is excluded Cannot be used in output field

- No change Can only be used in output field of a sequential UDP

(vw) Value change from v to w v and w can be any one of: 0, 1, x, ?, or b

* Same as ?? Any value change on input

r Same as 01 Rising edge on input

f Same as 10 Falling edge on input

p Iteration of (01), (0x), and (x1) Positive edge on input

n Iteration of (10), (1x), and (x0) Negative edge on input

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

Пример комбинаторного UDP (мультиплексора):

primitive multiplexer(mux,control,dataA,dataB ) ;

output mux ;

input control, dataA, dataB ;

table

// control dataA dataB mux

0 1 ? : 1 ; // ? = 0,1,x

0 0 ?:0;

1 ?1:1;

1 ?0:0;

x 0 0:0;

x 1 1:1;

endtable

endprimitive

Пример последовательного UDP:

primitive srff (q,s,r);

output q;

input s,r;

reg q;

initial q = 1'b1; // initial statement specifies that output

// terminal q has a value of 1 at the start

// of the simulation

table

// s r q q+

1 0 : ? : 1 ;

f 0 : 1 : - ;

0 r : ? : 0 ;

0 f : 0 : - ;

1 1 : ? : 0 ;

endtable

endprimitive

Синтезируемое подмножество языка.

Прежде чем вести разговор о синтезируемом подмножестве языка следует остановиться на общих принципах разработки СБИС или ПЛИС с использованием языков высокого уровня. Производитель микросхемы ПЛИС или фабрика, производящая СБИС, предоставляет модель библиотечных элементов, которые могут быть использованы в схеме. Эти библиотеки направлены на использование в различных областях проектирования (моделирование, синтез, топология кристалла и т.д.) и представляются в различных форматах. Один из форматов представляет из себя библиотеку элементов, описанных на языке высокого уровня и предназначенных для моделирования. В данной библиотеке содержатся элементы, описанные посредством несинтезируемых конструкций. В описании библиотечных элементов встречаются нерассмотренные в статье конструкции для описания сквозных задержек распространения (path delay) и механизмы контроля временных параметров (setup, hold time). Сквозные задержки позволяют описать задержку модуля, не вдаваясь в его внутреннюю структуру, и поддерживаются специальными словами языка (specify,specparam, endspecify) и специальным синтаксисом (например, (a,b,c*>x,y,z) = Tin; (d+=>x) = Tout;). А системные функции контроля используются для проверки того, что изменения сигналов происходят в нужные моменты времени, например, для того чтобы последовательная логика не попадала в метастабильное состояние. Я не останавливался подробно на этих элементах, потому что пользователю средств синтеза не нужно описывать библиотечные элементы, а в текстовом описании библиотеки обычно содержится информация о поведении элемента и его временной диаграмме. Можно сказать, что при разработке проекта СБИС или ПЛИС, возможно даже не придется вручную подключать/отключать эти элементы в структурном описании и вообще знать об их существовании .

Следующие два элемента разработки предоставляются пользователем – это синтезируемое описание на языке HDL и набор директив для средства синтеза. Также, конечно, нужен набор средств разработки, включающий в себя, симулятор и средство синтеза. Следует остановиться на отличиях синтеза от компиляторов поведенческих языков. Компилятор языка (например С) детерминированным образом переводит операторы языка в команды машинного языка. Синтез переводит последовательные операторы языка HDL в структурную схему, состоящую из библиотечных элементов. Данный процесс больше похож на перебор вариантов и выбор наилучшего, удовлетворяющего временным ограничениям и занимаемой площади. Следствием этого является то, что синтез это итеративный процесс, когда результаты предыдущего шага используются для коррекции директив для следующего шага. Методология написания директив синтеза и подход к синтезу схемы имеющей минимальное количество вентилей и максимальную тактовую частоту, является отдельным вопросом и в статье не рассматривается. Но в любом случае предоставляемое пользователем описание на языке HDL должно быть правильным: оно должно быть работоспособным и синтезируемым.

Рассмотрим шаги обычно требующиеся для разработки прибора на СБИС или ПЛИС:

  1. подготовка синтезируемого поведенческого описания схемы (этому шагу может предшествовать моделирование на С, Matlab, или специализированных средствах)

  2. написание тестовой оболочки – испытательного стенда (testbench), в которой проводится полное тестирование всех режимов модели

  3. итеративная процедура синтеза поведенческой модели, результатом которой является структурная схема (нетлист) с использованием библиотечных элементов и файл задержек распространения (SDF standard delay file)

  4. проверка работоспособности нетлиста, при этом обычно используется тот же testbench, что и для 2). Нарушением работоспособности может быть связано с нарушениями допустимых времен библиотечных элементов, гонками фронтов и пр. В зависимости от опыта разработчика происходит возврат к 1), 3) или переход к 5). Также полезно на этом шаге проверять результаты работы средств временного анализа (static timing report) для выяснения «узких мест» - критических путей проекта.

  5. процедура размещения и трассировки. Выполняется специальными средствами. Результатом является коррекция SDF файла (помимо прошивки ПЛИС или разводки СБИС ).

  6. проверка нетлиста с новыми задержками. Подобна 4), но возврат возможен к 1), 3), 5)

  7. in-place оптимизация (для большинства современных ПЛИС отсутствует), производится выравнивание времен распространения сигналов – усиление/ослабление выходов ячеек, установка буферов/элементов задержки

  8. повтор 6) до тех пор пока не будут достигнуты требуемые характеристики

  9. подготовка производственных тестов предназначенных для поиска неисправностей в СБИС (для ПЛИС этот шаг необязателен)

Шаг 3) в этой схеме раньше выполнялся вручную, когда поведенческое описание заменялось структурным самим разработчиком. В настоящее время существуют средства синтеза, которые могут синтезировать более эффективную схему. Пользование этими средствами накладывает ограничение на использование конструкций языка в исходном коде. То есть требуется синтезируемая модель. Кроме того, чтобы многократно не переписывать поведенческую модель, следует четко представлять, какое Verilog описание приведет к синтезу того или иного элемента схемы.

Ранее в статье было продемонстрировано как работает Verilog симулятор. Далее будут рассмотрены требования средств синтеза.

Любой элемент языка в результате синтеза может быть: 1) синтезирован, 2) проигнорирован, 3) вызвать ошибку. Конструкции языка могут поддерживаться полностью, частично или не поддерживаться.

Как уже упоминалось: иерархические имена, initial, fork-join или primitive не поддерживаются.

Временной контроль #nn игнорируется в синтезируемой модели.

Событийный контроль поддерживается частично – только в блоках always.

В документации к средству синтеза указывается какие ограничения вводятся на элементы языка. И перед написанием модели следует ознакомится с документацией.

Кроме этого существуют правила описания комбинаторной логики, последовательной логики, мультиплексоров, FSM и т.п.

Комбинаторная логика синтезируется из следующих конструкций:

1) непрерывное присвоение

assign a=b+c&d;

wire b={e,f} | g[1:0];

2) сигналы, описанные в функциях

3) сигналы, описанные следующей или подобной конструкцией

reg data_out;

always @(a or b or c)

if (b)

data_out = a ;

else

data_out = c ;

то есть блок always в списке чувствительности, которого перечислены все входные сигналы.

Как можно видеть в 3 (иногда во 2) случае описание сигнала с ключевым словом reg не приводит к созданию регистра.

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

Последовательная логика имеет ограничения в синтезируемых конструкциях.

Для описания регистра-защелки (latch) применяется следующая конструкция:

reg data_out ;

always @(data_in or enable)

if (enable)

data_out = data_in ;

Для регистров работающих по фронту/срезу сигнала применяется описание с posedge|negedge конструкцией.

reg data_out ;

always @(posedge clock)

data_out = data_in;

Чтобы добавить синхронный сброс, описание нужно дополнить:

reg data_out ;

always @(posedge clock)

if (set_sig)

data_out = 1'b1 ;

else if (reset_sig)

data_out = 1'b0 ;

else

data_out = data_in;

Сигналом установки/сброса, но не вносить эти сигналы в список чувствительности.

Для асинхронной установки/сброса конструкция должна быть изменена, так чтобы эти сигналы попали в список чувствительности:

reg data_out ;

always @(posedge clock or posedge set_sig or posedge reset_sig)

if (set_sig)

data_out = 1'b1 ;

else if (reset_sig)

data_out = 1'b0 ;

else

data_out = data_in;

Пользуясь этими принципами можно описать триггер любого типа.

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

Блок case, у которого не все входные воздействия расшифровываются, синтезируется в элемент последовательной логики. Также может использоваться для описания FSM (finite state machine). Поэтому кажется более правильным воспользоваться комбинаторным case и явно описать регистр для хранения результата (к примеру, для реализации FSM).

Ограничения, накладываемые средством синтеза на HDL язык, позволяют описывать логику работы схемы в виде комбинаторной логики и регистров для хранения результатов. Такое описание называется RTL (register transfer level) и иногда отделяется (по смыслу) от поведенческого. Основная идея, которую я хотел бы высказать в статье – это то, что следует пользоваться RTL описанием для моделирования и синтеза. Данный подход является эффективным методом ведения разработки. Так как «правильное» (написанное с применением правил изложенных выше), поведенческое описание может быть автоматически синтезировано на уровень вентилей, это позволяет значительно ускорить и упростить процесс разработки. При этом если временные ограничения были выбраны правильно (с учетом задержек в элементах библиотеки), то поведение RTL (поведенческой модели), не будет отличаться от поведения нетлиста (gate-level), и не должно отличаться от поведения готового изделия.

Завершая рассмотрение синтезируемого (RTL) кода следует упомянуть о директивах синтеза, не являющихся элементами языка Verilog. Директивы синтеза задаются в поле комментария и игнорируются при моделировании, но управляют средством синтеза: например

// synopsis synthesis off

$write(“this string is ignored by synthesis”);

// synopsis synthesis on

Или для уже упоминавшегося case существует директива синтеза (в последовательную или параллельную логику его синтезировать), которая может быть указана в поле комментария.

// ambit synthesis case = full | parallel | mux

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

Заключительное слово.

Данная статья не является документацией по языку Verilog. Целью написания было проиллюстрировать работу Verilog симулятора и показать возможность использования языка Verilog для разработки цифровых схем. При этом рассматривались аспекты связанные как с тестированием модели (написание испытательных стендов), так и проблемы написания синтезируемого кода. Приведенные примеры и объяснения к ним должны были (по замыслу автора) показать различия между процедурными языками и языками описания HDL. Развитие CsoC и ПЛИС позволяет предположить, что все большие части проекта могут быть реализованы в виде описания HDL. В статье сделана попытка показать, что Verilog является сильным и удобным средством для этого.



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

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

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

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

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

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

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

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