VHDL

 

Ключови думи

VHDL
модел
поведение
структура
симулация

 

2.1 Основни концепции на езика VHDL

Езика VHDL е предназначен за описание и симулация на цифрови устройства. Той покрива множество нива на абстракция - от отделния логически елемент до цялостна хардуерна система. VHDL предоставя средства за описание, както на поведението така и на структурата на моделираната система.

2.1.1 Поведенчески модели

Поведенческия модел представлява функционална интерпретация на дадена система. Апаратната част на едно цифрово устройство може да се разглежда като дискретна система. Поведението на такава система се описва като набор от операции, прилагани върху преминаващите през системата данни (фиг. 2.1).

Фиг. 2.1. Дискретна система

При създаването на поведенчески VHDL модели операциите се описват с процеси, а връзките между тях - със сигнали. Процесите представляват програми съставени от последователни VHDL оператори. По време на симулация всички процеси се изпълняват едновременно.

На следния пример е показан поведенчески модел на схема за генериране на бит за четност (фиг. 2.2). Изходният сигнал PARITY_ODD има стойност '0' когато броя на единиците е четен и '1' - когато е нечетен.

Фиг. 2.2. Схема за генериране на бит за четност

Входовете и изходите на модела са декларирани в интерфейсната част (entity). Операторите, описващи поведението на модела се намират в архитектурната част (architecture). Комбинацията от интерфейсна и архитектурнa част се нарича проектна единица.

 
library IEEE;
use IEEE.std_logic_1164.all;
entity PARITY is
port (WORD : in std_logic_vector(0 to 7);
PARITY_ODD : out std_logic);
end PARITY;
architecture BEHAVIOR of PARITY is
begin
process (WORD)
variable ODD: std_logic;
begin
ODD :='0';
for i in 0 to 7 loop
ODD := ODD xor WORD(i);
end loop;
PARITY_ODD <= ODD;
end process;
end BEHAVIOR;

Разноводност на поведенческото описание е т. нар. описание тип поток от данни. При него се използват паралелни оператори за описание на поведението:

 

architecture DATAFLOW of PARITY is
begin
PARITY_ODD <= WORD(0) xor WORD(1) xor WORD(2) xor WORD(3) xor
WORD(4) xor WORD(5) xor WORD(6) xor WORD(7);
end DATAFLOW;

2.1.2 Структурни модели

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

По-долу е показана архитектурната част на структурен модел на генератора за четност от фиг. 2.2. При описанието са използвани компонентите XOR3 и XOR2, чиито модели са предварително разработени.

 
architecture STRUCTURAL of PARITY is
component XOR3
port (I1, I2, I3 : in std_logic; O1 : out std_logic);
end component;
component XOR2
port (I1, I2 : in std_logic; O1 : out std_logic);
end component;
signal A, B, C : std_logic;
begin
U1: XOR3 port map (I1=>WORD(0), I2=>WORD(1), I3=>WORD(2), O1=>A);
U2: XOR3 port map (I1=>A, I2=>WORD(3), I3=>WORD(4), O1=>B);
U3: XOR3 port map (I1=>B, I2=>WORD(5), I3=>WORD(6), O1=>C);
U4: XOR2 port map (I1=>C, I2=>WORD(7), O1=>PARITY_ODD);
end STRUCTURAL;

2.1.3 VHDL симулация

Преди да се симулират VHDL моделите трябва да бъдат компилирани и записани в библиотека .

VHDL симулаторите работят на принципа на дискретно събитийно моделиране. Състоянието на модела може да бъде наблюдавано само на границите на дискретни интервали от време. Процесите в модела могат да променят изходите си само ако има промяна на някои от входните им сигнали. Промяната в стойността на сигнал се нарича събитие.

На фигура 2.3 е илюстриран цикличния процес на VHDL симулация.

Фиг. 2.3. Симулационен цикъл

Първа фаза. Изпълняват се процесите и се планират промените, които ще настъпят в изходните им сигнали.

Втора фаза. Извършват се планираните промени на сигналите и се определя кои процеси са засегнати от тях. Те ще бъдат изпълнени при следващия цикъл.

При VHDL симулацията винаги съществува закъснение между присвояването и промяната на стойността на даден сигнал.

 

