Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

МОДУЛЬ 2. 1.10. Язык проектирования аппаратуры VHDL



1.10. Язык проектирования аппаратуры VHDL

1.10.1. Реконфигурируемая логика

Уже отмечалось, что во многих случаях полностью заказные СБИС (ASIC) дороги, а решения, основанные на программной реализации медленные или энергоемкие. Реконфигурируемая логика обеспечивает решение задачи для случаев, если алгоритмы могут быть эффективно реализованы с помощью заказных СБИС. Такие решения дают почти такое же быстродействие, как и ASIC, но зато реализованные функции могут быть легко изменены конфигурационными данными. Поэтому реконфигурируемая логика находит применение в следующих областях.

Быстрое создание прототипа. Современные ASIC очень сложные, требуют больших усилий разработчиков и длительного времени проектирования. Поэтому часто желательно создать прототип, который мог бы быть использован для экспериментов с системой, работающей «почти» как окончательная система. При этом потребляемая мощность может быть больше, временные ограничения смягчены и только определяющие функции соответствуют техническим требованиям. Поэтому прототип может бать использован для проверки основополагающего поведения системы.

Малый объем приложений. Если ожидаемый объем рынка мал для оправдания реализации приложения в виде ASIC, а программная реализация была бы медленной или неэффективной, тогда выбор остается за реконфигурируемой логикой.

Системы реального времени. Временные характеристики проектов на реконфигурируемой логике обычно хорошо определенны. Поэтому решения получаются с предсказуемым временем выполнения.

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

СБИС с названием Field Programmable Gate Array (FPGA, программируемая пользователем вентильная матрица) – наиболее общая форма реконфигурируемой логики. Название подчеркивает, что устройство программируется в пользователем в полевых условиях, т.е. после производства и без особых трудностей. Реконфигурируемая логика часто содержит RAM для хранения конфигурации. Однако RAM является энергозависимой памятью. Поэтому конфигурационные данные должны копироваться в RAM при включении питания из внешней энергонезависимой памяти, такой как ROM или Flash. На рис. 47 в качестве примера приведена схема планировки FPGA Virtex-II фирмы Xilinx [17].

В более поздней FPGA Virtex-5 [18] матрица содержит 240 × 108 конфигурируемых логических блоков (CLB - Configurable Logic Blocks), которые можно соединить, используя программируемую структуру соединений. Матрица также содержит 1200 пользовательских входов-выходов и 1056 блока DSP включающих умножитель 25 × 18 бит и 16416 Кбит RAM блок.

Рис. 47. Схема планировки FPGA Virtex-II

Каждый CLB состоит из двух секций (slice), как показано на рис. 48.

Рис. 48. Virtex-5 CLB

Секция состоит из четырех элементов памяти (рис. 49). Каждый элемент памяти может быть использован как таблица соответствия (LUT - Look-Up Table) для реализации одной 6-входовой логической функций (таких функций 2^64) или двух 5-входовых логических функций (таких функций 2^32), а также сконфигурированы как RAM или сдвиговые регистры (SRL). С помощью мультиплексоров несколько элементов памяти могут быть объединены. Каждая секция содержит еще 4 выходных регистра и специальную логику для реализации быстрых операций арифметического сложения.

Конфигурационные данные определяют установки для мультиплексоров, синхронизацию регистров и RAM, содержимое RAM и соединения между CLB. Обычно эти данные генерируются из проектов, написанных, например, на VHDL.

Рис. 49. Упрощенная схема секцииVirtex-5

1.10.2. Введение в VHDL

Существует два популярных представителя группы языков HDL (Hardware Description Language), предназначенных для описания цифровых аппаратных средств, это Verilog и VHDL: первый более краткий, менее гибкий, менее приятный; второй многословный, очень гибкий и более приятный.

История VHDL восходит к 80-м годам прошлого века. В это время многие системы проектирования использовали графические HDL, когда наиболее общим строительным блоком был логический вентиль. Однако разработчики использовали и текстовые HDL, преимущество которых состояло в простоте представления сложных преобразований с использованием переменных, циклов и рекурсий. По мере усложнения устройств текстовые HDL почти полностью вытеснили графические.

