Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1531

.pdf
Скачиваний:
2
Добавлен:
15.11.2022
Размер:
52.65 Mб
Скачать

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

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

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

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

Рис. 48. Virtex-5 CLB

91

Секция состоит из четырех элементов памяти (рис. 49). Каждый элемент памяти может быть использован как таблица соответствия (LUT – look-up table) для реализации одной 6-входовой логической функций (таких функций 264) или двух 5-входовых логических функций (таких функций 232), а также сконфигурирован как RAM или сдвиговые регистры (SRL). С помощью мультиплексоров несколько элементов памяти могут быть объединены. Каждая секция содержит еще 4 выходных регистра и специальную логику для реализации быстрых операций арифметического сложения.

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

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

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

Существует два популярных представителя группы языков HDL (hardware description language), предназначенных для описания цифро-

вых аппаратных средств. Это Verilog и VHDL: первый более краткий, и более приятный.

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

92

тиль. Однако разработчики использовали и текстовые 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 ее поведение при моделировании будет соответствовать поведению

93

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

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

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

1.10.2.2. Entity и architecture

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

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

94

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

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

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

entity full_adder is -- декларации entity port (

a, b, carry_in: in Bit; -- входные порты sum, carry_out: out Bit -- выходные порты ) ;

end full adder;

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

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

architecture behavior of ful_adder is -- architecture begin

sum <= (a xor b) xor carry_in after 10 ns;

carry_out <= (a and b) or (a and carry_in) or (b and carry_in) after 10 ns; end behavior;

Напротив, структурное тело описывает композицию из более простых entity (рис. 52) . В примере компоненты названы от i1 до i3 и при-

надлежат к типам half _adder или or_gate.

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

95

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

зом:

architecture structure of full adder is -- заголовок component half_adder

port (in1, in2: in Bit; carry: out Bit; sum: out Bit); end component;

component or_gate

port (in1, in2: in Bit; o: out Bit); end component;

signal x, y, z: Bit; -- локальные сигналы begin -- секция карты портов

i1: half_adder -- введение компонента i1 типа half_adder

port map (in1=> a, in2=> b, carry => x, sum => y); -- связи между портами i2: half_adder port map (in1=> y, in2=> carry_in, carry=>z, sum => sum); i3: or_gate port map (in1=> x, in2=> z, o => carry_out);

end structure;

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

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

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

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

96

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

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

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

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

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

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

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

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

97

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

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

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

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

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

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

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

величина задержки;

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

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

98

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

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

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

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

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

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

begin

последовательные_операторы; end process [метка_процесса];

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

99

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

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

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

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

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

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

100

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]