За да се симулира и верифицира един VHDL модел е необходимо да бъде създадена тестова установка. Тя представлява проектна единица която включва в себе си тествания модел като компонент, подава към него входни въздействия, събира получените резултати и евентуално ги сравнява с зададени коректни стойности. Тестовата установка за разгледания генератор на четност е следната:

 
library IEEE;
use IEEE.std_logic_1164.all;
entity PARITY_TEST is
end PARITY_TEST;
architecture TESTBENCH of PARITY_TEST is
component PARITY
port (WORD : in std_logic_vector(0 to 7);
PARITY_ODD : out std_logic);
end component;
signal WORD : std_logic_vector(0 to 7);
signal PARITY_ODD : std_logic;
for all: PARITY use entity work.PARITY(BEHAVIOR);
begin
UUT: PARITY port map (WORD => WORD, PARITY_ODD => PARITY_ODD);
STM: process
begin
WORD <= "00000000"; wait for 10 ns;
WORD <= "00000001"; wait for 10 ns;
WORD <= "00000011"; wait for 10 ns;
WORD <= "00000111"; wait for 10 ns;
WORD <= "11111111"; wait for 10 ns;
end process;
end TESTBENCH;

2.2 Типове данни и обекти

В езика VHDL всеки обект (например променлива или сигнал) притежава тип, който се задава при декларирането на обекта. VHDL е език със строга типизация, т.е. обект от определен тип може да приема стойност само от същия тип. Преобразуването от един тип в друг става само в явен вид с помощта на специално написани за целта функции.

2.2.1 Обекти

Съществуват три класа обекти: сигнали, променливи и константи. Стойностите на константите се задава при декларирането им и след това не могат да бъдат променяни. Променливите в VHDL имат същия смисъл като и в езиците за програмиране. Те са локални за процеса, в който са декларирани. Сигналите са подобни на променливите, но съществува една принципна разлика. При присвояване сигнала не променя веднага стойността си, а се изчаква определено време. Продължителността на това изчакване се определя от стойността записана след думата after в оператора за сигнално присвояване. Ако такава стойност не е указана се приема, че сигналът ще се промени след един делта интервал, т.е. в следващия симулационен цикъл.

Общият формат за деклариране на обекти е следният:

клас списък-от-имена-на-обекти : тип := стойност;

Класът на обекта е constant, signal или variable. Типовете ще бъдат разгледани в следващия раздел. Полето стойност е задължително само за константите, за сигнали и променливи то има смисъла на начална стойност. Ето някои примери за деклариране на обекти:

 
variable FB,Q0,Q1 : std_logic;
signal CLK: bit := '0';
constant N: Integer := 32;
signal DOUT: std_logic_vector (31 downto 0);

2.2.2 Типове данни

VHDL предоставя няколко базови или скаларни типове данни и механизъм за конструиране на съставни типове. Скаларните типове включват числови, физически и изброими типове. Съставните типове са масиви и записи. Въз основа на базовите типове могата да бъдат дефинирани нови потребителски типове. В езика съществуват и няколко предварително дефинирани типове данни - bit, bit_vector, time, boolean и др. Техните декларации се съдържат в пакета standard.

Общия формат на оператора за деклариране на тип е:

type име-на-тип is дефиниция-на-тип;

Подобен на него е операторът за деклариране на подтип на вече създаден тип. В следващите раздели са дадени множество примери, поясняващи използването на тези оператори.

Целочислени типове

Декларацията на целочислен тип задава в какви граници се менят стойностите на обектите от този тип. В пакета standard е деклариаран един целочислен тип - integer и два негови подтипа - на натуралните и на положителните числа:

 
type integer is range -2147483648 to 2147483647;
subtype natural is integer range 0 to integer'high;
subtype positive is integer range 1 to integer'high;

Физически типове

Физическите типове са числови типове, служещи за представяне на физически величини като време, напрежение и т.н. Освен диапазон на допустимите стойности могат да се укажат и мерни единици, кратни на базовата. Важен пример за такъв тип е предварително дефинирания тип за време - time, който се използва при VHDL симулацията:

Изброими типове

Изброимият тип представлява подредено множество от символи и идентификатори.

 
type segments is ('a','b','c','d','e','f','g',dp);
type boolean is (false, true);
type bit is ('0','1');

Масиви