Язык VHDL (VHSIC Hardware Description Language) был разработан в рамках программы VHSIC (Very High Speed Integrated Circuits) министерства обороны Соединенных Штатов.

В 1987 VHDL приобрел статус стандарта IEEE (IEEE Std. 1076 - 1987). В 1993 после ревизии начальной версии стал VHDL’93, и далее на его основе VHDL’98, VHDL’2000, VHDL’2002, VHDL’2006, VHDL’2008, а подмножество VHDL AMS (Analog Mixed Signal) позволяет описывать как чисто аналоговые, так и смешанные, цифро-аналоговые схемы.

При разработке VHDL использовался язык программирования ADA, как отправная точка, т.к. оба языка разрабатывались для министерства обороны. В свою очередь ADA базируется на PASCAL, поэтому VHDL является синтаксическим сленгом PASCAL. Однако синтаксис VHDL более сложный.

1.10.2.1. Программирование на VHDL для моделирования и синтеза [19]

Программа на VHDL используется как модель, отражающая некоторое устройство. Система моделирования исполняет программу на VHDL, имитируя работу реального устройства. Поведение устройства представляется в модели через события изменения сигналов и формируемые временные диаграммы сигналов. Наблюдая это поведение, разработчик анализирует свой проект, делает выводы о его правильности. Здесь программа на VHDL рассматривается как модель – VHDL программа-модель.

Синтез является обратным процессом. При синтезе программа на VHDL рассматривается как спецификация, детальное описание, исходные данные и требования, по которым должна быть сгенерирована реализация физического устройства на СБИС. Синтезирующие компиляторы САПР по программе на VHDL генерируют реализацию проектируемого устройства. Здесь программа на VHDL выступает как программа-спецификация для синтеза.

Не всякая программа-модель может быть использования как программа-спецификация для синтеза. Не для всякой программы на VHDL ее поведение при моделировании будет соответствовать поведению устройства, синтезированного по этой же программе. Поэтому говорят о синтезируемом подмножестве языка VHDL. Имеется в виду та часть конструкций и понятий VHDL, которые могут использоваться в программе-спецификации для синтеза, исключая запрещенные для синтеза конструкции. Однако такого стандартизованного подмножества не существует.

Компиляция устройства по VHDL программе-спецификации может использовать разные наборы элементов (элементный базис). Базис реализации может состоять из элементов разного уровня – от вентилей и логических блоков табличного типа (LUT) до макроячеек сложных функциональных блоков – мультиплексоров, регистровых блоков, блоков памяти, умножителей и процессорных ядер. После компиляции производится оптимизация схемы с целью увеличения быстродействия или сокращения аппаратных затрат, уменьшения размеров на кристалле. Оптимизация схемы приводит к ее трансформациям, иногда весьма существенно меняющей структуру, которая просматривается в исходном тексте. Результатом может быть расхождение в поведении модели устройства и поведении реализации устройства, синтезированной по той же программе на VHDL. Разработчик должен учитывать возможность таких трансформаций, когда пишет программу-спецификацию.

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

1.10.2.2. Entity и architecture

VHDL, как и все HDL, включает необходимые средства для поддержки моделирования одновременной работы аппаратных компонент. Аппаратные компоненты моделируются с помощью конструкции entit y. Entity содержит несколько операторов process для моделирования одновременных действий. Entity образуется из двух типов составляющих: декларации entity и одной или нескольких architecture (рис. 50).

Рис. 50. entity состоит из декларации entity и одной или нескольких architecture

В качестве примера рассмотрим полный сумматор (full adder) на рис. 51.

Рис. 51. Полный сумматор и его интерфейсные сигналы

Его декларации entity соответствует следующий текст:

Два дефиса (--) обозначают начало комментария и действуют до конца строки. Architecture состоит из заголовка и тела. Различают два стиля написания архитектурных тел: структурное и поведенческое.

Поведенческое тело включает только информацию достаточную для вычисления значений выходных сигналов по значениям входных и состоянию внутренних сигналов. Поведенческое тело full_adder выглядит следующим образом (< = обозначает оператор присвоения значения сигналу):

Напротив структурное тело описывает композицию из более простых

Entit (рис. 52). В примере компоненты названы от i1 до i3 и принадлежат к типам half _adder или or_gate.

Рис. 52. Схема структурного тела full_adder

