на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Основы языка VHDL
одним интерфейсом типа entity может быть связано несколько архитектур. Рассмотрение архитектурных стилей начнем с поведенческого (behavioral style).

Поведенческое описание

Функционирование устройства рассматривается как процесс последовательного вычисления выражений, входящих в process. Толчком к запуску процесса является изменение (event -событие) какого либо сигнала, из входящих в список “воспринимаемых” сигналов (sensitivity list). Этот список внешне очень похож на список параметров в других языках высокого уровня. Рассмотрим поведенческую модель декодера dec2х4 (рис.1.3). Декларация интерфейса его уже приводилась, а теперь она будет пополнена архитектурой поведенческого типа.

entity dec2x4 is

port(a, b, enable: in BIT; z: out BIT_VECTOR (0 to 3));

end dec2x4;

architecture dec_seq of dec2x4 is

begin

process (a, b, enable)

variable abar, bbar: BIT;

begin

abar:= not a; --выражение 1

bbar:= not b; -- выражение 2

If enable = `1' then -- выражение 3

z(3) <= not (a and b); -- выражение 4

z(2) <= not (a and bbar); -- выражение 5

z(1) <= not (abar and b); -- выражение 6

z(0) <= not (abar and bbar); -- выражение 7

else z <= “1111”;

end if;

end process;

end dec_seq;

Архитектура имеет свое имя dec_seq. О принадлежности архитектуры к описанию интерфейса dec2х4 говорит выражение: dec_seq of dec2x4. Список сигналов, которыми запускается процесс, дан в скобках: process (a, b, enable). До начала процесса, если необходимо, декларируются переменные variable abar, bbar: BIT. Зона действия их ограничена данным процессом (от begin до end process). Предположим, что в момент T произошло изменение сигнала а. Новое значение переменной abar (выражение 1) вычисляется и присваивается без задержки - мгновенно (в качестве знака присваивания в данном случае используется =). Без задержки будут вычислены выражения 2 и 3.

Далее в ходе процесса одно за другим вычисляются выражения от 4 до 7, а новые значения сигналам z(0), z(1), z(2), z(3) будут присвоены (в качестве символа оператора присвоения используется <= ) лишь через некоторую, пусть даже фиктивную (бесконечно малую), задержку . Это существенное отличие процедур присвоения для переменных и для сигналов.

Рассмотрим пример мультиплексора 4х1 (рис.1.4). Четыре входных сигнала A, B, C и D выводятся через один порт Z. Коммутация осуществляется сигналом CTRL.

Рис. 1.4. Мультиплексор 4х1.

entity MUX is

port (A, B, C, D: in BIT; CTRL: in BIT_VECTOR(0 to 1);

Z: out BIT);

end MUX;

architecture MUX_BEHAVIOR of MUX is

begin

PMUX: process (A, B, C, D, CTRL)

variable TEMP: BIT;

begin

case CTRL is

when "00" => TEMP := A:

when "01" => TEMP := B;

when "10" => TEMP := C;

when "11" => TEMP := D;

end case;

Z <= TEMP;

end process PMUX;

end MUX_BEHAVIOR;

Архитектура получила название MUX_BEHAVIOR, процесс имеет ярлык PMUX. Переменной TEMP в зависимости от значения сигнала CTRL присваивается значение одного из входных портов: A, когда CTRL имеет значение “00”; B, когда CTRL имеет значение “01”; A, когда CTRL имеет значение “10”; D, когда CTRL имеет значение “11”.

Для описания синхросигналов обычно используется атрибу EVENT. Он истинен когда происходит “событие” - изменение сигнала. Например, поведение D-триггера, показанного на рис.1.5, можно описать так:

Рис.1.5. D-триггер

entity dff is

port (data, clk: in BIT

q, notq: out BIT);

end dff;

architecture behav of dff is

begin

process (clk)

begin

if (clk'event and clk = `1') then

q <= data;

notq <= not data;

end if;

end process;

end behav;

Выражение (clk'event and clk = `1') задает условие: если сигнал clk меняется с `0' на `1'

Потоковое описание (dataflow)

Dataflow - означает поток данных. Описание в стиле dataflow использует в архитектуре параллельно вычисляемые выражения. Количество параллельно вычисляемых выражений может быть любым. Так как вычисления происходят параллельно, то порядок записи выражений не имеет значения. Толчком к началу вычислений является изменение любого из сигналов, входящих в выражения. Рассмотрим модель одноразрядного сумматора, показанного на рис.1.6.

