- •Пояснительная записка
- •Введение
- •Задание на проектирование
- •1.2 Общие требования
- •1.3 Исходные данные:
- •2.Структурная схема разрабатываемой системы
- •3.Архитектура внешних выводов кристалла цп
- •4. Форматы данных, команд и способы адресации
- •4.1 Форматы данных
- •4.2 Формат команд
- •4.3 Способы адресации
- •5. Память
- •5.1 Структура памяти
- •5.2 Виртуальная память
- •6. Регистровая модель процессора
- •7. Система команд
- •8. Внутренняя организация процессора
- •9. Структурно-функциональная схема цп.
- •10. Алгоритм функционирования процессора.
- •10.1 Чтение команды из озу
- •10.2 Декодирование команды
- •10.3 Обработка регистровой команды (rg-rg)
- •10.4 Обработка команды типа регистр – память (rg-озу)
- •10.5 Обработка условного ввода / вывода (в/в)
- •10.6 Обработка безусловных переходов (б/п)
- •10.7 Обработка условных переходов (у/п)
- •10.8 Обработка прерываний
- •11. Основные операции на шине.
- •11.1 Чтение слова из зу и запись слова в зу .
- •11.2 Обработка прерывания.
- •11.3 Обработка захвата шины.
- •12.2. Обработка адресной части команды
- •12.3. Арифметические и логические операции
- •Список литературы
6. Регистровая модель процессора
По заданию регистры должны удовлетворять следующим условиям:
количество – 16;
универсальные;
разрядность – 32.
FLAGS
R0
R1
R2
…
…
…
R30
R31 Z
C S O I T U
Рис.3
В соответствии с техническим заданием необходимо реализовать тридцать два 32-разрядных универсальных регистра общего назначения R0-R31. Эти регистры доступны для пользователя как на чтение, так и на запись.
Регистры PC, BVA, Flags, TLBP, TINT – являются системными.
PC - 32-x разрядный счетчик команд. При сбросе ЦП PC принимает нулевое состояние, который, таким образом, является адресом первой исполняемой команды, иначе говоря, выполнение программы начинается с нулевой ячейки. Содержимое программного счетчика после выборки очередной команды из памяти автоматически инкрементируется, так что в PC появляется адрес следующей команды. C его помощью устройство выборки команд считывает слова, начиная с адреса записанного в PC.
BVA - 32-разрядный регистр для записи адреса страничной ошибки, куда записывается адрес страницы, отсутствующей в памяти. Т.е. когда идет обращение к какой то странице памяти не находящейся в оперативной памяти происходит запись адреса этой страницы в BVA, а затем с помощью этого адреса происходит загрузка страницы в ОП.
Flags – 8-разрядный регистр флажков. Если происходит одно из событий, которые могут отражаться в этом регистре, то происходит установка того или иного флажка.
Z- признак нулевого результата;
C- признак переноса из старшего разряда;
S- знак результата ;
O- признак переполнения результата;
I- разрешения прерывания;
T- пошаговый режим;
U- флаг супервизор- пользователь;
TLBP- 32-разрядный регистр указатель на таблицу переадресации.
TINT – 32-разрядный регистр указатель на таблицу векторов прерываний.
Masks – 8-разрядный регистр маскирования прерываний.
Любой из РОН может использоваться для хранения числа любого из заданных форматов. Размещение чисел с ПТ можно, начиная с любого РОН.
IR – регистр команд.
7. Система команд
Система команд ЦП должна быть функционально полной и включать следующие группы команд:
Тип операции |
Примеры
|
Арифметические и логические |
Целочисленные арифметические и логические операции: сложение, вычитание, логическое сложение, логическое умножение и т.д. |
Операции с плавающей точкой |
Операции сложения, вычитания, умножения и деления над вещественными числами |
Пересылки данных |
Операции загрузки/записи |
Управление потоком команд |
Безусловные и условные переходы, вызовы процедур и возвраты |
Системные операции |
Системные вызовы, команды управления виртуальной памятью и т.д. |
Десятичные операции |
Десятичное сложение, умножение, преобразование форматов и т.д. |
Операции над строками |
Пересылки, сравнения и поиск строк |
Система команд разрабатываемого ЦП приведена в таблице 1.
Если в результате команды происходит установка каких либо флажков, то в соответствующей клетке таблицы находится знак +, в противном случае -.
Назначение полей DEST, SRC1, SRC2 описано в разделе «Формат команд».
Если какое-то значение берётся не из SRC1 или SRC2, а из ячейки регистровой памяти, адрес которой содержится в SRC1 или SRC2, то соответствующие поля записываются в [x]-ых скобках. В <x>-ых скобках указывается значения по заданному адресу ОП. В командах сдвига SHL и SHR, содержимое регистра SRC1 сдвигается на SRC2 разряда, после чего результат записывается в регистр DEST. Способ адресации указывается в формате команды полем AMD. Если используется относительная адресация, то номер регистра, содержащего базовый адрес, записывается в SRC1, а непосредственно смещение или номер регистра индекса в SRC2.
Таблица 1
N |
Мне-моника |
Название |
Содержание |
Флажки |
КОП | ||||||
C |
Z |
S |
O |
T |
I |
U | |||||
Обращение к памяти по чтению и записи | |||||||||||
1 |
ldb |
Загрузить байт |
[DEST] <= <[SRC1]+SRC2> |
- |
- |
- |
- |
- |
- |
- |
0000000 |
2 |
ldh |
Загрузить слово |
[DEST] <= <[SRC1]+SRC2> |
- |
- |
- |
- |
- |
- |
- |
0000001 |
3 |
ldd |
Загрузить двойное слово |
[DEST] <= <[SRC1]+SRC2> |
- |
- |
- |
- |
- |
- |
- |
0000010 |
4 |
svb |
Сохранить байт |
<[SRC1]+SRC2> <= [DEST] |
- |
- |
- |
- |
- |
- |
- |
0000011 |
5 |
svh |
Сохранить слово |
<[SRC1]+SRC2> <= [DEST] |
- |
- |
- |
- |
- |
- |
- |
0000100 |
6 |
svd |
Сохранить двойное слово |
<[SRC1]+SRC2> <= [DEST] |
- |
- |
- |
- |
- |
- |
- |
0000101 |
7 |
ldf |
Загрузить число с ПТ |
[DEST] <= <[SRC1]+SRC2> |
- |
- |
- |
- |
- |
- |
- |
0000110 |
8 |
svf |
Сохранить число с ПТ |
<[SRC1]+SRC2> <= [DEST] |
- |
- |
- |
- |
- |
- |
- |
0000111 |
9 |
mov |
Переслать число |
[DEST] <= [SRC2] |
- |
- |
- |
- |
- |
- |
- |
0001000 |
10 |
movf |
Переслать число с ПТ |
[DEST] <= [SRC2] |
- |
- |
- |
- |
- |
- |
- |
0001001 |
Целочисленные арифметические для чисел со знаком и без знака | |||||||||||
11 |
add |
Сложение с ФТ |
[DEST] <= [SRC1]+[SRC2] |
+ |
+ |
+ |
+ |
- |
- |
- |
0001010 |
12 |
sub |
Вычитание с ФТ |
[DEST] <= [SRC1]-[SRC2] |
+ |
+ |
+ |
+ |
- |
- |
- |
0001011 |
13 |
mul |
Умножение с ФТ |
[DEST] <= [SRC1]*[SRC2] |
+ |
+ |
+ |
+ |
- |
- |
- |
0001100 |
14 |
div |
Деление с ФТ |
[DEST] <= [SRC1]/[SRC2] |
+ |
+ |
+ |
+ |
- |
- |
- |
0001101 |
Арифметические с ПТ | |||||||||||
15 |
addf |
Сложение с ПТ |
[DEST] <= [SRC1]+[SRC2] |
+ |
+ |
+ |
+ |
- |
- |
- |
0001110 |
16 |
subf |
Вычитание с ПТ |
[DEST] <= [SRC1]-[SRC2] |
+ |
+ |
+ |
+ |
- |
- |
- |
0001111 |
17 |
mulf |
Умножение с ПТ |
[DEST] <= [SRC1]*[SRC2] |
+ |
+ |
+ |
+ |
- |
- |
- |
0010000 |
18 |
divf |
Деление с ПТ |
[DEST] <= [SRC1]/[SRC2] |
+ |
+ |
+ |
+ |
- |
- |
- |
0010001 |
Логические | |||||||||||
19 |
and |
И |
[DEST] <= [SRC1]&[SRC2] |
- |
+ |
+ |
- |
- |
- |
- |
0010010 |
20 |
or |
ИЛИ |
[DEST] <= [SRC1] | [SRC2] |
- |
+ |
+ |
- |
- |
- |
- |
0010011 |
21 |
xor |
Исключающее ИЛИ |
[DEST] <= [SRC1]^[SRC2] |
- |
+ |
+ |
- |
- |
- |
- |
0010100 |
22 |
not |
Инвертирование |
[DEST] <= ![SRC1] |
- |
+ |
+ |
- |
- |
- |
- |
0010101 |
Сдвигов на произвольное число тактов | |||||||||||
23 |
shr |
Сдвиг вправо |
[DEST] <= [SRC1]>>[SRC2] |
+ |
- |
- |
+ |
- |
- |
- |
0010110 |
24 |
shl |
Сдвиг влево |
[DEST] <= [SRC1]<<[SRC2] |
+ |
- |
- |
+ |
- |
- |
- |
0010111 |
Условных и безусловных переходов | |||||||||||
25 |
jmp |
Безусловный переход |
PC <= [SRC1]+SRC2 |
- |
- |
- |
- |
- |
- |
- |
0011000 |
26 |
jz |
Условный переход по флагу Z=0 |
PC <= [SRC1]+SRC2 |
- |
- |
- |
- |
- |
- |
- |
0011001 |
27 |
jnz |
Условный переход по флагу Z=1 |
PC <= [SRC1]+SRC2 |
- |
- |
- |
- |
- |
- |
- |
0011010 |
Работы с подпрограммами | |||||||||||
28 |
call |
Вызов подпрограммы |
Rt <= PC, PC <= [SRC1]+SRC2 |
- |
- |
- |
- |
- |
- |
- |
0011011 |
29 |
ret |
Возврат из подпрограммы |
PC <= Rt |
- |
- |
- |
- |
- |
- |
- |
0011100 |
Ввода вывода | |||||||||||
30 |
in |
Чтение байта из порта |
[DEST] <= port([SRC1]+SRC2]) |
- |
- |
- |
- |
- |
- |
- |
0011111 |
31 |
out |
Запись байта в порт |
port([SRC1]+SRC2]) <= [DEST] |
- |
- |
- |
- |
- |
- |
- |
0100000 |
Управления вычислительным процессом | |||||||||||
32 |
di |
Запрет прерывания |
|
- |
- |
- |
- |
- |
1 |
- |
0100001 |
33 |
ei |
Разрешение прерывания |
|
- |
- |
- |
- |
- |
0 |
- |
0100010 |
34 |
int |
Вызов прерывания |
Rt <= PC, PC <= [SRC1]+SRC2 |
- |
- |
- |
- |
- |
1 |
- |
0100011 |
35 |
iret |
Возврат из прерывания |
PC <= Rt |
- |
- |
- |
- |
- |
0 |
- |
0100100 |
36 |
frd |
Чтение флагов |
[DEST] <= Flags |
- |
- |
- |
- |
- |
- |
- |
0100101 |
37 |
fwr |
Запись флагов |
Flags <= [DEST] |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
0100110 |
38 |
trd |
Чтение TLBP |
[DEST] <= TINT |
- |
- |
- |
- |
- |
- |
- |
0100111 |
39 |
twr |
Запись TLBP |
TINT <= [DEST] |
- |
- |
- |
- |
- |
- |
- |
0101000 |
40 |
ird |
Чтение TINT |
[DEST] <= TINT |
- |
- |
- |
- |
- |
- |
- |
0101001 |
41 |
iwr |
Запись TINT |
TINT <= [DEST] |
- |
- |
- |
- |
- |
- |
- |
0101010 |
42 |
scall |
Переход в супервизора |
|
- |
- |
- |
- |
- |
- |
1 |
0101011 |
43 |
rfe |
Возврат в пользователя |
|
- |
- |
- |
- |
- |
- |
0 |
0101100 |
44 |
etr |
Пошаговый режим |
|
- |
- |
- |
- |
1 |
- |
- |
0101101 |
45 |
dtr |
Выход из пошагового р. |
|
- |
- |
- |
- |
0 |
- |
- |
0101110 |
46 |
nop |
Нет операции |
PC <= PC+1 |
- |
- |
- |
- |
- |
- |
- |
0101111 |
Логика установки флажков
Регистр флажков содержит информацию о признаках результатов арифметических или логических операций, выполняемых в АЛУ.
Если в результате предыдущей операции получился 0, то флаг Z устанавливается в единицу, в противном случае в 0.
Если в результате предыдущей операции произошло переполнение, то флаг O устанавливается в 1, в противном случае в 0.
Если в результате предыдущей операции произошёл перенос из старшего разряда, то флаг C устанавливается в 1, в противном случае в 0.
Если в результате предыдущей операции получено отрицательное число, то флаг S устанавливается в 1, в противном случае в 0.