Масивите представляват индексирани набори от еднотипни елементи. Ако при декларирането на типа е указан диапазона на индекса на масива то такъв тип се нарича ограничен. В случай, че в декларацията на типа не са указани граници за индекса то типа е неограничен. Това позволява създаване на универсални типове данни, каквито са например предварително дефинираните string и bit_vector. Размерността на обектите от неограничен тип се указва при декларацията им:

type string is array (positive range <>) of character;
type bit_vector is array (natural range <>) of bit;
signal DATABUS : bit_vector (63 downto 0);
constant ERRMSG : string := "Simulation error";

Адресирането на елемент от масив се извършва като след името на масива в скоби се укаже индекса на елемента.

Записи

Както и в езици като Pascal и C, записът представлява структура от именовани елементи, които могат да са от различни типове. Обикновенно записите се използват при описания на по-абстрактните нива в йерархията на VHDL проекта. Адресирането на поле от запис се извършва като се укажат имената на обекта и полето, разделени с точка.

Атрибути

Атрибутите представляват допълнителна информация асоциирана със декларираните типове и обекти. Достъпа до атрибутите се осъществява като след името на типа или обекта се укаже името на атрибута и като разделител се използва апостроф. Съществат множество предварително дефинирани атрибути. Тук ще бъдат разгледани само най-важните от тях.

За произволен скаларен тип Т са дефинирани следните атрибути:

└≥≡Φ▀≤≥ ╨στ≤δ≥α≥

T'left ╦ Γα π≡αφΦ≈α φα T

T'right ─ ▒φα π≡αφΦ≈α φα T

За всеки едномерен масив A са дефинирани следните атрибути:

└≥≡Φ▀≤≥ ╨στ≤δ≥α≥

A'range ─Φα∩ατεφ φα ΦφΣσΩ▒α φα A

A'length ─╖δ╡Φφα φα ΣΦα∩ατεφα φα ΦφΣσΩ▒α φα A

За всеки сигнал S са дефинирани следните атрибути:

└≥≡Φ▀≤≥ ╨στ≤δ≥α≥

S'Event true αΩε Γ ≥σΩ≤∙Φ  ▒Φ∞≤δα≈Φεφσφ ≈ΦΩ╖δ σ

∩≡ε∞σφσφα ▒≥εΘφε▒≥≥α φα S

S'Last_Value ╧εΩατΓα ∩≡σΣ∩ε▒δσΣφα≥α ▒≥εΘφε▒≥ φα S

Тип std_logic

Два от разгледаните до тук предварително дефинирани типове данни имат най-пряко отношение към моделирането на хардуер - bit и bit_vector. Обектите от тези типове могат да имат стойности '0' или '1' и служат за описание на логически сигнали и магистрали.

Когато двузначната логика не е достатъчна за адекватно описание на поведението на моделираната схема се използват типовете std_logic и std_logic_vector. Многозначната логика описава състоянията на възлите в схемата като комбинации от логически нива и сили. Типа std_logic е дефиниран със следния набор от стойности:

 

Стойност

Име на състоянието

Типично приложение

'U'

Неинициализирано

Стойност по подразбиране

'X'

Неопределено, силно

Конфликти в магистрали и др.

'0'

Силна нула

Транзистор към земя

'1'

Силна единица

Транзистор към захранване

'Z'

Висок импеданс

Изход на буфер с 3 състояния

'W'

Неопределено, слабо

Терминатор на шина

'L'

Слаба нула

Резистор към земя

'H'

Слаба единица

Резистор към захранване

'-'

Без значение

Автоматичен синтез на схеми

Тези типове, както и операциите със тях са декларирани в пакета std_logic_1164.

Оператори и изрази

Изразите в VHDL са подобни на изразите в традиционните езици за програмиране. Те представляват формули, които съдържат обекти, литерали и извиквания на функции свързани помежду си с оператори.

Логическите оператори and, or, nand, nor, xor и not имат операнди от тип bit, std_logic или boolean и също така едномерни масиви от тези типове. Резултата е от типа, от който са и операндите.

Операторите за сравняване =, /=, <, <=, > и >= трябва да имат операдни от един и същ тип. Резултата е от тип boolean.

Аритметичните оператори +, ¡ , * и / работят с операнди от целочислени, реални и физически типове.

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

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