Рис.1.6. Одноразрядный сумматор

entity full_adder is

port (a, b, cin: in BIT; sum, cout: out BIT);

end full_adder;

architecture full_ad_conc of full_adder is

begin

sum <= (a xor b) xor cin after 15 ns;

cout <= (a and b)or(b and cin)or(cin and a) after 10ns;

end full_ad_conc;

Для описания потока данных здесь используются два выражения. Всегда, когда происходят изменения сигналов a, b или cin, оба выражения вычисляются и сигналам sum и cout присваиваются новые значения через 15ns и 10ns, соответственно. Знак <= оператор присваивания. Выражение after 15ns означает задержку, вносимую логикой, реализующей вычисление выражения для sum. Если задержка не введена явно, то предполагается наличие бесконечно малой задержки . Такой прием позволяет упорядочить события модели dataflow. Рассмотрим схему рис. 1.7 и ее модель.

Рис. 1.7. Цепочка инверторов

entity fast_inverter is

port (a: in BIT; z: out BIT);

end fast_inverter;

architecture delta_delay of fast_inverter is

signal b,c: BIT;

begin

z <= not c; -- выражение 1

c <= not b; --выражение 2

b <= not a; --выражение 3

end delta_delay;

В выражениях 1, 2 и 3, присваивающих значения переменным z, c, b, подразумевается задержка . Например, в момент T происходит изменение сигнала a. Запускается процесс вычисления выражения 3 и через задержку переменной b будет присвоено новое значение (в момент T+). В свою очередь изменение сигнала b запустит процесс вычисления выражения 2 и значение сигнала с будет обновлено в момент T+2. Изменение сигнала с приведет к запуску процесса вычисления выражения 1 и значение сигнала z будет изменено в момент T+3. Временные соотношения в схеме иллюстрирует рис. 1.8.

Рис. 1.8. Временные соотношения в цепочке инверторов.

Структурное описание.

Структурное описание интерпретирует устройство как набор компонентов, связанных между собой сигналами. Грубо говоря - это таблица соединений (netlist). Рассмотрим простую схему управления (рис.1.8) и ее структурную модель.

Рис. 1.9. Устройство местного управления

entity ctr_lck is

port (data, mr, clk, din: in BIT; rdy, ctrla:out Bit);

end ctr_lck;

architecture str_view of ctr_lck is

component AND2 -- декларируется компонент AND2

port (x,y in BIT; z: out BIT);

end component;

component DFF -- декларируется компонент DFF

port (d, clock: in BIT; Q,NOTQ: out BIT);

end component;

component NOR2 -- декларируется компонент NOR2

port (a,b: in BIT; z: out BIT);

end component;

signal s1,s2: BIT;

begin

D1: DFF port map (data, clk, s1,s2); -- выражение 1

A1: AND2 port map (s2, din, ctrla); -- выражение 2

N1: NOR2 port map (s1, mr, rdy); -- выражение 3

end str_view;

Здесь декларируются три компонента: AND2, DFF и NOR2. В тело архитектуры экземпляры компонентов вводятся с помощью выражений 1, 2 и 3. Компоненты связаны между собой сигналами s1 и s2. В декларации называется имя компонента и его интерфейс, что очень схоже с декларацией интерфейса устройства. Выражение для экземпляра компонента должно в первую очередь дать имя экземпляру или ярлык. Например, D1 - это ярлык для экземпляра триггера DFF. Далее следует список связей (association list). Он устанавливает связь между портами компонента и портами и сигналами устройства. Существует два варианта связи: позиционный и поименный. В позиционном списке первый порт декларации (слева направо) компонента соответствует первому порту экземпляра компонента (слева направо), второй - второму и так далее. Именно такой вариант списка был использован в приведенном выше примере. Вместо этого можно было использовать поименный вариант списка связей, например, выражение 3 можно было бы записать так:

N1: NOR2 port map (a=>s1, b=> mr, z=>rdy);

Рассмотрим еще пример. На рис.1.2 была приведена схема полусумматора. Его структурная модель должна предстать как набор следующих компонентов: XOR на два входа (например, 7486 или отечественный аналог ЛП5) и AND на два входа (например, 7408 или отечественный аналог ЛИ1 ).

entity half_adder is

port(a, b: in BIT; sum, cur: out BIT);

end half_adder;

architecture h_a_str of half_adder is

component a_7486

port (a_2: in BIT;

a_3: in BIT;

a_1: out BIT);

end component;

component a_7408

