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

.Проектирование устройств и систем с высокоскоростными соединениями

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

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

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

7.1.1. Entity и architecture

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

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

В качестве примера рассмотрим полный сумматор full adder на рис. 7.2. Его декларации entity соответствует следующий текст:

entity full_adder is

-- декларации entity

port (

-- входные порты

a, b, carry_in: in Bit;

sum, carry_out: out Bit

-- выходные порты

);

 

end full adder;

 

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

181

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

Поведенческое тело включает только информацию, достаточную для вычисления значений выходных сигналов по значениям входных и состоянию внутренних сигналов. Поведенческое тело 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 (рис. 7.3). В примере компоненты названы от i1 до i3 и принадлежат к типам half _adder или or_gate.

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

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

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);

182

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 с помощью символов =>.

7.1.2. Оператор присваивание и оператор process

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

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

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

183

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

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

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

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

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

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

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

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

Изменение сигнала на входе некоторого элемента может привести к изменению сигналы на его выходе, но не мгновенно,

184

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

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

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

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

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

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

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

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

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

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

185

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

Источник сигнала (драйвер). Выход элемента схемы фор-

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

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

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

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

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

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

begin

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

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

186

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

Врезультате преобразования сигналов, заданных процессом,

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

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

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

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

187

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

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

wait [on имя_сигнала {, …}] [until булево_выражение]

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

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

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

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

Пусть:

signal c,d,q: bit;

-- с-вход синхронизации

 

--d-вход данных

 

--q-выход

тогда process(с) begin

wait until rising_edge( с); q<=d;

end process;

188

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

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

Всоответствии со стандартом [12] выполнение модели

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

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

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

тор process.

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

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

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

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

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

189

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

3.Для каждого process P, если P чувствителен к сигналу S

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

4.Каждый process, который получил разрешение на выпол-

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

5.Время следующего цикла Tn определяется установкой его

внаиболее раннее из значений:

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

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

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

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

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

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

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

Транзакция. В реализации сигналов, изменяемых в модельном времени, основным становится планирование в этом времени изменений сигналов. При выполнении операторов присваива-

190