Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мова опису апаратури AHDL_Частина2.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
455.68 Кб
Скачать

1.9. Схеми монтажного «і» і «або»

Нижче наведений приклад текстового опису схеми монтажного (wire AND) і монтажного «АБО» (wire OR).

SUBDESIGN WIRE_

(

a, b, c : INPUT;

SELECT_a, SELECT_b, SELECT_c : INPUT;

WIRE_OR, WIRE_AND : OUTPUT;

)

BEGIN

DEFAULTS

WIRE_AND = VCC;

END DEFAULTS;

IF SELECT_a THEN

WIRE_OR = a;

WIRE_AND = a;

END IF;

IF SELECT_b THEN

WIRE_OR = b;

WIRE_AND = b;

END IF;

IF SELECT_c THEN

WIRE_OR = c;

WIRE_AND = c;

END IF;

END;

Монтажні схеми «І» і «АБО» реалізуються в тому випадку, коли змінній (лінії зв'язку), або виходу проекту привласнюється кілька значень одночасно.

В даному текстовому описі виходам WIRE_0R і WIRE_AND при SELECT_A = VCC, SELECT_B = VCC, SELECT_C = VCC одночасно присвоюються три значення: а, b, с.

Тип монтажної схеми («І», «АБО»), що реалізується задається базовим логічним рівнем відповідної змінної або виводу. Вивід WIRE_OR неявно довизначений логічним нулем (GND). Тому буде реалізована схема монтажного «АБО». Вивід WIRE_AND за допомогою оператора DEFAULT явно довизначений логічною одиницею (VCC) і, отже, буде реалізована схема монтажного «І».

Результати моделювання модуля WIRE_ наведено на рис. 23.

Рис. 23.

Нижче представлені рівняння, синтезовані компілятором при реалізації модуля WIRE_ на НВІС сімейства МАХ7000 (логічні рівняння взяті з розділу EQUATIONS файлу звіту):

a : INPUT;

b : INPUT;

c : INPUT;

SELECT_a : INPUT;

SELECT_b : INPUT;

SELECT_c : INPUT;

-- Node name is 'WIRE_AND'

-- Equation name is 'WIRE_AND', location is LC115, type is output.

WIRE_AND = LCELL( _EQ001 $ VCC);

_EQ001 = !a & SELECT_a

# !b & SELECT_b

# !c & SELECT_c;

-- Node name is 'WIRE_OR'

-- Equation name is 'WIRE_OR', location is LC117, type is output.

WIRE_OR = LCELL( _EQ002 $ GND);

_EQ002 = a & SELECT_a

# b & SELECT_b

# c & SELECT_c;

З наведеного тексту випливає, що компілятор пакета MAX+plus II реалізує схеми монтажного «І» і «АБО» як звичайні багатовходові схеми «І» і «АБО», тобто - на логічних елементах (макроосередках) НВІС ПЛ..

2. ОПИС ТРИГЕРНИХ СХЕМ

Тригерна (послідовнісна) схема - схема з елементом пам'яті (тригером), синхронізованим фронтом (синхронний тригер) або рівнем тактового сигналу (тригер-засувка).

2.1. Регістри

Регістр - пристрій, що забезпечує прийом, зберігання, передачу й перетворення форми подання (паралельних, послідовна) даних.

За способом прийому й передачі даних розрізняють:

  • Паралельний регістр - регістр із паралельними завантаженням і виходом даних.

  • Регістр зсуву - регістр із послідовними завантаженням і виходом даних.

  • Регістр зсуву, з паралельним завантаженням даних.

  • Регістр зсуву, з паралельним виходом даних.

2.1.1. Паралельний регістр

На рис. 24 представлена структурна схема чотирозрядного паралельного регістра.

Рис. 24.

Виводи регістра:

  • CLK - вхід тактового сигналу;

  • Enable - вхід дозволу завантаження даних;

  • Set - вхід асинхронної установки регістра;

  • Reset - вхід асинхронного скидання регістра;

  • D[4..1] - чотирирозрядний вхід даних;

  • Q[4..1] - чотирирозрядний вихід даних.

Текстовий опис регістра:

SUBDESIGN RG_4

(

D[3..0], CLK, ENABLE : INPUT = GND;

RESET, SET : INPUT = VCC;

Q[3..0] : OUTPUT;

)

VARIABLE

FF[3..0] : DFFE;

BEGIN

FF[].(CLK, CLRN, PRN, ENA) = (CLK, RESET, SET, ENABLE);

FF[].D = D[];

Q[] = FF[].Q;

END;

У наведеному описі до примітива (DFFE) звертаються як до змінної: оголошені чотири змінні FF[3..0], кожна з яких позначає DFFE тригер із входом дозволу роботи.

Базове значення вхідного сигналу, призначене для входів D CLK, Enable - логічний нуль, а для входів Reset, Set - логічна одиниця. Тому при використанні модуля RG_4 як компоненти кожного з його входів може бути залишений непідключеним, і на нього автоматично буде подане відповідне базове значення.

Відзначимо, що входи асинхронної установки (Set) і скидання (Reset) мають більш високий пріоритет у порівнянні із входом дозволу роботи (Enable). Так, якщо на вході Reset є присутнім сигнал логічного нуля, то кожний розряд регістра буде асинхронно скинутий у нуль незалежно від значення сигналу на вході Enable.

Розглянемо ще один можливий варіант опису розглянутого паралельного регістра. У цьому випадку для задання алгоритму роботи пристрою використаний оператор FOR i IN 0 TO 3 GENERATE

SUBDESIGN RG_4_1

(

D[3..0], CLK, ENABLE : INPUT = GND;

RESET, SET : INPUT = VCC;

Q[3..0] : OUTPUT;

)

BEGIN

FOR i IN 0 TO 3 GENERATE

Q[i] = DFFE(.CLK=CLK, .D=D[i], .ENA=ENABLE, .CLRN=RESET, .PRN=SET);

END GENERATE;

END;

Цей опис повністю ідентичний вищенаведеному.

Нижче наведено параметризований опис WIDTH-розрядного паралельного регістра із входами: асинхронної установки (Set), асинхронного скидання (Reset), дозволу завантаження даних (Enable).

PARAMETERS (WIDTH = 7);

ASSERT (WIDTH >0)

REPORT "Value of WIDTH parameter must be greater then % "WIDTH

SEVERITY ERROR;

SUBDESIGN RG_WIDTH

(

D[WIDTH..0] : INPUT = GND;

SET, RESET, ENABLE : INPUT = VCC;

CLK : INPUT;

Q[WIDTH..0] : OUTPUT;

)

VARIABLE

FF[WIDTH..0] : DFFE;

BEGIN

ASSERT USED(CLK)

REPORT "Input CKL must be used"

SEVERITY EROR;

FF[].(CLK, CLRN, PRN) = (CLK, RESET, SET);

FF[].D = D[];

Q[] = FF[].Q;

FF[].ENA = ENABLE;

END;

При використанні даного модуля як компонента (тобто при створенні модуля більш високого рівня в ієрархії описів) деякі коди (або цілеспрямовано, або в результаті помилки) можуть бути залишені непідключеними.

Оскільки для входу CLK не задане базове значення вхідного сигналу, компілятор у випадку, якщо цей вхід залишиться непідключеним, сформує повідомлення про помилку:

Error: Input pinstub/port 'clk' is unconnected and has no default value

Якщо ж для входу CLK буде задане базове значення вхідного сигналу (наприклад — GND), то для контролю підключення даного входу можна використати оператор ASSERT і вбудовану в пакет функцію - USED (як показано у вищенаведеній програмі).

Результати моделювання описаного регістра при WIDTH=7 і використання всіх його входів наведено на рис. 25.

Рис. 25.

Розглянемо ще один варіант опису параметризованого паралельного регістра, що використовує оператор FOR i IN 0 TO WIDTH GENERATE

PARAMETERS (WIDTH = 7);

ASSERT (WIDTH >0)

REPORT "Value of WIDTH parameter must be greater then % "WIDTH

SEVERITY ERROR;

SUBDESIGN RG_WIDTH_1

(

D[WIDTH..0] : INPUT = GND;

SET, RESET, ENABLE : INPUT = VCC;

CLK : INPUT;

Q[WIDTH..0] : OUTPUT;

)

BEGIN

ASSERT USED(CLK)

REPORT "Input CKL must be used"

SEVERITY EROR;

FOR i IN 0 TO WIDTH GENERATE

Q[i] = DFFE (.CLK=CLK, .D=D[i], .ENA=ENABLE, .CLRN= RESET, .PRN=SET);

END GENERATE;

END;

Це опис аналогічний вищенаведеному.

Нижче наведено параметризований опис WIDTH-розрядного паралельного регістра із входами: синхронної установки (Sset), синхронного скидання (SReset) і дозволу роботи (Enable).

PARAMETERS (WIDTH = 7);

ASSERT (WIDTH >0)

REPORT "Value of WIDTH parameter must be greater then % "WIDTH

SEVERITY ERROR;

SUBDESIGN RG_WIDTH_SINHRO

(

D[WIDTH..0] : INPUT = GND;

SSET, SRESET, ENABLE : INPUT = VCC;

CLK : INPUT;

Q[WIDTH..0] : OUTPUT;

)

VARIABLE

FF[WIDTH..0] : DFFE;

BEGIN

ASSERT USED(CLK)

REPORT "Input CKL must be used"

SEVERITY EROR;

FF[].CLK = CLK;

FF[].ENA = ENABLE;

CASE (SSET, SRESET) IS

WHEN B"11" => FF[].D = D[];

WHEN B"01" => FF[].D = VCC;

WHEN B"10" => FF[].D = GND;

END CASE;

Q[] = FF[].Q;

END;

У наведеному описі активними логічними рівнями для синхронних входів скидання SRESET і установка SSET є сигнал логічного нуля.

Якщо на вхід Enable подати сигнал логічного нуля, то регістр буде здійснювати зберігання даних. Якщо ж - сигнал логічної одиниці, то логіка роботи регістра буде визначатися даними на входах SSet і SReset.

Результати моделювання регістра при WIDTH=7 наведено на рис. 26.

Рис. 26.

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