Структурното VHDL описание на една електронна схема описава от какви компоненти се състои тя и как тези компоненти са свързани помежду си.

2.3.1 Базови оператори за структурно описание

Този тип описание се базира на два оператора: оператор за деклариране на компонент и оператор за включване на компонент в схемата.

Следния пример представлява структурен VHDL модел на двубитов брояч на Джонсън. Схемата е съставена от два D-тригера - U1 и U2. Модела на тригера (DFF) е описан в друг файл и трябва да се компилира преди модела на брояча.

 
library IEEE;
use IEEE.std_logic_1164.all;
-- ╚φ≥σ≡⌠σΘ▒φα ≈α▒≥ φα ∩≡εσΩ≥φα≥α σΣΦφΦ≈α JOHNSON
entity JOHNSON is
port (CLOCK, RESET : in std_logic;
Q0, Q1 : inout std_logic);
end JOHNSON;
-- └≡⌡Φ≥σΩ≥≤≡φα ≈α▒≥ φα ∩≡εσΩ≥φα≥α σΣΦφΦ≈α JOHNSON
architecture STRUCTURAL of JOHNSON is
component DFF -- ─σΩδα≡α≈Φ  φα Ωε∞∩εφσφ≥α D-≥≡Φπσ≡
port (D, CLK, RSTN : in std_logic; Q, QN : out std_logic);
end component;
signal FB : std_logic;
begin
-- ┬Ωδ■≈Γαφσ φα ΣΓα Ωε∞∩εφσφ≥α DFF ▒ Φ∞σφα U1 Φ U2
U1: DFF port map (FB, CLOCK, RESET, Q0, open);
U2: DFF port map (Q0, CLOCK, RESET, Q1, FB);
end STRUCTURAL;

Оператора за деклариране на компонент задава имената и типа на портовете на компонента. Неговият формат е следния:

component име-на-компонент

port (списък-на-портовете);

end component;

След като компонента е деклариран той може да бъде включен в описанието на проектната единица чрез следния оператор:

етикет : име-на-компонент port map свързващ-списък;

Етикетът е задължителен елемент от оператора за включване на компонент. Свързващият списък представлява списък на сигналите от проектната единица, към които е свързан компонента. Съответствието между тези сигнали и портовете на компонента се задава от местоположението им в свързващия списък и списъка на портовете. Ако даден порт трябва да остане несвързан на съответното място в свързващия списък се поставя думата open.

2.3.2 Регулярни стуктури

Много от електронните схеми съдържат повтарящи се еднотипни компоненти. За съкратено описание на такива регулярни структури се използва оператора generate. Формата на този оператор е следния:

етикет : схема-на-генериране generate

оператори-за-включване-на-компоненти

end generate етикет;

Схемата-на-генериране може да бъде два типа: for-схема или if-схема.

 
library IEEE;
use IEEE.std_logic_1164.all;
entity REG33 is
port( DIN : in std_logic_vector (1 to 32);
PTYIN, CLEAR, LOAD : in std_logic;
DOUT : out std_logic_vector (1 to 32);
PTYOUT : out std_logic);
end REG33;
architecture STRUCT_GEN of REG33 is
component DFF
port (D, CLK, RSTN : in std_logic; Q, QN : out std_logic);
end component;
begin
G1: for N in 1 to 33 generate
G2: if N < 33 generate
U1: DFF port map (DIN(N), LOAD, CLEAR, DOUT(N), open);
end generate G2;
G3: if N = 33 generate
U33: DFF port map( PTYIN, LOAD, CLEAR, PTYOUT, open);
end generate G3;
end generate G1;
end STRUCT_GEN;

В зависимост от избраната схема оператора generate реализира итеративно или условно включване на компоненти. В горния пример е илюстрирано използването на generate за описание на 33-битов регистър. Разрядите от 1 до 32 са свързани към входната шина DIN и към изходната DOUT. Последният бит е свързан към вход PTYIN и към изход PTYOUT.

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

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

[етикет:] process [ (активиращ-списък) ]

декларации

begin

последователни-оператори

end process;

Последователните оператори описават поведението на процеса или с други думи действията, които се извършват когато процеса се изпълнява. Изпълненето на процеса настъпва в резултат на промяна на сигнали указани в активиращия списък или в оператора wait. Резултатите от изпълнението се отразяват в изходните сигнали на процеса. Всички процеси, които са активни в даден момен се изпълняват паралелно по отношение на симулационното време.