В текстовом виде эта структура представляется следующим образом:

Конструкции port map описывают связи между локальными компонентами, портами c omponent ипортами entity с помощью символов =>.

1.10.2.3. Операторы присваиваниеи process [19]

Цифровые устройства функционируют непрерывно и параллельно. Множество компонентов схемы работают одновременно, формируя значения определенных сигналов. В результате в моделируемом устройстве параллельно, в физическом времени, происходит множество изменений состояния сигналов. Соответственно, и в модели устройства изменения значений сигналов должны производиться параллельно, в модельном времени. Это определяет построение VHDL как языка параллельного по своей природе.

Тело архитектурного описания специфицируемого объекта, заключенное между begin и end, содержит совокупность параллельных операторов. Это определяет построение VHDL как языка параллельного по своей природе. Последовательность записи параллельных операторов в теле архитектурного описания значения не имеет. Порядок выполнения определяется не порядком их текстуальной записи, а другими правилами. Основным принципом здесь является управление от потока изменений сигналов, входных для параллельного оператора. Событие изменения сигнала, являющегося входным для параллельного оператора, запускает срабатывание данного оператора.

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

В VHDL существует два вида операторов присвоения значения: переменной и сигналу. Синтаксис оператора присвоения значения переменной:

Идентификатор переменной:= выражение;

Этот оператор присвоения выполняется как в обычных языках программирования.

Понятие сигнала не имеет аналогов в традиционных языках программирования высокого уровня типа C, PASCAL и др. Цифровые устройства работают во времени, преобразуя и передавая сигналы. Поэтому понятие сигнала является базовым в VHDL. Сигналы являются абстракцией, представлением в модели на VHDL состояния проводников в структуре цифрового устройства.

Физическое время моделируемого устройства непрерывно. Это время, в котором протекают реальные физические процессы, изменяются электрические сигналы в цифровых устройствах, наблюдаемые на логическом уровне как изменение логических состояний.

Модельное время – это время в модели устройства. Модельное время является обобщенным представлением физического времени, в котором работает моделируемое устройство. Модельное время дискретно.

Время моделирования – это время выполнения программы на VHDL. В семантике программы на VHDL оно напрямую не наблюдается, однако, проявляется через упорядочение операторов программы по времени выполнения. Не имея для программиста на VHDL числовых значений, время работы системы моделирования позволяет определить отношение порядка над событиями – выполнением операторов программы на VHDL. Для каждой пары исполняемых операторов программы определены отношения «выполнен раньше»/«выполнен позже».

Изменение сигнала на входе некоторого элемента может привести к изменению сигналы на его выходе, но не мгновенно, а через интервал времени td, определяемый задержкой элемента. Таким образом, подавая сигнал на вход элемента в момент времени t1, мы как бы “запланировали” изменение сигнала на его выходе на время t2=t1+td.

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

Переменная характеризуется только значением, тогда как сигнал парой значений – значение момента модельного времени/значение уровня сигнала, которое сигнал имеет в этот момент времени. Последовательность значений сигнала в привязке к моментам модельного времени в течение некоторого промежутка времени формирует временную диаграмму сигнала. В модели устройства на VHDL воздействие, изменяющее состояние сигнала, принимает форму присвоения значения сигналу.

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

Идентификатор сигнала < = выражение;

Идентификатор сигнала < = transport выражение after величиназадержки;

Идентификатор сигнала < = выражение after величиназадержки;

Идентификатор сигнала < = reject время inertial выражение after величиназадержки;

Оператор присваивания значения сигналу <= включает в себя как определение нового значения сигнала (выражение), так и определение момента времени, в который сигнал примет это новое значение (after величиназадержки). Префиксы transport и inertial используются для представления моделей транспортной и инерциальной задержек.

Для оператора присвоения значения сигналу без пункта after (первая форма оператора) изменение сигнала будет иметь место после бесконечно малой величины времени, называемой δ-задежкой, но не мгновенно. Из всех операторов присваивания только этот оператор является синтезируемым.

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

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

signal имя1,имя2, …, имяN: идентификатор_типа[ := начальное значение];

Например: signal flag: bit:=’1’;

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

[метка_процесса:] process [ ( список_сигналов ) ] [ is ]

[декларативная_часть_процесса;]

