Цифровое вычислительное устройство
Министерство образования и науки Российской Федерации
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Факультет информационных технологий
Кафедра вычислительной техники
КУРСОВОЙ ПРОЕКТ
по дисциплине «Схемотехника ЭВМ»
цифровое вычислительное устройство
Пояснительная записка
ГОУ ОГУ 230101.65.6011.5 ПЗ
Руководитель проекта:
________________А.В. Хлуденев
"___"____________2011 г.
Исполнитель:
студент группы 08ВМК
________________И.И. Резанов
"___"____________2011 г.
Оренбург 2011
Министерство образования и науки Российской Федерации
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Факультет информационных технологий
Кафедра вычислительной техники
Задание на курсовой проект
Цифровое вычислительное устройство
Исходные данные: Архитектура – гарвардская;
Операции АЛУ– XOR, INC, SHR;
Операции управления – JMP, JNZ;
Разрядность данных – 8;
Число ячеек ПЗУ программ – 128;
Емкость ОЗУ данных – 128x8;
Виды адресации – прямая, косвенная;
Элементная база – ЕР1С3.
Разработать: 1) Схему электрическую функциональную;
Дата выдачи задания " 22 " февраля 2011 г.
Срок защиты проекта " 31 " мая 2011 г.
Руководитель
ктн, доцент А.В. Хлуденев
Исполнитель
студент группы 08ВМК -1 И.И. Резанов
Аннотация
В курсовом проекте разработано процессорное устройство гарвардской архитектуры, реализующее заданный набор операций.
Курсовой проект выполнен на интегральной схеме программируемой логики семейства Cyclone. Для реализации цифрового вычислительного устройства (ЦВУ) использован язык описания аппаратуры Altera HDL.
Пояснительная
записка выполнена на 23 листах, содержит
3 рисунка, 4 таблицы и 2 приложения.
Содержание
1 Система команд................
2 Структура ЦВУ.................
3 Разработка основных
функциональных блоков и узлов.
4 Тестирование ЦВУ..............
Список использованных
источников....................
Приложение А. Функциональная
схема.........................
Приложение Б. AHDL-описание
ЦВУ...........................
1 Система команд
Выполним развернутый анализ задания и выполним синтез системы команд.
Под запись чисел отводятся 8 разрядов. Оперативная память (ОЗУ) имеет 128 8-разрядных ячеек. Каждое число занимает одну ячейку ОЗУ. Все команды в ЦВУ будут одноадресные, за исключением безадресных команд INC, SHL, IN и OUT.
Примем, что будет использована
архитектура аккумуляторного
Дополним заданный набор операций следующими:
mov W, RAM(Adr) – загрузка в аккумулятор операнда, находящегося в ОЗУ по адресу Adr[7..0] (прямая адресация);
– загрузка в аккумулятор операнда, находящегося в ОЗУ по адресу Adr (косвенная адресация);
mov RAM(Adr), W – запись содержимого аккумулятора в ОЗУ по адресу Adr (прямая адресация);
mov RAM(KC), W – запись содержимого аккумулятора в ОЗУ по адресу Adr (косвенная адресация).
Выполним синтез команд. Команда будет иметь два поля:
- поле кода операции - будет занимать старшие разряды кода команды;
- поле параметра команды - будет занимать младшие разряды кода команды.
Поле параметра:
- в командах с прямой
- в командах с косвенной адресацией – 8-разрядный адрес ячейки ОЗУ;
- в командах перехода – 8-
С учетом дополнительных операций процессорное устройство должно выполнять 12 команд. Для их кодирования потребуется 4-разрядный код операции Cop[3..0]. Старший разряд будем использовать, чтобы различать команды с загрузкой результата в аккумулятор от прочих команд. Разряды Cop[2..1] будем использовать, чтобы различать команды каждой группы. Младший разряд Cop[0] будем использовать, чтобы различать операции с прямой и косвенной адресацией.
Результаты синтеза команд приведены в таблице 1. В таблице 1 приняты следующие обозначения:
- a – бит, отводящийся под адрес;
- x – бит, значение которого не важно для данной команды.
Все команды 12-разрядные и занимает одну ячейку ПЗУ программ. ПЗУ состоит из 256 ячеек по 12 разрядов каждая.
Таблица 1 – Система команд
Операция |
Мнемоника |
Адресация |
Код операции |
W ← RAM(Adr) |
MOV W,M |
Прямая |
0000 aaaa aaaa |
W ← RAM (Adr) |
MOV W,R |
Косвенная |
0001 xxxx xxaa |
W ← W XOR RAM(Adr) |
XOR M |
Прямая |
0010 aaaa aaaa |
W ← W XOR GPR(Adr) |
XOR R |
Косвенная |
0011 xxxx xxaa |
W ← INC W |
INC |
- |
0100 xxxx xxxx |
W ← SHR W |
SHR |
- |
0101 xxxx xxxx |
RAM(Adr) ← W |
MOV M,W |
Прямая |
1010 aaaa aaaa |
RAM (Adr) ← W |
MOV R,W |
Косвенная |
1011 xxxx xxaa |
W ← P_IN |
IN |
- |
1000 xxxx xxxx |
OUT_P ← W |
OUT |
- |
1001 aaaa aaaa |
PC ← Adr |
JMP |
- |
1100 aaaa aaaa |
PC ← Adr, (при условии) |
JNZ |
- |
1101 aaaa aaaa |
2 Структура ЦВУ
Примем решения, определяющие структуру ЦВУ.
Для выборки команд из ПЗУ программ емкостью 128 х 12 необходимы
- программный счетчик PCtr (8 разрядов);
- регистр команд IR (4 разряда).
В соответствии с вариантом задания для хранения данных необходимо использовать ОЗУ емкостью 128 х 8. Будем использовать ОЗУ с раздельными входами и выходами данных.
Операции над словами
– ZF – флаг нулевого результата;
– CF – флаг переноса.
В ЦВУ будет использоваться гарвардская
архитектура с раздельными
Схема ЦВУ, построенная в соответствии с принятыми решениями, приведена в приложении А. Адрес PC[7..0] выбираемой из ПЗУ команды определяется содержимым программного счетчика PCtr. Четыре старших разряда считанного слова DROM[11..8] загружаются в регистр команд IR и представляют код текущей операции Cop[3..0]. Разряды Cop[3..1] кода операции анализируется управляющим автоматом Co. Управляющий автомат формирует последовательность наборов микроприказов y1..y5, необходимых для выполнения текущей операции и подготовки к выборке следующей операции.
Восемь младших разрядов слова DROM[7..0] в командах с прямой адресацией определяют адрес ячейки памяти данных. В командах с регистровой адресацией адрес регистра определяется разрядами DROM[1..0].
Восемь младших разрядов слова DROM[7..0] в команде перехода JMP определяют адрес точки перехода.
Для устранения состязаний сигналов в ЦВУ использована двухфазная синхронизация:
- синхроимпульсы Clk от внешнего генератора поступают на синхровходы всех функциональных узлов, кроме управляющего автомата Co;
- синхронизация управляющего
Для инициализации ЦВУ используется сигнал Rst, который сбрасывает программный счетчик и переводит в состояние инициализации управляющий автомат.
3 Разработка функциональных блоков и узлов
3.1 Микропрограммный автомат
Функция микропрограммного автомата состоит в анализе разрядов кода операции Cop[3..1] и формировании последовательности наборов микроприказов y1..y5, необходимых для выполнения текущей операции и подготовки к выборке следующей операции. Действие микроприказов отображено на функциональной схеме ЦВУ.
При включении и рестарте ЦВУ микропрограммный автомат будет находиться в состоянии idle. Для обеспечения возможности пошагового (покомандного) исполнения программы автомат сможет перейти в последующие состояния только при наличии сигнала разрешения en. При аппаратной отладке ЦВУ такой сигнал необходимо формировать при нажатии кнопки «Шаг». При автоматическом выполнении программы на входе en постоянно должен действовать активный уровень.
Исполнение команды состоит из двух фаз:
- выборка команды;
- выполнение операции.
Выборка команды выполняется за один такт, при этом:
- текущее содержимое PCtr уже предварительно загружено в регистр адреса ПЗУ;
- код операции, считанный из ПЗУ, загружается в регистр команд IR, а параметр команд с прямой адресацией по шине адреса загружается в регистр адреса ОЗУ;
- выполняется инкремент PCtr для выборки следующей команды.
Для работы ЦВУ необходимо формировать следующие микрокоманды:
- y1 – выборка команды и инкремент адреса;
- y2 – загрузка аккумулятора;
- y3 – сохранение результата в памяти;
- y4 – загрузка адреса перехода в PCtr;
- y5 – вывод.
Поставим в соответствие каждой микрокоманде состояние автомата Мура:
- fetch – выборка команды и инкремент адреса;
- load – загрузка аккумулятора;
- out – вывод в порт;
- store – сохранение результата в памяти;
- jmp – загрузка адреса перехода в PCtr.
Микропрограмма автомата с отметкой внутренних состояний приведена на рисунке 1. Все команды выполняются за два такта.
Рисунок 1 – Микропрограмма автомата
Введем переменную текущего состояния автомата code. Тогда с учетом принятых решений управляющий автомат можно описать на AHDL:
SUBDESIGN co
(
c,rst,en,coper[3..1]: input;
Y[5..1] : output;
)
VARIABLE
code : machine with states(idle,fetch,load,store,
BEGIN
code.clk = c;
code.reset = !rst;
code.ena = vcc;
CASE code is
WHEN idle =>
if en then code = fetch;
else code = idle;
end if;
WHEN fetch =>
if !coper[3] then code = load;
else
CASE coper[2..1] IS
WHEN 0 => code = load;
WHEN 1 => code = store;
WHEN 2 => code = out;
WHEN 3 => code = jmp;
END CASE;
end if;
y[1]=vcc;
WHEN load => -- W (LOAD)
code = idle; y[2]=vcc;
WHEN out => -- OUT
code = idle; y[5]=vcc;
WHEN store => -- STORE
code = idle; y[3]=vcc;
WHEN jmp => -- JMP
code = idle; y[4]=vcc;
END CASE;
END;
3.2 АЛУ
АЛУ – блок, выполняющий арифметические операции и логические преобразования над операндами.
Введем обозначения:
- W[], DATA[] – входы операндов;
- C – вход переноса;
- СOP[1..0] – код операции АЛУ;
- CR – выход переноса;
- ZR – выход признака нулевого результата;
- R[] – выход результата.
Выполняемую операцию определяет код операции АЛУ COP[1..0]
(таблица 2).
Таблица 2
СОР[1..0] |
Мнемоника |
Операция |
00 |
MOV |
R[] = DATA[]; Z = (R[]= =0); |
01 |
XOR |
R[] = W[] $ DATA[]; Z = (R[]= =0); |
10 |
SHR |
(RES[7..0],CR)=(b"0",W[7..1], |
11 |
INC |
R[] = W[] + b”1”; Z = (R[]= =0); |
AHDL описание модуля АЛУ:
SUBDESIGN alu
(
W[7..0], DATA[7..0], COP[1..0], C: INPUT;
RES[7..0], ZR,CR: OUTPUT;
)
BEGIN
CASE COP[1..0] IS
WHEN 0 => RES[]=DATA[]; -- MOV
WHEN 1 => RES[]=W[] $ DATA[]; -- XOR
WHEN
2 => (RES[7..0],CR)=(b"0",W[7..1],
WHEN 3 => RES[] = W[] + 1; -- INC
END CASE;
ZR = (RES[]==0);
END;
3.3 Регистры
В состав ЦВУ входят 8-разрядные регистры общего назначения Rg и 4-разрядный регистр команд IR. Работу регистров можно описать в форме таблицы режимов (таблица 3). Параметр Width – число разрядов.
Таблица 3 – Режимы работы регистра
Режим работы |
С |
LD |
Q+[ 7..0] |
Загрузка |
|
1 |
D[7..0] |
Хранение |
x |
0 |
Q[7..0] |
Соответствующее AHDL-описание регистра Rg:
SUBDESIGN rg
(d[7..0],ld,c : INPUT;
q[7..0] : OUTPUT;)
VARIABLE
q[7..0] : DFFE;
BEGIN
q[].(clk, ena) = (c, ld);
q[] = d[];
END;
3.4 Программный счетчик
Для ЦВУ необходим программный счетчик PCtr с возможностью загрузки адреса команды. Режимы работы программного счетчика с загрузкой приведены в таблице 4.
Таблица 4 – Режимы работы счетчика
Режим работы |
С |
LD |
CE |
Q+[ 7..0] |
Загрузка |
|
1 |
x |
D[7..0] |
Инкремент |
|
0 |
1 |
Q[7..1] + 1 |
Хранение |
х |
0 |
0 |
Q[7..0] |
Соответствующее AHDL-описание модуля PCtr:
SUBDESIGN PCTR
(
d[7..0],ld,en,c,R :INPUT;
cntr[7..0] :OUTPUT;
)
VARIABLE
cntr[7..0] :DFFE;
Begin
cntr[].(clk,clrn,ena) = (c,!R,en#ld);
if ld then cntr[].d = d[7..0];
else cntr[].d = cntr[].q + 1;
end if;
end;
3.5 Мультиплексор
Мультиплексор «2 в 1» передает данные с одного из регистров банка на выход. Введем внутренние обозначения сигналов:
- входной код адреса - sel[1..0];
- водные сигналы - A[7..0],B[7..0];
- выходной сигнал - Y[7..0].
AHDL-описание модуля mux2_1:
SUBDESIGN mux2_1
(
A[7..0], B[7..0]: INPUT;
sel[0]: INPUT;
Y[7..0]: OUTPUT;
)
BEGIN
CASE sel[] IS
WHEN 0 => Y[] = A[];
WHEN 1 => Y[] = B[];
END CASE;
END;
3.6 Модули памяти
Модули ОЗУ данных и ПЗУ программ реализуем на основе библиотечной параметризируемой мегафункции altsyncram. Настройка мегафункции выполнена средствами инструмента MegaWizard Plug-In Manager инструментальной системы Qartus II. Полученное описание ПЗУ емкостью 128х12 на языке AHDL:
INCLUDE "altsyncram.inc";
SUBDESIGN ROM
(
address[7..0] : INPUT;
clock : INPUT;
q[11..0] : OUTPUT;
)
VARIABLE
altsyncram_component : altsyncram WITH (
ADDRESS_ACLR_A = "NONE",
INIT_FILE = "ROM.mif",
INTENDED_DEVICE_FAMILY = "Cyclone",
LPM_HINT = "ENABLE_RUNTIME_MOD=NO",
LPM_TYPE = "altsyncram",
NUMWORDS_A = 128,
OPERATION_MODE = "ROM",
OUTDATA_ACLR_A = "NONE",
OUTDATA_REG_A = "UNREGISTERED",
WIDTHAD_A = 8,
WIDTH_A = 12,
WIDTH_BYTEENA_A = 1
);
BEGIN
q[11..0]
= altsyncram_component.q_a[11..
altsyncram_component.clock0 = clock;
altsyncram_component.address_
END;
Полученное описание синхронного ОЗУ емкостью 128х8 на языке AHDL:
INCLUDE "altsyncram.inc";
SUBDESIGN RAM
(
address[7..0] : INPUT;
clock : INPUT;
data[7..0] : INPUT;
wren : INPUT;
q[7..0] : OUTPUT;
)
VARIABLE
altsyncram_component : altsyncram WITH (
ADDRESS_ACLR_A = "NONE",
INDATA_ACLR_A = "NONE",
INIT_FILE = "RAM.mif",
INTENDED_DEVICE_FAMILY = "Cyclone",
LPM_HINT = "ENABLE_RUNTIME_MOD=NO",
LPM_TYPE = "altsyncram",
NUMWORDS_A = 128,
OPERATION_MODE = "SINGLE_PORT",
OUTDATA_ACLR_A = "NONE",
OUTDATA_REG_A = "UNREGISTERED",
POWER_UP_UNINITIALIZED = "FALSE",
WIDTHAD_A = 8,
WIDTH_A = 8,
WIDTH_BYTEENA_A = 1,
WRCONTROL_ACLR_A = "NONE"
);
BEGIN
q[7..0] = altsyncram_component.q_a[7..0]
altsyncram_component.wren_a = wren;
altsyncram_component.clock0 = clock;
altsyncram_component.address_
altsyncram_component.data_a[7.
END;
Значения параметра INIT_FILE "Rom.mif" и "Ram.mif" указывают на файлы инициализации памяти (контент модулей памяти).
4 Тестирование ЦВУ
4.1 Компиляция и верификация проекта в среде Quartus II
В приложении Б приведено AHDL-описание ЦВУ верхнего иерархического уровня, сформированное в соответствие с функциональной схемой.
ЦВУ должно выполнять программу, хранящуюся в ПЗУ. Загрузочный код программы необходимо сформировать в виде файла ROM.mif. Вариант тестовой программы для ЦВУ включает циклическое выполнение семи команд:
DEPTH = 128% Memory depth and width are required %
WIDTH = 12; % Enter a decimal number %
ADDRESS_RADIX = HEX; % Address and value radixes are optional %
DATA_RADIX = HEX;
CONTENT
BEGIN
00 : 000; % mov w,M(0) %
01 : 600; % inc %
02 : A01; % mov M(1),w %
03 : 400; % shr %
04 : 301; % xor M(1) %
05 : A02; % mov M(2),w %
06 : 800; % in %
07 : C00; % out %
08 : E00; % jmp 0 %
[09..7F]: 000;
END ;
Чтобы на стадии компиляции выполнить загрузку данных в ячейки ОЗУ, необходимо сформировать файл загрузки RAM.mif:
DEPTH = 128
WIDTH = 8;
ADDRESS_RADIX=HEX;
DATA_RADIX=HEX;
CONTENT
BEGIN
00 : FB; % %
[02..7F]: 00; % %
END;
Для данного варианта тестирования исполнение команд над заданными операндами должно привести к получению следующих результатов:
- 00 W ← FB;
- 01 W ← FC;
- 02 W ← FC;
- 03 W ← 7E;
- 04 W ← 82;
- 05 RAM(2) ← 82; ZF;
- 06 W ← EC;
- 07 OUT ← EC;
- 08 переход на 00.
Для проверки правильности работы ЦВУ при выполнении тестовой программы выполняем анализ его работы методом имитационного моделирования в среде симулятора системы Quartus II с помощью сигнального редактора (Waveform Editor).
Анализ результатов
Полученная оценка предельной частоты
синхронизации для ЦВУ
Рисунок 4.1
Рисунок 4.2
Список использованных источников
- Хлуденев А.В. Цифровое вычислительное устройство: Методические указания. – Оренбург: ГОУ ОГУ, 2005. - 67 с.
- Грушвицкий Р.И., Мурсаев А.Х., Угрюмов Е.П. Проектирование систем на микросхемах программируемой логики. – С-П.: БХВ-Петербург, 2002. - 606 с.
Приложение А
(обязательное)
Схема электрическая функциональная
Приложение Б
(обязательное)
AHDL-описание ЦВУ
INCLUDE "rg.inc";
INCLUDE "rg2.inc";
INCLUDE "alu.inc";
INCLUDE "pctr.inc";
INCLUDE "ROM.inc";
INCLUDE "RAM.inc";
INCLUDE "mux2_1.inc";
INCLUDE "co.inc";
SUBDESIGN CPU
(
Clk :input;
res_b :input;
IPORT[7..0] :input;
OPORT[7..0] :output;
W[7..0] :output;
DROM[11..0] :output;
DRAM[7..0] :output;
PC[7..0] :output;
COP[3..0] :output
Y[5..1] :output;
VARIABLE
W[7..0] :node;
DROM[11..0] :node;
DRAM[7..0] :node;
PC[7..0] :node;
MALU[7..0], DALU[7..0], RES[7..0]:node;
cout,z :node;
COP[3..0] :DFFE;
Flags[1..0] :node;
Y[5..1] :node;
ARg[7..0] :node;
BEGIN
%-----------------------------
MALU[] = mux2_1(.A[]=DRAM[7..0],.B[]=
DALU[] = mux2_1(.A[]=DROM[7..0],.B[]=
(RES[],z,cout) = ALU(.W[]=W[],.DATA[]=MALU[],.
ARg[] = Rg(.D[]=RES[7..0],.LD=y3&COP[
W[] = Rg(.D[]=RES[7..0],.LD=y2,.C=
Flags[] = Rg2(.D[]=(z,cout),.LD=y2&(COP[
%-----------------------------
OPORT[] = Rg(.D[]=W[7..0],.LD=y5,.C=clk) with (WIDTH=8);
%-----------------------------
PC[] = Pctr(.C=clk,.R=!res_b,.EN=y1,.
%-----------------------------
DROM[11..0]=ROM(.address[7..0]
COP[3..0].(clk,ena) = (clk,y1);
COP[3..0].d = DROM[11..8];
%-----------------------------
DRAM[]= RAM(.data[7..0]=W[],
.wren=y3&!COP[0],
.address[7..0]=DROM[7..0],
.clock=clk);
%-----------------------------
(y[5..1]) = co(.C=!CLK,.RST=res_b,.en=vcc %bt_clk%,.coper[]=cop[3..1]);
END;
Приложение В
(обязательное)
Схема электрическая принципиальная
ГОУ ОГУ 230101.65.6511.5 Э2 | |||||||||||
ЦВУ Схема электрическая принципиальная |
Литера |
Масса |
Масштаб | ||||||||
Изм |
Лист |
№ докум. |
Подп. |
Дата |
|||||||
Разраб. |
Резанов И.И. |
||||||||||
Пров. |
Хлуденев А.В. |
||||||||||
Т.Контр. |
Лист 1 |
Листов 1 | |||||||||
ФИТ 08ВМК1 | |||||||||||
Н.Контр. |
|||||||||||
Утв. |
|||||||||||
ГОУ ОГУ 230101.65.6011.5 ПЗ | ||||||||||
Изм |
Лист |
№ докум. |
Подп. |
Дата | ||||||
Разраб. |
Резанов И.И. |
Цифровое вычислительное устройство Пояснительная записка |
Лит. |
Лист |
Листов | |||||
Пров. |
Хлуденёв А.В. |
|||||||||
ФИТ 08ВМК1 | ||||||||||
Н.контр. |
||||||||||
Утв. |
||||||||||
Лист |
ГОУ ОГУ 230101.65.6511.5 Э2 | |||||||||||
ЦВУ Схема электрическая функциональная |
Литера |
Масса |
Масштаб | ||||||||
Изм |
Лист |
№ докум. |
Подп. |
Дата |
|||||||
Разраб. |
Резанов И.И. |
||||||||||
Пров. |
Хлуденев А.В. |
||||||||||
Т.Контр. |
Лист 1 |
Листов 1 | |||||||||
ФИТ 08ВМК1 | |||||||||||
Н.Контр. |
|||||||||||
Утв. |
|||||||||||
Лист |