2.4.1 Последователни оператори

Последователните оператори могат да бъдат използвани в тялото на процес и при описание на функции и процедури. Те са подобни на операторите използвани в езиците за програмиране с изключение на оператора за сигнално присвояване и оператора wait.

Оператор за сигнално присвояване

По време на VHDL симулацията за всеки сигнал се съхранява списък на бъдещите промени в стойността му. Този списък се нарича драйвер на сигнала и се състои от транзакции. Оператора за сигнално присвояване добавя една или няколко транзакции към драйвера на дадения сигнал. Той има следния формат:

Φ∞σ-φα-▒Φπφαδ <= [transport] ▒≥εΘφε▒≥ [after ταΩ╖▒φσφΦσ];

Параметъра закъснение е опционален и показва след колко време трябва да настъпи промяната в стойността на сигнала. Ако този параметър е пропуснат то транзакцията се планира за следващия симулационен цикъл.

Съществуват два типа закъснения - инерционно и транспортно (фиг. 2.4). Транспортното закъснение е аналогично на закъснението при разпространение на сигнал по проводник. Инерционното закъснение служи за описание на активни компоненти чиито изходи не реагират на прекалено кратки входни въздействия.

Фиг. 2.4 Типове закъснения

Оператор wait

Операторът wait превключва съдържащият го процес в неактивно състояние. Също така той може да укаже условията, при които процеса отново ще стане активен.

Операторът wait не може да се използва при описанието на процес, за който в оператора process е указан активиращ списък.

Съществуват следните варианти на wait:

wait;

Процесът няма да се активира до края на симулацията;

wait on αΩ≥ΦΓΦ≡α∙-▒∩Φ▒╖Ω;

Процесът се активира при промяна на сигнал от активиращия списък. Този вариант е еквивалентен на поставяне на активиращ списък в заглавния ред на оператора process;

wait until ≤▒δεΓΦσ;

Процесът се активира при изпълнение на зададеното условие;

wait for Γ≡σ∞σ;

Процесът се активира след изтичане на указаното време.

Последните три варианта на оператора могат да се комбинират за формиране на по-сложни условия. На следващия пример е показан процес, който се изпълнява при промяна на сигналите A и B, но само ако по това време сигнала ENABLE е във високо ниво.

 
And_process: process
begin
wait on A, B until Enable = '1';
T <= A and B after 2 ns;
end process;

Оператор за присвояване

Това е класически оператор за даване на стойност на променлива:

Φ∞σ-φα-∩≡ε∞σφδΦΓα := ▒≥εΘφε▒≥;

Оператор assert

Използва се за извеждане на съобщения по време на симулация.

assert ≤▒δεΓΦσ report ≥σΩ▒≥;

Ако условието не е изпълнено се отпечатва указания текст.

Оператор if

Служи за разклоняване на алгоритъма в зависимост от едно или няколко условия. Условието трябва да бъде израз от тип boolean.

if ≤▒δεΓΦσ then ε∩σ≡α≥ε≡Φ

[elsif ≤▒δεΓΦσ then ε∩σ≡α≥ε≡Φ]

[else ε∩σ≡α≥ε≡Φ]

end if;

В следващия пример операторът if е използван за описание на тригер управляван по ниво:

 
DLATCH: process
begin
if ENABLE = '1' then
Q <= D after 10 ns;
QN <= not D after 10 ns;
end if;
wait on D;
end process;

Оператор case

Оператора case определя кои оператори ще се изпълнят на базата на стойността на управляващия израз:

case ≤∩≡αΓδ Γα∙-Φτ≡ατ is

when ▒≥εΘφε▒≥ [ | ▒≥εΘφε▒≥ ] => ε∩σ≡α≥ε≡Φ

...

[when others => ε∩σ≡α≥ε≡Φ ]

end case;

Управляващия израз трябва да бъде или от дискретен тип или да е едномерен масив. Операторите след others се изпълняват когато стойността на управляващия израз не съвпада с нито една от явно изброените стойности.

Оператор loop

Операторът loop се използва за организиране на цикли. Съществуват три негови разновидности:

loop ≥ δε-φα-≈ΦΩ╖δα end loop;

