Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АПКС Методичні вказівки до виконання лаб робіт...doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
506.37 Кб
Скачать

Абстрактні автомати

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

Автомат Мура — скінченний автомат, вихід якого залежить від його стану і не залежить від його входу.

Автомат Мілі — скінченний автомат, вихід якого визначаються його станом, та вхідними сигналами.

Проектування керуючого пристрою здійснимо на основі автомата Мілі. Використаємо засіб State Editor, призначений для проектування керуючих автоматів за допо­могою графічного редактора з подальшою автома­тичною трансляцією з графічного відображення у VHDL-опис.

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

Хід роботи

  1. Для кодування інструкцій процесора доцільно використати мнемонічні позначення. Константи-мнемоніки додати до package-файлу, створеного в лаб. роботі 3:

-- Constants for Instruction Codes

CONSTANT CLEAR_C: std_logic_vector (7 DOWNTO 0):= "00000000";

CONSTANT SET_C: std_logic_vector (7 DOWNTO 0):= "00000001";

CONSTANT SKIP_C: std_logic_vector (7 DOWNTO 0):= "00000010";

CONSTANT SKIP_Z: std_logic_vector (7 DOWNTO 0):= "00000011";

CONSTANT JMP_IX: std_logic_vector (7 DOWNTO 0):= "00000100";

CONSTANT LDA_IMM: std_logic_vector (3 DOWNTO 0):= "0001";

CONSTANT ADDA_IMM: std_logic_vector (3 DOWNTO 0):= "0010";

CONSTANT STA_RG: std_logic_vector (3 DOWNTO 0):= "0011";

CONSTANT LDA_RG: std_logic_vector (3 DOWNTO 0):= "0100";

CONSTANT ADDA_RG: std_logic_vector (3 DOWNTO 0):= "0101";

CONSTANT XORA_RG: std_logic_vector (3 DOWNTO 0):= "0110";

CONSTANT TESTA_RG: std_logic_vector (3 DOWNTO 0):= "0111";

CONSTANT STORE: std_logic_vector (3 DOWNTO 0):= "1000";

CONSTANT LOAD: std_logic_vector (3 DOWNTO 0):= "1001";

CONSTANT SET_IXH: std_logic_vector (3 DOWNTO 0):= "1010";

CONSTANT SET_IXL: std_logic_vector (3 DOWNTO 0):= "1011";.

  1. Створити нову діаграму станів:

File- New – State Diagram

Створити пристрій з назвою Control, входами

clock: IN std_logic;

reset: IN std_logic;

MEM_read: OUT std_logic;

inc_pc:OUT std_logic;

ld_ir: OUT std_logic;

  1. Перейменувати Змінну стану Sreg0 в State. Використовуючи палітру інструментів FSM Toolbar або меню FSM, додати до діаграми станів:

    1. Стани (State ) I_F та E_X;

    2. Переходи (Transitions ) між станами I_F->E_X та навпаки

    3. Індикатор початкового Стану (Reset/Initial State Indicator, ) з переходом до стану стану I_F, за умовою (condition, ) Reset ="1" (рис. 4).

Рис. 5. Діаграма станів керуючого пристрою.

    1. Змінити тип сигналу Reset на асинхронний (не залежить від тактового входу Clock).

    2. Меню FSM – Code Generation Settings – Закладка General –HDL Style – вибрати опцію «Two Processes» - Генерувати один процес для переходу між станами і другий для реалізації керуючих сигналів.

    1. Меню FSM – Generate Code – Згенерувати HDL код, ознайомитися із ним, провести компіляцію.

    1. Використовуючи палітру інструментів FSM Toolbar або меню FSM, додати до діаграми станів дії в стані I_F (State Actions ):

MEM_read <= '1';

ld_ir <= '1';

inc_pc <= '1';

як показано на рис. 5.

Рис. 6. Діаграма станів з заданими керуючими сигналами стану I_F.

    1. Меню FSM – Generate Code – Згенерувати HDL код, ознайомитися із ним, провести компіляцію.

  1. Для генерування керуючих сигналів на кроці E_X, залежно від поточної інструкції (Входу IR) можна продовжити роботу в режимі State Edіtor Але для кращого вивчення отриманого коду, зробимо це за допомогою HDL Editor.

Щоб уникнути збоїв компіляції при розбіжності між діаграмою станів та HDL-кодом потрібно перенести згенерований код до нового файлу та продовжити роботу в цьому файлі!

    1. Додати оператор використання Package файлу

    2. Розширити перелік портів пристрою:

IR: IN std_logic_vector(7 DOWNTO 0);

Z: IN std_logic;

C: IN std_logic;

MEM_write: OUT std_logic;

MEM_select: OUT std_logic;

jump_pc: OUT std_logic;

sel_dm: OUT std_logic;

alu_op: OUT std_logic_vector(3 DOWNTO 0);

ld_op: OUT std_logic;

data_out: OUT std_logic;

Rg_op: OUT std_logic;

write_ixh: OUT std_logic;

write_ixl: OUT std_logic;

RgWrite: OUT std_logic

    1. В блоці architecture, поза процесами, згенерувати вихідний сигнал активування зовнішнього блоку пам’яті, незалежно від стану автомату (в даній реалізації пам'ять завжди активована):

MEM_select <= '1';

    1. На початку процесу, що реалізує функцію виходів (State_NextState: process), деактивувати усі керуючі сигнали:

sel_dm <= '0';

MEM_read <= '0';

MEM_Write <= '0';

ld_ir <= '0';

inc_pc <= '0';

jump_pc <= '0';

alu_op <= NOP_OP;

ld_op <= '0';

data_out <= '0';

Rg_op <= '0';

RgWrite <= '0';

write_ixh <= '0';

write_ixl <= '0';

    1. Для Стану E_X Використати конструкцію IF..ELSIF для аналізу регістру інструкції та генерування вихідних сигналів залежно від поточного його вмісту, наприклад:

IF(IR=CLEAR_C) THEN alu_op <= CLR_C_OP;

ELSIF(IR=SET_C)THEN alu_op <= SET_C_OP;

ELSIF -- продовжити за аналогією згідно пункту 5

END IF;

  1. Працюючи по двоє, розробити код, що активує керуючі сигнали етапу EX для виконання двох інструкцій процесора, згідно таблиць 2-6. З наступного списку вибрати інструкції відповідно порядкових номерів студентів в групі (від 1 до 14, далі - циклічно).

      1. SKIP_C

      2. SKIP_Z

      3. JMP_IX

      4. LDA_IMM

      5. ADDA_IMM

      6. STA_RG

      7. LDA_RG

      8. ADDA_RG

      9. XORA_RG

      10. TESTA_RG

      11. STORE

      12. LOAD

      13. SET_IXH

      14. SET_IXL

  1. Відкомпілювати код та провести моделювання роботи керуючого пристрою при виконанні заданих інструкцій з використанням часових діаграм.

  2. Скласти звіт з виконання лабораторної роботи обсягом 2-3 сторінки друкованого тексту та захистити його. Зміст повинен містити кінцевий HDL код проектованого пристрою. Рекомендується додати часову діаграму.

Література:

  1. Сергиенко А. М. VHDL для проектирования вычислительных устройств. ТИД "ДС". 2003. C. 208

Список рекомендованої літератури

  1. Сергиенко А. М. VHDL для проектирования вычислительных устройств. ТИД "ДС". 2003. C. 208

28