begin

последовательные_операторы;

end process [метка_процесса];

«Список_сигналов» в круглых скобках называется списком чувствительности. Если в описании процесса задан список чувствительности, то процесс активизируется при изменении значения любого из этих сигналов. Если список чувствительности отсутствует, то процесс активизируется при изменении любого сигнала в модели, если не указано иное с помощью операторов ожидания внутри самого процесса. Для синтеза список чувствительности не имеет значения. Когда по программе на VHDL выполняется синтез, для процесса синтезируется фрагмент схемы, использующий все сигналы, указанные в теле процесса, т.е. синтезирующий компилятор игнорирует список чувствительности.

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

В секции «декларативная_часть_процесса» могут включаться описания локальных констант, типов и переменных, используемых в процессе. Сигналы не могут быть описаны как локальные данные процесса.

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

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

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

wait [ on имя_сигнала {, …}]

[ until булево_выражение]

[ for выражение_времени];

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

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

Рассмотрим модель синхронного (по фронту) D-триггера.

Пусть:

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

1.10.2.4. Цикл моделирования VHDL

В соответствии со стандартом [20] выполнение модели в VHDL описывается следующим образом.

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

В фазе инициализации, оговоренные начальные значения присваиваются сигналам, текущему модельному времени Tc присваивается значение 0 и однократно выполняется каждый оператор process.

Каждый цикл моделирования начинается с установки текущего времени в следующий момент времени, на который назначены изменения значений сигналов. Это время Tn было вычислено во время инициализации или последнего выполнения цикла моделирования. Моделирование прекращается, когда текущее время достигнет установленного максимума.

Каждый цикл моделирования содержит следующие шаги:

а) Tc присваивается Tn.

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

В цикле, предшествовавшем текущему циклу, были вычислены новые будущие значения. Если Tc соответствует времени, в которое эти значения становятся действительными, то они и присваиваются сигналам. Новые значения никогда сразу не присваиваются в выполняемом цикле моделирования. Сигналы, которые изменяют свое значение, генерируют события, которые в свою очередь могут запустить выполнение операторов process, чувствительных к этим сигналам.

в) Для каждого process P, если P чувствителен к сигналу S и если событие имеет место для сигнала S в этом цикле моделирования, тогда P выполняется.

г) Каждый process, который получил разрешение на выполнение в текущем цикле выполняется до момента простановки.

д) Время следующего цикла Tn определяется установкой его в наиболее раннее из значений:

1)TIME’HIGH – время окончания моделирования.

2) Время, когда драйвер сигнала становится активным (задержка формирования значения сигнала).

