Прототип модуля

Мова АHDL дозволяє при описі модуля використовувати в якості його компонентів створені раніше модулі. Для цього текстовий опис модуля верхнього рівня ієрархії повинен містити опис прототипів цих модулів.

Прототип задається за допомогою оператора Function Prototype Statement, що може бути розташований або безпосередньо в текстовому описі, або у файлі включення (Include File), вміст якого приєднується до текстового опису на етапі компіляції.

Файл включення (Include File) з описом прототипу модуля слід створювати за допомогою команди Create Default Include File(меню File),яка виконується у вікні текстового редактора пакета MAX+plus II, що містить опис модуля.

У мові AHDL визначені два способи звертання до прототипу модуля:

■ Безпосереднє звернення (In_Line Reference).

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

Відзначимо, що зазначені способи звертання до прототипу збігаються з описаними раніше способами звертання до примітива.

У мові AHDL визначено два типи модулів:

■ Параметризовані (Parameterized).

■ Непараметризовані (Unparameterized).

При цьому, як ті, так і інші можуть бути створені або самим розроблювачем, або фірмою Altera.

Як приклад, розглянемо варіанти текстового опису модуля Top_level_module, представленого на рис. 22.

 

Рис. 22.

У ньому використано три компоненти, кожна з яких являється модулем більш низького рівня в ієрархії описів. Припустимо, що для модулів Module_1 і Module_LPM створені файли включення:

 

Файл Module_1.inc

Function Module_1 (D[8..1], clk)

Returns (Out[8..1]).

 

Файл Module_LPM.inc

Function Module_LPM (A[WIDTH..1], B[WIDTH..1])

With (WIDTH)

Returns (Out[WIDTH..1]).

Нижче представлений текстовий опис, у якому здійснюється безпосереднє звертання до прототипів модулів.

INCLUDE “Module_1.inc”;

INCLUDE “Module_LPM.inc”;

FUNCTION Module_2(Data[8..1], clk, Reset)

RETURNS (Data_out[8..1]);

SUBDESIGN Top_level_Module

(

Din[8..1], CLK, Reset : INPUT;

Dout[8..1] : OUTPUT;

)

VARIABLE

Int_A[8..1] : NODE;

Int_D[8..1] : NODE;

BEGIN

Int_A[ ] = Module_1(.CLK = CLK, .D[] = Din[]);

-- Int_A[ ] = Module_1(Din[], CLK);

Int_D[] = Module_LPM(.A[] = Int_A[], .D[] = Dout[])

WITH (WIDTH = 8);

-- Int_D[] = Module_LPM(Int_A[], Dout[])

-- WITH (WIDTH = 8);

Dout[] = Module_2(.CLK = CLK, .Data[] = Int_D[], .Reset = Reset);

-- Dout[] = Module_2(Int_D[], CLK, Reset);

END;

Прототипи модулів Module_1 і Module_LPM, що знаходяться у файлах включення, приєднуються до даного текстового опису за допомогою оператора Include, а прототип модуля Module_2 заданий безпосередньо в текстовому описі.

У розділі Variable оголошені дві змінні Int_A[8.. 1] і Int_D[8.. 1], що є символічними іменами шин, що зв'язують компоненти Module_1 і Module_LPM, Module_LPM і Module_2 відповідно.

Рівняння Int_A[]=Module(.CLK=CLK,.D[]=Din[]) ілюструє безпосереднє звертання до прототипу модуля і зіставлення входів прототипу й переданих значень за іменами. Значення, що повертається, іншими словами вихідний сигнал компоненти, присвоюється внутрішній змінній Int_A[].

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

Значення параметра WIDTH задається при безпосереднім звертанні до прототипу параметризованого модуля.

Розглянемо тепер текстовий опис модуля Top_Level_Module, у якому компоненти оголошуються внутрішніми змінними.

INCLUDE “Module_1.inc”;

INCLUDE “Module_LPM.inc”;

FUNCTION Module_2(Data[8..1], clk,Reset)

RETURNS (Data_out[8..1]);

SUBDESIGN Top_level_Module

(

Din[8..1], CLK, Reset : INPUT;

Dout[8..1] : OUTPUT;

)

VARIABLE

Var_Module_1 : Module_1;

Var_Module_2 : Module_2;

Var_Module_LPM : Module_LPM WITH (WIDTH = 8);

BEGIN

Var_Module_1.CLK = CLK;

Var_Module_2(CLK, Reset) = (CLK, Reset);

Var_Module_1(D) = Din[];

Var_Module_LPM.A[] = Var_Module_1 .OUT[];

