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);
endh_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);
endmaxplus2;
Файл maxplus2 при компиляции может быть помещен в библиотеку, например, с названием altera. Ссылка на библиотеку позволит не декларировать компоненты в архитектуре:
libraryaltera;
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);
endh_a_str;
В едином теле архитектуры можно комбинировать все рассмотренные выше стили моделирования. В качестве примера рассмотрим одноразрядный полный сумматор (рис.1.5).
Сумматор представлен выражением 1, создающим экземпляр X1 компонента а_7486 (из библиотеки altera.maxplus2), и задающим отображение портов и сигнала сущности (сумматора) на порты компонента. Это структурный стиль.
Выражение 2 - это process, поведенческий стиль, и выражение 3 – это стиль dataflow.
Рис.1.10. Одноразрядный сумматор
libraryaltera;
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
endfa_mix;
Между процессами моделирования (имитации поведения схемы) синтеза схем с использованием языка 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.