3) Время, в которое разрешается выполняться оператору process (это время определяется операторами wait for.

Если Tn = Tc, то следующий цикл моделирования будет δ-циклом.

На рис.53 иллюстрирует итеративную природу цикла моделирования.

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

Рис.53. Цикл моделирования VHDL

Транзакция. В реализации сигналов, изменяемых в модельном времени, основным становится планирование в этом времени изменений сигналов. При выполнении операторов присваивания значения сигналу, системой моделирования формируется специальная структура данных, пара: значение сигнала/момент модельного времени, когда сигнал примет это значение. Такая пара в VHDL называется транзакцией. Транзакция – это внутренняя инструкция системы моделирования по изменению указанного сигнала в заданный момент модельного времени.

В реализации языка VHDL запланированная источником временная диаграмма сигнала представляется упорядоченным списком транзакций, формирующих моменты изменения сигнала на временной диаграмме. Часто в описании VHDL именно этот список, связанный с одним источником сигнала называют драйвером.

1.10.2.5. Многозначная логика и стандарт IEEE 1164

Во многих случаях может быть целесообразным или необходимым использовать для моделирования цифровых устройств логику с числом значений больше двух. Например, в системе могут бать электрические сигналы различной «силы», и может потребоваться вычислить «силу» и логический уровень в результате соединения двух или более таких источников сигналов. Использование дискретного множества «сил» позволяет избежать необходимости решать уравнения Кирхгофа и получить результат с требуемой точностью.

Сигнал с одной силой (две логических величины). Это простейший случай с двумя логическими значениями ‘0’ и ‘1’ и одной силой для каждого значения означает, что если соединить сигналы один со значением ‘0’, а другой со значением ‘1’, то ничего не будет известно об уровне результирующего сигнала. Сигнал одой силы достаточен для систем, в которых нет таких соединений.

Сигнал с двумя силами (три или четыре логических величины). Во многих схемах некоторый проводник может быть не соединен с землей, источником питания или с другим узлом схемы. Например, могут содержать схемы с открытым коллектором (истоком), или для выхода с тремя состояниями (‘0’, ‘1’ и ’Z’) при одном из вариантов управления оба транзистора закрыты (не проводят, т.е. Z состояние). В результате выход будет отключен от полюсов источника. Очевидно, что сила сигнала у отключенных таким образом выходов меньше в состоянии ’Z’ по сравнению с ‘0’ и ‘1’. Если сигнал со значением ’Z’ соединен с другим сигналом, то этот другой сигнал будет доминировать. Функцию, выполняющую вычисление результирующей величины при таких соединениях, называют функцией разрешения.

Во многих случаях трехзначное множество значений {’0’,’1’,’Z’} дополняется значением ’X’, представляющем неизвестную величину такой же силы как ‘0’ и ‘1’. Функция разрешения для этого случая получается весьма простой и может быть наглядно представлена с помощью схемы частичного порядка, как на рис. 54. Определим операцию sup над двумя сигналами, которая возвращает верхнее значение двух сигналов. Верхнее значение c двух сигналов a и b является наислабейшей величиной, для которой сохраняется c ≥ a и c ≥ b. Например, sup (’Z’, ’0’)=’0’, sup (’Z’,’1’)=’1’.

Рис. 54. Граф частичного порядка для значений из множества {’0’,’1’,’Z’, ’X’}

Сигнал с тремя силами (семь логических величины). Во многих случаях двух сил сигналов недостаточно, например, когда верхний МОП транзистор комплиментарного каскада является транзистором с обеднением. Эффект от этого транзистора подобен резистору низкой проводимости на пути к источнику питания (протекает маленький ток). Этот транзистор вместе с нижним транзистором управляют величиной выходного сигнала схемы, которая может быть вычислена с помощью функции разрешения. Нижний транзистор обеспечивает выход значениями ’0’ или’Z’. Транзистор с обеднением обеспечивает значение сигнала слабее, чем для ’0’ и ’1’, а его уровень соответствует ’1’. Это значение транзистора с обеднением обозначают, как ’H’ – слабая логическая ’1’. Подобным образом определяется слабый логический ’0’ - ’L’, результат взаимодействия слабых сигналов – слабая логическая неопределенность, обозначаемая как ’W’. В результате получаем три силы и семь значений величины сигнала {’0’, ’1’, ’L’, ’H’, ’W’, ’X’, ’Z’}. Граф частичного порядка представлен на рис. 55.

Рис. 55. Граф частичного порядка для значений из множества

{’0’, ’1’, ’L’, ’H’, ’W’, ’X’, ’Z’}.

В VHDL предопределена только двузначная логика (тип dit). Поэтому был разработан стандарт IEEE 1164, содержащий девять значений {’0’, ’1’, ’L’, ’H’, ’X’, ’W’, ’Z’, ’U’, ’-’}, где ’U’ обозначает неинициализированное значение, используемое при моделировании сигналов без точной инициализации. Символ ’-’ обозначает «беззаботный вход» или вход не имеет значения для описания булевых функций. В качестве примера рассмотрим условный параллельный оператор присвоения сигнала select подобный операторам switch и case языков программирования.

Пусть необходимо представить булеву функцию f (a,b,c) = ab+bc, неопределенную для случая a=b=c=’0’. Наиболее удобный способ представлен ниже:

Это должно легко моделироваться. К сожалению, получим не то, что хотели. Всякий раз, когда средства разработки VHDL оценивают подобный оператор, они проверяют выражение в пункте select (в примере a & b & c) на значения из пунктов when, в частности "10-". Т.к. значение ’-’ никогда не присваиваются сигналам эта проверка никогда не даст истины. Приведенное нереализуемое удобство плата за гибкость введения девятизначного множества значений, но все-таки стало можно моделировать схемы с обедненными МОП транзисторами.

1.11. Проектирование устройств ввода-вывода и контроллеров

интерфейсов ввода-вывода по модели программно-управляемого автомата.

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

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

Для тех, кто имеет дело с разработкой программного обеспечения, написание проектов на поведенческом уровне VHDL не будет казаться как что-нибудь новое. Разница состоит в базовой исполнительной платформе: в случае программного обеспечения все исполняет CPU; в случае VHDL исполнителем является симулятор или синтезированная аппаратура.

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

На алгоритмическом уровне абстракции схема описывается в терминах последовательных операторов без привязки к тактовой частоте и деталей задержек преобразований. Временной аспект выводится из порядка операций в алгоритме. Некоторые инструменты синтеза допускают на входе такое представление, однако, требуют наличие конструкции типа «тактовая частота алгоритма» для синхронизации операций.

Основными компонентами цифровых систем являются регистры. На уровне абстракции потока данных описывается перемещение данных между регистрами схемы. Поэтому этот уровень часто называют уровнем регистровых передач (RTL - register transfer level). Это промежуточный уровень позволяет упростить рутинную работу с комбинационной логикой (отдать ее средствам синтеза) и сконцентрироваться на более полной спецификации регистров, как наиболее важной части схемы. В RTL описании присутствует точное задание тактовой частоты. Операции планируется выполнять в специфическом тактовом периоде, но не детализируются задержки внутри периода. Глобальная тактовая частота не является обязательным элементом, но может быть предпочтительной. Дополнительной особенностью может быть коррекция синхронизации, позволяющая перепланировать операции.

Для проектирования сложных цифровых устройств часто применяют модель программно-управляемого автомата (ПУА) [16]. ПУА состоит из устройства управления (УУ) и операционного устройства (ОУ), как показано на рис. 56.

Рис.56. Программно-управляемый автомат

Первое свойство этой модели гласит, что операционное устройство задается на уровне RTL, а устройство управления задается на алгоритмическом уровне (в частности конечным автоматом). Второе свойство утверждает, что ПУА является рекурсивной моделью. Это означает, что УУ может представлено в виде ПУА1 (ОУ1, УУ1), УУ1 в виде ПУА2 (ОУ2, УУ2) и так далее.

На ОУ определено множество микроопераций (МО), выполняющих преобразование входных сигналов X из окружающей среды в выходные сигналы Y для окружающей среды. Выполнение той или иной МО инициируется выходными сигналами c УУ, зависящими от состояния УУ, его входов R и s. Сигналы s характеризуют результаты выполнения операций в ОУ, а R – управляющие воздействия окружающей среды.

Рассмотрим пример описания для синтеза синхронного автомата Мили, реализующего детектор входной последовательности 1011 [21]. На рис. 57 представлена его диаграмма состояний, а ниже текст на VHDL.

Рис. 57. Диаграмма состояний детектора последовательности 1011,

реализующая автомат Мура

 
 


Разработка описание на VHDL ОУ базируется на задании временной диаграммы устройства. Пусть необходимо разработать синхронное устройство, на выходе Y которого формируется последовательность из трех импульсов в ответ на входной импульсX, как показано на рис.58 (выходные импульсы сопоставлены с тактами работы устройства).

1. Рис.9.2
Рис. 58. Пример задания на разработку ОУ

Возможны различные варианты реализации архитектуры. Рассмотрим первый вариант, основанный на организации механизма нумерации тактов. Для этого потребуется двоичный счетчик. В синхронных устройсвах изменение состояния элемента памяти может происходить либо только по фронту синхросигнала, либо только по его срезу. Потому изменения таких сигналов может происходить через минимальное время равное длительности периода тактового интервала. Для формирования полутактовых интервалов необходимо увеличить вдвое частоту тактового сигнала. На рис.59 приведена временная диаграмма работа устройства (ниже текст на VHDL). Сигнал cnt представляет четырехразрядный двоичный счетчик, изменяющий свое состояние по фронту синхросигнала clk. Длительность clk составляет половину длительности исходного такта.

Рис.59. Временная диаграмма первого варианта описания

library ieee; use ieee.std_logic_1164.all; use ieee. std_logic_unsigned.all;   entity example is port(clk: in std_logic; X: in std_logic; Y: out std_logic ); end; architecture RTL1 of example is signal cnt: std_logic_vector(3 downto 0); begin operation1: process (clk) --операция нумерации тактов от 0 до 13 begin if X=’0’ then -- условие асинхронной инициализации cnt<=”0000”; elsif rising_edge(clk) then -- условие синхронной работы   if cnt /=13 then cnt<= cnt +1; end if; end if; end process; operation2: process (clk) --формирование Y begin if X=’0’ then Y <=’0’; elsif rising_edge(clk) then    

if (cnt=0) or (cnt=1) or (cnt=6) or (cnt=8) or (cnt=9) or (cnt=10) or (cnt=11) then Y <= ’1’; else Y <= ’0’; end if; end if; end process; end RTL1;  


Второй вариант реализации архитектуры основан на сдвиговом регистре s_registr, выполняющем роль одноразрядной памяти магазинного типа. Эта память по сигналу Х запоминает по тактам временную диаграмму для сигнала Y, подключенного к старшему разряду s_registrt(11) (это реализует параллельный оператор присвоения Y <= s_registrt(11);), далее выполняется сдвиг s_registrt в сторону старших разрядов по фронту clk. На рис.60 приведена временная диаграмма работы этого варианта описания устройства, а ниже текст на VHDL.

Рис.60. Временная диаграмма второго варианта описания

Третий вариант реализации архитектуры, в котором частота clk в два раза меньше чем в предыдущих двух вариантах. Для формирования полутактовых интервалов, поэтому потребовалось ввести три однобитных вспомогательных сигнала op1, op2, op3, разрядность cnt уменьшилась с четырех до трех разрядов. На рис.61 приведена временная диаграмма работы этого варианта описания устройства, а ниже текст на VHDL

Рис.61. Временная диаграмма третьего варианта описания

 
 


Сравним эти три варианта описания с точки зрения аппаратных затрат и требований к быстродействию при реализации на FPGA. Последний вариант может быть реализован на более медленных FPGA, т.к. требуется частота в два раза ниже остальных. Для первого варианта потребуется 5 триггеров, для второго 13, а для третьего 6. Описание второго варианта самое компактное, а у третьего самое громоздкое. Наличие вариантов реализации даже для простого устройства лишний раз подтверждает, что проектирование продолжает оставаться искусством.

1.12. Интегрированная среда разработки аппаратных средств

Active-HDLTM

Автоматизированное проектирование — это магистральное направление развития технологий создания электронной аппаратуры [22]. До недавнего времени образцом решения таких задач считались разработки на базе серийно выпускаемых стандартных интегральных микросхем, и большинство САПР ориентировались на реализацию именно этой технологии проектирования. Идеальным вариантом казались «сквозные» САПР, которые позволяли выполнить всю цепочку проектирования: от входного описания до создания эскиза печатной платы. Примерами сквозных САПР являются PCAD, DesignLab и OrCAD.

В последние годы набирают силу новые технологии проектирования электронной аппаратуры, основанные на современных персональных компьютерах, интегрированных САПР и программируемой логике. Яркий представитель таких САПР нового поколения — это интегрированная среда проектирования Active-HDL. Ее отличает особая легкость и «элегантность» в работе. Фирма ALDEC, создатель этого программного продукта, год от года совершенствует свое детище и наделяет его новыми возможностями.

Продукт Active-HDL является самым популярным среди разработчиков цифровой аппаратуры интегрированной средой разработки для проектирования цифровых схем, созданных с помощью языков описания оборудования VHDL, Verilog/SystemVerilog, EDIF и SystemC. Она содержит инструменты для входа в систему, компиляторы VHDL и Verilog, отдельное ядро моделирования, несколько стандартных и продвинутых инструментов отладки, программы просмотра результатов моделирования в графической и текстовой форме. Также содержит вспомогательные утилиты для упрощения управления ресурсными файлами, проектами и библиотеками проектов; также встроенные интерфейсы для запуска моделирования, синтеза, управления версиями исходных файлов, взаимодействия со средствами поддержки моделей сторонних производителей. На рис. 62 показаны инструменты и компоненты Active-HDL.

Рис. 62. Инструменты и компоненты Active-HDL

Console (Консоль). Окно консоли является интерактивным механизмом для ввода макрокоманд Active-HDL и пользовательских скриптов, вывода сообщений, генерируемых инструментами Active-HDL.

Workspace/Design Explorer (Анализатор рабочей области/проекта) позволяет администрировать проекты Active-HDL, так что нет необходимости беспокоится о месте нахождения файлов на компьютере.

Design Browser (Программа просмотра проекта). Окно просмотра показывает содержимое текущего проекта:

- ресурсные файлы, прикрепленные к проекту,

- рабочие библиотеки по умолчанию,

- структуру узла, выбранного для моделирования,

- VHDL, Verilog, и EDIF объекты, объявленные внутри выбранной области текущего проекта.

Design Flow Manager (Менеджер процесса проектирования) помогает автоматизировать обработку Active-HDL проектов. Он показывает типовую последовательность проектирования в форме диаграммы. Встроенные в диаграмму программные кнопки вызывают приложения, участвующие в преобразованиях.

Language Assistant (Языковый помощник) является вспомогательным инструментом для представления шаблонов логических примитивов и функциональных блоков. Он интегрирован с редактором HDL, так что можно автоматически вводить требуемые шаблоны в редактируемый исходный файл. Языковый помощник также позволяет определять собственные шаблоны пользователя.

HDL Editor (Редактор HDL) – это тестовый редактор. Он индицирует специфические синтаксические категории различными цветами. Редактор неразрывно интегрирован с симумятором для получения возможности отлаживать исходный код.

State Diagram Editor (Редактор диаграммы состояний) – это графическое средство разработано для редактирования графов переходов автоматов. Редактор автоматически транслирует графически спроектированный граф в VHDL или Verilog код.

Waveform Viewer/Editor (Программа просмотра/редактирования временной диаграммы) показывает результаты моделирования в виде временной диаграммы. Она дает возможность графической редакции временной диаграммы как требуемых тестовых векторов.

Block Diagram Editor (Редактор блок-диаграмм) является графическим инструментом для создания блок-диаграмм. Он автоматически транслирует графически представленную схему в VHDL или Verilog код.

Окно List (Список ) показывает результаты моделирования в табличном текстовом формате. Это позволяет выполнять трассировку результатов с точность до дельта-цикла.

Окно Watch (Наблюдение) показывает текущие значения выбранных объектов VHDL или Verilog во время моделирования.

Окно Processes (Процессы) показывает текущий статус параллельных процессов в окончательном проекте во время моделирования.

Окно Call Stack (Стека вызовов) является инструментом отладки, показывающим список подпрограмм (процедур и функций), выполняемых в текущем процессе.

Library Manager (Администратор библиотеки) разработан для управления библиотеками и их содержанием.

Окно Dataflow (Поток данных)является инструментом для отображения в графической форме последовательности входных и выходных сигналов процессов во время моделирования.

Окно Memory View (Просмотр памяти) является инструментом для отображения содержимого памяти (двумерных объектов), объявленной в проекте.

Server Farm (Серверное хозяйство) является продвинутым, независимым инструментом работающим в локальной сети, который позволяет пользователю планировать задачи, а затем их автоматически исполнять на выбранных компьютерах доступных в сети.

Code Coverage (Покрытие кода VHDL) позволяет с помощью испытательных программ (test bench) определять выполнение исходного кода.

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

Source Revision Control (Управление версиями) – это интерфейс взаимодействия с профессиональной системой управления версиями проекта.

Вопросы для самоконтроля

1. Когда целесообразно использовать реконфигурируемую логику?

2. Как в реконфигурируемой логике реализуется многообразие логических функций?

3. Почему для моделирования и синтеза используются разные подмножества языка VHDL?

4. Почему одна entity может содержать несколько архитектурных тел?

5. Почему оператор присваивания значения сигналу в одном случае является последовательным, а в другом параллельным?

6. В чем суть различия переменной и сигнала?

7. Какие конструкции являются базовыми для задания поведения архитектуры с учетом параллельности выполняемых действий?

8. Какова роль списка чувствительности в операторе process?

9. В каком варианте используется оператор wait для синтеза?

10. В чем суть событийного моделирования?

11. Что моделирует сила сигнала?

12. Что означает второе свойство модели программно-управляемого автомата об ее рекурсивности.





Дата публикования: 2014-11-03; Прочитано: 842 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.046 с)...