МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА'
Кафедра ЕОМ
Курсовий проект
З дисципліни “Теорія і проектування комп’ютерних систем та мереж”
НА ТЕМУ :”РОЗРОБЛЕННЯ VHDL-МОДЕЛІ КОМП'ЮТЕРА”
АНОТАЦІЯ
Дана курсова робота являє собою проектування спрощеної моделі мікрокомп(ютерної системи з усіма його основними складовими ,що забезпечують її нормальне функціонування.
Проектування здійснювалось з допомогою засобів автоматизованого проектування AHDL фірми ALDEC.
Ці засоби використовуються у зв(язку з неспроможністю інших методів (схемотехнічних) наприклад розробляти проекти для схем великої складності .З доломогою цих засобів можна легко формулювати і швидко модифікувати проекти, вчасно виявляти і легко модифікувати помилки . Весь інструментарій автоматизованого проектування AHDL дає можливість крім проектування, ще й синтезувати проекти з подальшою їх прошивкою. Саме через ці якості проектування є досить ефективне і надійне. Проектування деяких системи з допомогою засобів AHDL, на даному етапі розвитку систем автоматизованого проектування є досить раціональною і перспективною справою.
ЗМІСТ
ЗАВДАННЯ НА КУРСОВИЙ ПРОЕКТ .............................................................................. 4
ВСТУП ....................................................................................................................................................... 5
Структура мікрокомп(ютера ...................................................................... 6
Проектування інформаційного тракту ....................................................... 7
2.1 Проектування блока АЛП ...................................................................... 8
Проектування керуючого автомата ............................................................ 9
Симуляція роботи мікрокомп(ютера ......................................................... 13
Висновки ...................................................................................................... 14
ЛІТЕРАТУРА ............................................................................................................ 15
ДОДАТОК ..................................................................................................................16
ЗАВДАННЯ НА ПРОЕКТУВАННЯ
У розроблену VHDL-модель комп’ютера розробленого в методичних вказівках внести такі зміни :
Зовнішня пам(ять команд і даних об(ємом 128x8
Регістровий файл (RF) внести у внутрішню структуру Інформаційного тракту
Спроектувати Індексний регістр (Index Register(7..0)) в Інформаційного тракті для доступу до зовнішньої пам(яті
До системи команд мікропроцесора GNOME додати такі інструкції :
Set_index (index_reg(3..0):=ACC)
Shift_index (index_reg(6..4):= index_reg(2..0))
Load_Ram
Store_Ram
ВСТУП
Мета курсового проекту полягає в опануванні методів проектування вузлів комп'ютерних систем на прикладі створення моделі однокристального комп'ютера з використанням мови апаратного опису VHDL, виконанні симуляції з наступним тестуванням роботи мікропроцесорної системи на функціональному рівні. Розроблюваний універсальний однокристальний мікрокомп'ютер є різновидом універсальних комп'ютерів. Він містить усі стандартні пристрої, необхідні для реалізації цифрової системи мінімальної конфігурації, а саме — процесор, пам'ять команд, пам'ять даних, внутрішній тактовий генератор. Основою мікрокомп'ютера, що проектується, є мікропроцесор Gnome — 4-розрядний гіпотетичний неконвеєрний RISC мікропроцесор, зі спрощеною системою команд та типів адресування.
Основну увагу під час розробки мікропроцесора приділено проектуванню архітектури мікрокомп'ютера з використанням мови апаратного опису VHDL, оскільки при проектуванні НВІС (надвеликих інтегральних схем) з використанням рівнів архітектурного, логічного, топологічного проектування успіх розробки найбільшою мірою залежить від результатів попереднього, архітектурного рівня проектування. Вибраний спосіб побудови моделі пристрою за допомогою мови VHDL та інструментального засобу Active-VHDL фірми Aldec забезпечує можливість швидкої модифікації архітектури, є самоописовим, тобто він дозволяє швидко виявляти та усувати хиби проектування. Альтернативою опису моделі за допомогою мов апаратного опису є схемотехнічний синтез та синтез архітектури мікрокомп'ютера з використанням функцій алгебри логіки.
Синтез архітектури мікрокомп'ютера з використанням функцій алгебри логіки вимагає від розробника опису схеми в термінах заданої множини логічних функцій. Такий підхід є ефективний при побудові пристроїв невеликої складності. Суто теоретично функціонування мікрокомп'ютера можна описати даним способом, але через велику складність він є неприйнятним.
Метод схемотехнічного синтезу базується на синтезі з використанням як окремих логічних функцій, так і елементів, що побудовано на основі логічних функцій. Схемотехнічний дизайн є зручним і наочним для схем невеликої складності. Він дозволяє зручно втілювати евристичні схемотехнічні рішення. Проте цей метод є практично неприйнятним для схем великої складності (від 10 тисяч логічних елементів), оскільки складно формулюється, не дає змоги швидко модифікувати проект, вчасно виявляти та усувати хиби проектування.
Незручність схемотехнічного проектування складних систем дала поштовх розробці низки мов проектування. Зокрема, на початку 80-х років Міністерство оборони США підтримало розробку мови VHDL (VHSIC hardware description language) в рамках програми VHSIC (very high-speed 1C). Цю ініціативу було підтримано Інститутом інженерів електриків та електронників (IEEE) з метою розробки стандарту мови — IEEE Standard 1076-1987. Згодом Міністерством Оборони США доповнило стандарт IEEE Standard 1076-1987 власним стандартом MIL-STD-454, який регламентував сам процес проектування НВІС із використанням мови VHDL. Інститутом IEEE запроваджено стандарт Std-1164 бібліотеки мови VHDL уведенням багаторівневої логіки, яка необхідна в моделюванні роботи інтегральної схеми, запроваджено стандарт Std-1029 регламентації способів верифікації та тестування проекту. В 1993 році запроваджено новий IEEE стандарт мови VHDL 1076-1993, що доповнив існуючий. Поширення набула абревіатура VHDL-87TaVHDL-93.
Мова VHDL дозволяє охопити водночас декілька рівнів проектування — від архітектурного до логічного. Ця мова апаратного опису дає змогу описати пристрій як на поведінковому, так і на структурному рівнях та провести симуляцію. Тут синтез топології кристала виконують засобами автоматизованого синтезу на основі поведінкового та структурного описів пристрою. У складних проектах застосування мови VHDL та потужного засобу логічного синтезу дозволяє синтезувати пристрої, які за ефективністю перевищують аналогічні, з використанням схемотехнічного методу синтезу
Структура мікрокомп'ютера
Базова структура мікрокомп'ютера містить мікропроцесор Gnome та блок зовнішньої пам'яті (рис. 1). Наведена структура мікрокомп'ютера не є функціонально завершеною, оскільки відсутній інформаційний зв'язок поміж мікрокомп'ютером та зовнішнім оточенням. З погляду учбового функціонального проектування таке обмеження не є критичним. До того ж, запропоновану структуру мікропроцесора можна доповнити додатковими компонентами з метою розширення функціональних можливостей мікрокомп'ютера.
Рис.1. Структура мікрокомп'ютера
Інформаційний тракт мікропроцесора Gnome
Інформаційний тракт складається з таких компонентів:
1. Шестимирозрядний мультиплексор МІ
Мультиплексор МІ формує фізичну адресу комірки пам'яті. Зовнішню пам'ять мікропроцесора Gnome поділено на пам'ять даних та пам'ять програм. Пам'ять даних складає 64х8-розрядні комірки пам(яті, а пам'ять програм—64 восьмирозрядних комірок . Фізично пам'ять програм та даних розміщено в зовнішній пам'яті мікропроцесора. Для пам'яті програм виділено адресний простір з фізичними адресами від 00h до 3fh (рис.1), для звертання до RAM виділено адресний простір від 40h до 7fh.
При надходженні sel_data_ram= '1' мультиплексор формує фізичну адресу комірки пам'яті даних за логічною, яка зберігається в Індексному регістрі. При надходжнні sel_data_rат='0' мультиплексор формує фізичну адресу комірки пам'яті за логічною, що містить регістр лічильника інструкцій PC..
Пам(ять програм
ROM
000 0000
011 1111
Пам(ять даних
RAM
100 0000
111 1111
Рис.2. Розподіл адресного простору
2. Програмно-доступні регістри PC, Z, С, АСС,Index_RegШестирозрядний регістр PC призначено для зберігання вмісту
лічильника команд. Регістри Z та С є однорозрядними регістрами-тригерами, які зберігають поточне значення регістра ознаки нульового значення та регістра ознаки переносу. АСС - чотирирозрядний регістр, який виконує роль акумулятора.
Index_Reg – індексний регістр , що містить адресу читання/запису для інструкцій звертання до зовнішньої пам(яті.
3. Регістр інструкцій IR
Призначено для зберігання коду прочитаної інструкції. Керуючі сигнали ld_ir та ld_ir_lsn дозволяють завантажувати в регістр IR як 8-розрядне слово інструкції (табл.2), так і 4-розрядне слово даних з Регістроого файлу.
Таблиця 1
Ld_ir
Ld_ir_lsn
Дія
0
1
0
1
Збереження вмісту IR без змін
0
1
Завантаження в молодші розряди регістра інструкцій IR 4-розрядного слова з Регістрового файлу.
1
0
Завантаження в IR 8-розрядної інструкції з шини даних
4.Мультиплексор М3
Формує дані для IR, якщо керуючий сигнал Sel_data=0 тоді в регістр інструкцій поступають 8 розрядні дані з шини даних від зовнішньої пам(яті, інакше 4 розрядні дані з регістрового файлу.
5. Шестирозрядний мультиплексор М2 та суматор SM
Призначено для формування логічної адреси наступної інструкції на основі керуючих сигналів jump_рс та inс_рс (таб.З). Якщо іпс_рс= '1', на виході суматора є збільшений на одиницю вміст лічильника інструкцій PC, а якщо іпс_рс= '0', — поточне. Сигнал jump_рс керує формуванням наступної адреси з молодших розрядів регістра інструкцій PC (jump_pc= '1') або з виходу суматора SM(jump_pc='0').
Таблиця 2
jump pc іnс рс Адреса наступної інструкції
0
0
Залишається незмінною, тобто дорівнює PC.
0
1
Дорівнює РС+1.
1 1
0 1
Дорівнює молодшим розрядам регістра інструкцій IR.
Арифметико-логічний пристрій
АЛП є комбінаційним пристроєм, який виконує певні операції над вхідними операндами. Для випадку розглядуваного мікропроцесора Gnome першим вхідним операндом АЛП (рис.8) є поточна інформація з акумулятора сиr_асс, другим операндом є молодші 4 біти регістра команд сиr_іr, а також поточні значення ознак переносу curr_carry та нуля curr_zero. На виході блок АЛП залежно від коду операції alu_op формує результат: наступне значення акумулятора next_acc, отримане значення ознаки переносу next_carry, отримане значення ознаки нуля next_zero. Блок АЛП виконує невелику кількість операцій над 4-розрядними операндами (табл.4), що зумовлено простою системою команд мікропроцесора.
Рис. 3. Структурна схема АЛП
Таблиця 3
Допоміжні елементи
В інформаційному тракті мікропроцесора Gnome присутні повторювачі, інвертори та інші логічні елементи, які забезпечують формування керуючих сигналів та інформації на шині даних.
Керуючий автомат
Проектування керуючого автомата є складним та багатогранним етапом проектування, оскільки вимагає від розробника розуміння особливостей функціонування пристрою, вміння вибрати та ефективно спроектувати абстрактний автомат. Керуючий автомат — один з найважливіших блоків мікропроцесора. Спільно з генератором тактових імпульсів, який формує сигнал синхронізації clock, керуючий автомат забезпечує проходження подій в мікропроцесорі в правильній послідовності, тобто декодування інструкції та генерацію відповідних керуючих сигналів для реалізації елементарних операцій інформаційним трактом в циклах IF, ID, EX, встановлення в початковий стан вузлів мікропроцесора при надходженні сигналу встановлення в початковий стан reset. Множину керуючих сигналів складають сигнали sel_data_ram, read, write, ld_ir, ld_ir_lsn, inc_pc, jump_pc, alu_op, W_R, sel_data, shift_index, set_index. Розглянемо детально, які значення керуючих сигналів формуються пристроєм керування на кожному циклі виконання інструкції.
1. Цикл вибирання інструкцій (Instruction Fetch cycle -IF)Завантаження з пам'яті інструкцій, інкремент значення лічильника
команд PC на одиницю:
sel_data_ram=0
read=l
write=0
ld_ir=l
ld_ir_lsn=0
inc_pc=l
jump_pc=0
alu_op=000 (NOP)
W_R=0
sel_data=0
shift_index=0
set_index=0
перехід до циклу ID
2. Цикл декодування інструкції/вибирання операнда з регістровогофайлу (Instruction decode/register fetch cycle - ID)
Для інструкцій LOAD_DIR, ADD_DIR, XOR_DIR, TEST_DIR, операндом яких є значення РЗП RO-R15, виконується читання та запис в молодші 4 розряди регістра IR значення з регістрового файлу:
sel_data_ram=0
sel_data=1
W_R=0
shift_index=0
set_index=0
read=0
write=0
ld_ir=0
ld_ir_lsn=l
inc_pc=l
jump_pc=0
alu_op=000 (NOP)
перехід до циклу ЕХ
Для інструкції Load_Ram
READ <= '1';
LD_IR <= '1';
SEL_DATA_RAM <= '1';
Решта нулі
перехід до циклу ЕХ
Для решти інструкцій, які не вимагають завантаження усі керуючі сигнали присвоюються нулю
перехід до циклу ЕХ
З. Цикл виконання (Execute cycle - EX)
У даному циклі керуючі сигнали залежать від інструкції, це зумовлено відмінністю в множині мікрооперацій, виконуваних інформаційним трактом, для конкретної інструкції. Інструкції виконуються формуванням сигналів alu_op, inc_pc,jump_pc, sel_data_ram, write, W_R, shift_index, set_index, read.
. Розглянемо типові приклади формування керуючих сигналів для інструкції групи:
• ADD_DIR (група арифметико-логічних операцій):
alu_op=010 (ADD_OP)
перехід до циклу IF
• STORE_DIR (група операцій збереження результату):
write=l
перехід до циклу IF
• JUMP (група операцій умовних та безумовних переходів):
jump_pc=l
перехід до циклу IF
STORE_RAM(група операцій збереження результату):
SEL_DATA_RAM <= '1';
WRITE <= '1';
перехід до циклу IF
SHIFT_IND(група операцій збереження результату):
shift_index <= '1';
перехід до циклу IF
SET_IND(група операцій збереження результату):
set_index <= '1';
перехід до циклу IF
LOAD_RAM(група операцій збереження результату):
ALU_OP <= PASS_OP;
перехід до циклу IF
Рис.4. Структурна схема мікропроцесора GNOME
Симуляція роботи мікрокомп(ютера:
Висновки
Виконавши даний курсовий проект я опанував методи проектування вузлів комп(ютерних систем на прикладі створення моделі однокристального комп(ютера з використанням мови апаратного опису VHDL та інструментального засобу Active-VHDL фірми ALDEC, вніс зміни у внутрішню структру і додав декілька інструкцій згідно з поставленою задачею, виконав симуляйії з наступним тестуванням роботи мікропроцесорної системи на функціональному рівні.
ЛІТЕРАТУРА
1 .Методичні вказівки до циклу лабораторних робіт з курсу "Теорія і проектування комп'ютерних систем та мереж" для підготовки спеціалістів та магістрів на базі напрямку "Комп'ютерна інженерія" / Укл. Дунець Б.Р., Мельник А.О., Троценко В.В. - Львів: Видавництво ДУ "Львівська політехніка", 1999.-25с.
Методичні вказівки до дипломного проектування для студентівспеціальності 22.01 "Обчислювальні машини, системи, комплекси тамережі". - Львів, ЛШ, 1993.
Michael John Sebastian Smith Addison-Wesley Publishing CompanyVLSI Design Series 1,040 pages ISBN: 0-201-50022-1 June 1997
J.H. Henness, D.A.Patterson: Computer Architecture A QuantitativeApproach, Morgan Kaufman Publishers, 1990
P.J. Ashenden: The VHDL Cookbook, First Edition, University ofAdelaide, Australia, 1990
Інтернет сайт фірми Aldec Inc. http://www.aldec.com/
ДОДАТОК
Gen_Defs.vhd (Фрагмент)
Design : roma
library IEEE;
use IEEE.STD_LOGIC_1164.all;
package Gen_Defs is
-- Asynchronous level-sensetive memory type
type memory is array (0 to 128) of std_logic_vector(7 downto 0);
Опис констант, що відповідають кодам інструкцій мікропроцесора GNOME
MCU Instruction Set
constant CLEAR_C : std_logic_vector(7 downto 0) := "00000000";
.
.
constant Store_Ram : std_logic_vector(7 downto 0) := "00001000";
constant Load_Ram : std_logic_vector(7 downto 0) := "00001001";
constant set_ind : std_logic_vector(7 downto 0) := "00001010";
constant shift_ind : std_logic_vector(7 downto 0) := "00001011";
constant JUMP : std_logic := '1';
Опис констант, що відповідають кодам операцій АЛП
-- ALU Operation Codes
constant NOP_OP : std_logic_vector(2 downto 0) := "000"; -- translate A
constant PASS_OP : std_logic_vector(2 downto 0) := "001"; -- translate B
constant ADD_OP : std_logic_vector(2 downto 0) := "010"; -- OUT = A + B + Ci; form C
constant XOR_OP : std_logic_vector(2 downto 0) := "011"; -- OUT = A ^ B
constant AND_OP : std_logic_vector(2 downto 0) := "100"; -- OUT = A & B; form Z
constant SET_CARRY_OP: std_logic_vector(2 downto 0) := "101"; -- C = 1
constant CLR_CARRY_OP: std_logic_vector(2 downto 0) := "110"; -- C = 0
end Gen_Defs;
meory.vhd(Фрагмент)
--Опис бібліотек і вхідних, вихідних портів
architecture meory of meory is
begin
Read_Write:
process (ADDRESS, nCSB, nOEB, nWEB)
variable mem_array: Memory := (others => "00000000");
variable sel : std_logic_vector(1 downto 0);
variable index : integer range 0 to 128;
begin
--Ініціалізація пам(яті програм
-- Memory behavior description
index := CONV_INTEGER(ADDRESS);
if nCSB = '1' then
DATA <= "ZZZZZZZZ";
else
sel := nWEB & nOEB;
case sel is
when "10" => DATA <= mem_array(index); -- memory read
when "01" => mem_array(index) := DATA; -- memory write
when others => DATA <= "ZZZZZZZZ";
end case;
end if;
end process;
end meory;
Reg_File.vhd(Фрагмент)
--Опис бібліотек і вхідних, вихідних портів
architecture Reg_File of Reg_File is
Type MEM is array (0 to 15) of STD_LOGIC_VECTOR(3 downto 0);
begin
--функція запису у регістровий файл
process(clock)
variable RamTmp : MEM;
begin
RamTmp(0) := "1110";
RamTmp(1) := "1111";
RamTmp(2) := "1101";
IF (clock'EVENT AND clock='1')
Then
IF(WE = '1')
Then
RamTmp(conv_integer (Address)) := In_Data;
end if;
end if;
Out_Data <= RamTmp(conv_integer (Address));
end process;
end Reg_File;
ALU.vhd (Фрагмент)
--Опис бібліотек і вхідних, вихідних портів
-- Декларація використаних в проекті бібліотек включно з власною Gen_Defs
ENTITY ALU IS
PORT(
curr_acc :IN std_logic_vector(3 DOWNTO 0);
. . .
next_zero :OUT std_logic);
END ALU;
ARCHITECTURE behavioral OF ALU IS
BEGIN
PROCESS (curr_acc, curr_ir, curr_carry, curr_zero, alu_op)
-- Змінна sum необхідна для додавання двох чисел
VARIABLE sum : std_logic_vector (4 DOWNTO 0);
BEGIN
CASE alu_op IS
WHEN NOP_OP =>
next_acc <= curr_acc;
next_carry <= curr_carry;
next_zero <= curr_zero;
WHEN ADD_OP =>
-- Розширення розрядної сітки вхідних чисел та додавання
sum := (e0i& curr_acc)+(e0i & curr_ir)+(i0000i &
curr_carry);
next_acc <= sum (3 DOWNTO 0);
next_carry <= sum (4);
next_zero <= curr_zero;
WHEN PASS_OP =>
next_acc <= curr_ir;
next_carry <= curr_carry;
next_zero <= curr_zero;
-- Формування ознаки нуля за допомогою логічного виразу
next_zero <= NOT((curr_acc(3) AND curr_ir(3))
OR (curr_acc(2) AND curr_ir(2))
OR (curr_acc(1) AND curr_ir(1))
OR (curr_acc(0) AND curr_ir(0)));
WHEN OTHERS =>
next_acc <= curr_acc;
next_carry <= curr_carry;
next_zero <= curr_zero;
END CASE;
END PROCESS;
END behavioral;
-- File : Datapath(Фрагмент)
-- Design : roma
--Опис бібліотек і вхідних, вихідних портів
architecture Behavior of Datapath is
component Reg_File is
port (
--Опис вхідних, вихідних портів
);
end component Reg_File;
component ALU is
port(
--Опис вхідних, вихідних портів
);
end component ALU;
--декларація допоміжних сигналів
begin
-- Memory Control Signals
nCSB <= '0';
nOEB <= not READ;
nWEB <= WRITE nand (not CLK);
-- Address Bus (Multiplexer M1)
ADDRESS <= PC when SEL_DATA_RAM = '0' else Reg;
-- Organization Index Register
Next_Reg (3 downto 0) <= ACC when set_index = '1';
Next_Reg (6 downto 4) <= Next_Reg (2 downto 0) when shift_index = '1';
-- Data to PC (Multiplexer M2 and SM)
NEXT_PC <= IR(6 downto 0) when JUMP_PC = '1' else PC + 1 when INC_PC = '1' else PC;
-- Data from ACC
DATA <= ("0000" & ACC) when WRITE = '1'and Reg(6)='0' else "ZZZZZZZZ";
-- Data bus to IR
NEXT_IR <= DATA when LD_IR = '1' and sel_data = '0'
else (IR(7 downto 4) & Out_Data)
when LD_IR_LSN = '1' and sel_data = '1' else IR;
-- State signals to Control Unit
Z_ST <= Z;
C_ST <= C;
IR_DATA <= IR;
-- Datapath registers implementation
Registers:
process (CLK, RESET)
begin
if RESET = '1' then -- asynchronous reset
PC <= "0000000";
Reg <= "0000000";
IR <= "00000000";
ACC <= "0000";
Z <= '0';
C <= '0';
elsif CLK'Event and CLK = '1' then
PC <= NEXT_PC;
IR <= NEXT_IR;
ACC <= NEXT_ACC;
Reg <= Next_Reg;
Z <= NEXT_Z;
C <= NEXT_C;
end if;
end process;
U0:
component Reg_File
port map(
In_Data => ACC,
clock => CLK,
WE => W_R,
Address => IR (3 downto 0),
Out_Data => Out_Data
);
-- ALU connections
U1:
component ALU
port map(
CURR_ACC => ACC,
.
.
NEXT_ZERO => NEXT_Z
);
end Behavior;
-- File : ControlUnit(Фрагмент)
-- Design : roma
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use WORK.GEN_DEFS.all;
entity ControlUnit is
port(--Опис вхідних, вихідних портів
);
end ControlUnit;
architecture Behavior of ControlUnit is
--Декларація типу необхідного для реалізація регістра станів автомата
type MachineStates is (I_F, I_D, E_X);
signal STATE, NEXT_STATE: MachineStates;
begin
-- Control Unit is implemented as Mealy FSM
StateRegister:
process (CLK)
begin
if CLK'Event and CLK = '1' then
if RESET = '1' then
STATE <= I_F;
else
STATE <= NEXT_STATE;
end if;
end if;
end process;
Transition_and_Output_Function:
process (CLK)
begin
-- встановлення початкових значень для коректної реалізації станів
SEL_DATA_RAM <= '0';
READ <= '0';
WRITE <= '0';
W_R<= '0';
JUMP_PC <= '0';
INC_PC <= '0';
LD_IR <= '0';
LD_IR_LSN <= '0';
ALU_OP <= "000";
sel_data <= '0';
set_index <= '0';
shift_index <= '0';
case STATE is
when I_F => READ <= '1';
INC_PC <= '1';
LD_IR <= '1';
NEXT_STATE <= I_D;
when I_D => if IR_DATA(7 downto 4) = ADD_DIR or IR_DATA(7 downto 4) = XOR_DIR or
IR_DATA(7 downto 4) = LOAD_DIR or IR_DATA(7 downto 4) = TEST_DIR then
sel_data <= '1';
LD_IR_LSN <= '1';
elsif IR_DATA(7 downto 0) =Load_Ram then
READ <= '1';
LD_IR <= '1';
SEL_DATA_RAM <= '1';
else READ <= '0';
end if;
NEXT_STATE <= E_X;
when E_X => if IR_DATA = CLEAR_C then
.
.
if IR_DATA(7 downto 4) = STORE_DIR then
W_R <= '1';
end if;
if IR_DATA(7 downto 4) = XOR_DIR then
ALU_OP <= XOR_OP;
end if;
if IR_DATA(7 downto 4) = TEST_DIR then
ALU_OP <= AND_OP;
end if;
if IR_DATA(7 downto 0) = set_ind then
set_index <= '1';
end if;
if IR_DATA(7 downto 0) = shift_ind then
shift_index <= '1';
end if;
if IR_DATA(7 downto 0) = Store_Ram then
SEL_DATA_RAM <= '1';
WRITE <= '1';
end if;
if IR_DATA(7 downto 0) = Load_Ram then
ALU_OP <= PASS_OP;
end if;
if IR_DATA(7) = JUMP then
JUMP_PC <= '1';
end if;
NEXT_STATE <= I_F;
end case;
end process;
end Behavior;
-- File : GnomeMCU(Фрагмент)
-- Design : roma
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity GnomeMCU is
port(
CLOCK: in std_logic;
RESET: in std_logic;
-- Memory interface
ADDRESS: out std_logic_vector(6 downto 0);
DATA : inout std_logic_vector(7 downto 0);
nCSB : out std_logic;
nWEB : out std_logic;
nOEB : out std_logic
);
end GnomeMCU;
architecture Structure of GnomeMCU is
component ControlUnit is
port(
--Опис вхідних, вихідних портів
);
end component ControlUnit;
component Datapath is
port(
-- Control Unit Interface
--Опис вхідних, вихідних портів
-- External Memory Interface
--Опис вхідних, вихідних портів
);
end component Datapath;
signal IR_DATA_BUS: std_logic_vector(7 downto 0);
signal Z_ST_NET, C_ST_NET, SEL_DATA_RAM_NET, WRITE_NET, set_index_NET,
READ_NET, JUMP_PC_NET, INC_PC_NET,sel_data_NET, shift_index_NET,
LD_IR_NET, LD_IR_LSN_NET,W_R_NET: std_logic;
signal ALU_OP_BUS : std_logic_vector(2 downto 0);
begin
U0: component Datapath
port map(