
- •Технічне завдання
- •Опис проекту
- •1. Структура мікрокомп`ютера
- •2 Зовнішній інтерфейс мікропроцесора Gnome
- •2.1 Порти мікропроцесора
- •2.2 Інтерфейс з зовнішньою пам'яттю
- •2.3 Переведення мікропроцесора до початкового стану
- •3. Програмна модель мікропроцесора
- •3.1 Програмно-доступні регістри
- •3.2 Множина інструкцій мікропроцесора
- •4. Внутрішня структура мікропроцесора
- •4.1 Інформаційний тракт мікропроцесора Gnome
- •1. Восьмирозрядний мультиплексор mux1
- •2. Програмно-доступні регістри pc,pc1, z, c, acc
- •3. Регістр інструкцій ir
- •4. Семирозрядний мультиплексор mux2 та суматор sm
- •5. Чотирирозрядний мультиплексор mux3
- •6. Арифметико-логічний пристрій
- •7. Регістровий файл
- •8. Допоміжні елементи
- •4.2 Цикли виконання команд
- •1. Цикл вибирання інструкцій (Instruction Fetch cycle -if)
- •2. Цикл декодування інструкції/вибирання операнда з регістрового файлу (Instruction decode/register fetch cycle - id)
- •3. Цикл виконання (Execute cycle - ex)
- •4.3 Керуючий автомат
- •1. Цикл вибирання інструкцій (Instruction Fetch cycle -if)
- •3. Цикл виконання (Execute cycle - ex)
- •Висновки
- •Список літератури
- •Додаток
3.2 Множина інструкцій мікропроцесора
Система команд мікропроцесора Gnome містить 16 інструкцій (табл.3.2.1), — це арифметико-логічні інструкції, інструкції збереження результату та інструкції умовного та безумовного переходів.
Табл.3.2.1. Множина інструкцій мікропроцесора
Інструкція |
Код |
Призначення |
Дія |
CLEAR_C |
00000000 |
Встановити значення регістра ознаки переносу С в ‘0’ |
C<=’0’ |
SET_C |
00000001 |
Встановити значення регістра ознаки переносу С в ‘1’ |
C<=’1’ |
SKIP_C |
00000010 |
Ігнорувати наступну інструкцію, якщо регістр ознаки переносу є встановленим (С=’1’) |
PC<=PC+C |
SKIP_Z |
00000011 |
Ігнорувати наступну інструкцію, якщо регістр ознаки нуля є встановленим (Z=’1’) |
PC<=PC+Z |
LOAD_IMM |
0001dddd |
Завантажити безпосередньо дані dddd/2/ в акумулятор (ACC). |
ACC<=IR[3:0] |
ADD_IMM |
0010dddd |
Додати dddd/2/ до акумулятора, результат помістити в акумулятор. Регістр ознаки переносу встановлюється в ‘1’ у разі переповнення регістра акумулятора. |
ACC<=ACC+IR[3:0] if ACC+IR[3:0] > F then C<=’1’ |
STORE_DIR |
0011rrrr |
Зберегти вміст акумулятора в регістрі загального призначення RF за номером rrrr/2/. |
RF[IR[3:0]]<=ACC |
LOAD_DIR |
0100rrrr |
Завантажити у акумулятор вміст регістра загального призначення RF за номером rrrr/2/. |
ACC<=RF[IR[3:0]] |
ADD_DIR |
0101rrrr |
Додати вміст регістра загального призначення RF за номером rrrr/2/ до акумулятора, результат помістити в акумулятор. Регістр ознаки переносу встановлюється в ‘1’ у разі переповнення регістра акумулятора. |
ACC<=ACC+ RF[IR[3:0]]
if ACC+RF[IR[3:0]]>F then C<=’1’ |
XOR_DIR |
0110rrrr |
Виконати логічну операцію XOR над вмістом регістра загального призначення RF за номером rrrr/2/ та акумулятора ACC, результат занести в акумулятор. |
ACC<= ACC xor RF[IR[3:0]] |
TEST_DIR |
0111rrrr |
Виконати логічну операцію AND над вмістом регістра загального призначення RF за номером rrrr/2/ та акумулятора ACC, результат занести в акумулятор. Формується значення регістру нульового результату. |
ACC<= ACC and RF[IR[3:0]] |
JNZ |
1000dddd |
Якщо ознака нульового результату встановлена, то завантажити у лічильник команд таку комбінацію бітів: R0[2:0]&IR[3:0] |
if Z=’0’ then PC<= R0[2:0]&IR[3:0]. |
LOAD |
1001dddd |
Завантажити у акумулятор значення, що знаходиться за адресою R0&IR[3:0]. Це може бути значення із зовнішньої пам`яті або з одного із зовнішніх пристроїв. |
if R0[3]=’0’ then ACC<= MEM[R0&IR[3:0]] else ACC<= DEV[R0&IR[3:0]] |
STORE |
1010dddd |
Завантажити до певного внутрішнього регістра зовнішнього пристрою значення з акумулятора. |
DEV[R0&IR[3:0]]<=ACC |
RET |
10110000 |
Відновити у лічильнику команд виконання тої послідовності команд, що була порушена необхідністю виконати обробку апаратного маскованого переривання. |
PC<=PC1; |
NOP |
11000000 |
Збереження попереднього стану, ніяких дій не виконується. |
– |