port (a_2: in BIT;

a_3: in BIT;

a_1: out BIT);

end component;

begin

X1: a_7486 port map (a, b, sum);

A1: a_7408 port map (a, b, cur);

end h_a_str;

Названия компонентов и их портов приведены такими, какими они даны в библиотеке фирмы ALTERA - известного производителя программируемых логических схем.

Декларации компонентов, использованные в архитектуре h_a_str полусумматора half_adder, можно упаковать в отдельный файл, например, maxplus2.vhd:

package maxplus2 is

component a_7486

port (a_2: in BIT;

a_3: in BIT;

a_1: out BIT);

end component;

component a_7408

port (a_2: in BIT;

a_3: in BIT;

a_1: out BIT);

end maxplus2;

Файл maxplus2 при компиляции может быть помещен в библиотеку, например, с названием altera. Ссылка на библиотеку позволит не декларировать компоненты в архитектуре:

library altera;

use altera.maxplus2.all;

entity half_adder is

port(a, b: in BIT; sum, cur: out BIT);

end half_adder;

architecture h_a_str of half_adder is

begin

X1: a_7486 port map (a, b, sum);

A1: a_7408 port map (a, b, cur);

end h_a_str;

Комбинированное описание архитектуры

В едином теле архитектуры можно комбинировать все рассмотренные выше стили моделирования. В качестве примера рассмотрим одноразрядный полный сумматор (рис.1.5).

Сумматор представлен выражением 1, создающим экземпляр X1 компонента а_7486 (из библиотеки altera.maxplus2), и задающим отображение портов и сигнала сущности (сумматора) на порты компонента. Это структурный стиль.

Выражение 2 - это process, поведенческий стиль, и выражение 3 - это стиль dataflow.

Рис.1.10. Одноразрядный сумматор

library altera;

use altera.maxplus2.all;

entity full_adder is

port (a, b, cin: in BIT; sum, cout: out BIT);

end full_adder;

architecture fa_mix of full_adder is

signal s1:BIT;

begin

X1: a_7486 port map (a,b,s1); --выражение 1

process (a, b, cin) --выражение 2

variable t1, t2, t3: BIT;

begin

t1:= a and b;

t2:= b and cin;

t3:= a and cin;

cout <= t1 or t2 or t3;

end process;

sum <= s1 xor cin; --выражение 3

end fa_mix;

1.10 Особенности синтеза схем по описаниям на языке VHDL

Между процессами моделирования (имитации поведения схемы) синтеза схем с использованием языка VHDL есть существенные различия. Рассмотрим некоторые из них.

В отличие от системы моделирования система проектирования преобразует проектную информацию в заданный формат. Среди них выделяются широко распространенный формат EDIF, специализированные форматы различных фирм-изготовителей микросхем, а также языки Verilog, VHDL и другие. Формат EDIF является своеобразным стандартом де-факто, он имеется в большинстве современных систем проектирования и может использоваться для обмена информацией. Среди специализированных форматов можно выделить формат XNF фирмы Xilinx, который широко использовался в ранних версиях САПР этой фирмы. При преобразовании исходного модуля в промежуточный текст на языке VHDL обычно осуществляется преобразование в структурные конструкции этого языка, в которых используются схемотехнические особенности используемой элементной базы.

Система моделирования обычно использует все конструкции языка VHDL, в то время, как система проектирования использует не все его возможности. Обычно при синтезе не поддерживаются операции над типом Real (в этом случае при синтезе выдается ошибка), игнорируются ключевое слово After, не поддерживается также ряд других второстепенных конструкций языка. В системах проектирования атрибут event может использоваться только для указания фронтов синхросигналов в условных операторах, преимущественно в операторах if.

В современных системах проектирования для описания схем используется тип std_logic, который заменяет тип bit. Тип std_logic имеет следующие значения:

· 0 - логический ноль;

· 1 - логическая единица;

· U - значение не инициализировано;

· X - неизвестное значение;

· Z - высокое выходное сопротивление;

· W - неизвестное значение при слабом источнике сигнала;

· L - логический ноль при слабом источнике сигнала;

· H - логическая единица при слабом источнике сигнала;

· `-`- неопределенное значение.

ЛИТЕРАТУРА

1. Бибило П.Н. Синтез логических схем с использованием языка VHDL. М.: Солон-Р, 2002.

2. Суворова Е. А., Шейнин Ю. Е. Проектирование цифровых систем на VHDL. - СПб.: БХВ-Петербург. 2003.

Страницы: 1, 2, 3



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.