Безкраен цикъл. От него се излиза с exit;

while ≤▒δεΓΦσ loop ≥ δε-φα-≈ΦΩ╖δα end loop;

Цикълът се изпълнява докато условието има стойност true ;

for ▀≡ε ≈ in φα≈αδε to Ω≡αΘ loop ≥ δε-φα-≈ΦΩ╖δα end loop;

Цикълът се изпълнява докато брояча се намира между началната и крайната стойност.

Подпрограми

VHDL разполага с два типа подпрограми - функции и процедури:

function Φ∞σ (∩α≡α∞σ≥≡Φ) return ≥Φ∩-φα-≡στ≤δ≥α≥α;

Параметрите са от клас signal или constant и не могат да бъдат променяни от функцията. Резултатът се връща чрез името ¦ ;

procedure Φ∞σ (∩α≡α∞σ≥≡Φ);

Параметрите са от клас signal, constant или variable. При декларирането им се указва дали са входни, изходни или двупосочни.

2.4.2 Паралелни оператори

Паралелните оператори представляват съкратен начин за описание на прости процеси. Тяхното използване прави VHDL моделите по кратки и прегледни.

Оператор за паралелно сигнално присвояване

По начина на записване този оператор не се отличава от последователния оператор за сигнално присвояване. Той е еквивалентен на процес с един единствен оператор за присвояване.

 
═α∩≡Φ∞σ≡ ε∩σ≡α≥ε≡╖≥
Y <= A and B after 2 ns;
σ σΩΓΦΓαδσφ≥σφ φα
process (A, B) begin
Y <= A and B after 2 ns;
end process;

Условен оператор за паралелно сигнално присвояване

Това е комбинация от оператор if и оператори за присвояване:

Φ∞σ-φα-▒Φπφαδ <= ▒≥εΘφε▒≥1 when ≤▒δεΓΦσ1 else

...

▒≥εΘφε▒≥N-1 when ≤▒δεΓΦσN-1 else

▒≥εΘφε▒≥N;

 
╧≡Φ∞σ≡:
MUX_OUT <= 'Z' after 2 ns when ENA='0' else
IN_1 after 5 ns when SEL='1' else
IN_2 after 5 ns;
┼ΩΓΦΓαδσφ≥φΦ ≥ ε∩σ≡α≥ε≡ process Φτπδσ╡Σα ∩ε ▒δσΣφΦ  φα≈Φφ:
process (IN_1, IN_2, ENA, SEL)begin
if ENA='0' then MUX_OUT <= 'Z' after 2 ns;
elsif SEL='1' then MUX_OUT <= IN_1 after 5 ns;
else MUX_OUT <= IN_2 after 5 ns;
end if;
end process;

Селективен оператор за паралелно сигнално присвояване

Това е комбинация от оператор case и оператори за присвояване:

with ≤∩≡αΓδ Γα∙-Φτ≡ατ select

Φ∞σ-φα-▒Φπφαδ <= ▒≥εΘφε▒≥1 when ▒∩Φ▒╖Ω1,

...

▒≥εΘφε▒≥N-1 when ▒∩Φ▒╖ΩN-1;

 
with ALU_FUNCTION select
RESULT <= OP1 + OP2 when ALU_ADD,
OP1 - OP2 when ALU_SUB,
OP1 and OP2 when ALU_AND,
OP1 or OP2 when ALU_OR;
┼ΩΓΦΓαδσφ≥φΦ ≥ ε∩σ≡α≥ε≡ process ▀Φ Φτπδσ╡Σαδ ∩ε ▒δσΣφΦ  φα≈Φφ:
process (ALU_FUNCTION)begin
case ALU_FUNCTION is
when ALU_ADD => RESULT <= OP1 + OP2;
when ALU_SUB => RESULT <= OP1 - OP2;
when ALU_AND => RESULT <= OP1 and OP2;
when ALU_OR => RESULT <= OP1 or OP2;
end case;
end process;

Контролни въпроси

  1. Каква е разликата между поведенчески и структурен VHDL модел?
  2. От какви части се състои проектната единица?
  3. Обяснете разликата между типовете std_logic и bit.
  4. В кои случаи се използва транспортен модел на закъсненията и в кои - инерционен?
  5. По какво се различава сигналното присвояване от присвояването на стойност на променлива?