Var_Module_LPM .B[] = Dout[];

Var_Module_2 .Data[] = Var_Module_LPM .OUT[];

Dout[] = Var_Module_2 . Data_out[];

END

У розділі змінних оголошені три змінні - символічні імена модулів, використовуваних у даному текстовому описі як компоненти.

Відзначимо, що при оголошенні змінної Var_Module_LPM, що позначає параметризований модуль, задане значення параметра WIDTH.

 

ЛІТЕРАТУРА

1. Осадчий Ю.Ф. Язык описания аппаратуры AHDL. Метод. указания.

Часть 1. Основы языка AHDL. М. 2005.- 50 с.

 

ЗМІСТ

ВСТУП ………………………………………………………………… 3

Проекти ………………………………………………………………… 3

1. ЕЛЕМЕНТИ МОВИ ……………………………………………… 5

1.1. Ключові слова …………………………………………………….. 5

1.2. Символи ………………………………………………………….... 5

1.3. Імена ……………………………………………………………….. 6

1.4. Групи ……………………………………………………………….. 7

1.5. Числа ……………………………………………………………….. 8

1.6. Вирази ………………………………………………………………. 9

1.6.1. Арифметичні вирази …………………………………………… 9

1.6.2. Логічні вирази …………………………………………………… 11

1.7. Оператори ………………………………………………………….. 11

1.7.1. Логічні оператори ……………………………………………… . 11

1.7.2. Арифметичні оператори ………………………………………... 13

1.7.3. Оператори порівняння ………………………………………….. 13

1.8. Пріоритет виконання операцій …………………………………… 14

1.9. Примітиви ………………………………………………………… 15

1.9.1. Примітиви буферів ……………………………………………... 15

1.9.2. Буфер ланцюгового переносу (CARRY) ……………………….. 15

1.9.3. Буфер каскадного нарощування логічної функції (CASCADE)..16

1.9.4. Буфер логічного розширника (ЕХР) …………………………… 18

1.9.5. Буфер глобального ланцюга поширення керуючий сигнал

(GLOBAL) ………………………………………………………... 18

1.9.6. Буфер розміщення логічного осередку (LCELL),

що не видаляється ………………………………………………. 19

1.9.7. Буфер виходу з відкритим колектором (OPNDRN) …………… 21

1.9.8. Буфер розміщення логічного осередку (SOFT), що видаляється 21

1.9.9. Буфер виходу з Z станом (TRI) .………………………………... 22

1.10. Примітиви тригерів .……………………………………………… 22

2. СТРУКТУРА ТЕКСТОВОГО ОПИСУ ………………………… 23

2.1. Загальна структура ………………………………………………. 23

2.2. Розділ оголошення операторів ………………………………….. 25

2.2.1. Title Statement ……………………… ……………………….…. 25

2.2.2. Parameters Statement …………………………………….………. 26

2.2.3. Include Statement ………………………………………………… 26

2.2.4. Constant Statement ………………………………………………. 27

2.2.5. Define Statement …………………………………………………. 27

2.2.6. Function Prototype Statement ……………………………………. 28

2.2.7. Options Statement ………………………………………………… 29

2.2.8. Assert Statement ……………………..…………………………… 30

2.3. Subdesign Section …………………………………………………. 30

2.11. Variable Section ………………….………………………………. 31

2.12. Logic Section ………………………. ……………………………. 32

3. ЗАСТОСУВАННЯ КОНСТРУКЦІЙ МОВИ………………….. 33

3.1. Логічні рівняння ………………………………………………….. 33

3.2. Змінні типу NODE ……………………………………………. 34

3.3. Іменовані оператори ………………………………………………. 35

3.4. Групи ………………………………………………………………. 36

3.4.1. Одномірні й часові групи ……………………………………….. 36

3.4.2. Двовимірні групи ……………………………………………… 38

3.5. Таблиця істинності ……………………………………………… 39

3.6. Оператор IF THEN ……………………………………………….. 40

3.7. Оператор CASE …………………………………………………… 42

3.8. Базові значення логічних функцій …………………………….. 43

3.9. Константи ………………………………………………………… 46

3.10. Оператор FOR GENERATE ...………………………………… 46

3.11. Параметри ..………………………………………………………. 49

3.12. Оператор IF GENERATE ……………………………………. 49

3.13. Оператор ASSERT ...…………………………………………….. 51

3.14. Примітиви ..……………………………………………………… 52

3.15. Прототип модуля………………………………………………… 57

 

Література ……………………………………………………………….59