Автор работы: Пользователь скрыл имя, 02 Июля 2013 в 14:26, курсовая работа
Примем, что будет использована архитектура аккумуляторного типа, то есть один из операндов в двуместных операциях будет находиться в аккумуляторе W. Второй из операндов может находиться в регистре косвенного адреса (в операциях с косвенной адресацией) или находиться в регистре общего назначения (в операциях с регистровой адресацией). Результаты операций сохраняются в аккумуляторе.
Дополним заданный набор операций следующими:
mov W, RAM(Adr) – загрузка в аккумулятор операнда, находящегося в ОЗУ по адресу FSR[7..0] (Косвенная адресация);
mov W, GPR(Adr) – загрузка в аккумулятор операнда из банка регистров общего назначения по адресу Adr[1..0] (регистровая адресация);
mov RAM(Adr), W – запись содержимого аккумулятора в ОЗУ по адресу FSR[6..0] (Косвенная адресация).
1 Система команд…………………………………………………………………..5
2 Структура ЦВУ…………………………………………………………………...7
3 Разработка основных функциональных блоков и узлов……………………….8
4 Тестирование ЦВУ………………………………………………………………15
Список использованных источников ……
Таблица 3 – Режимы работы регистра
Режим работы |
С |
LD |
Q+[ Width-1..0] |
Загрузка |
|
1 |
D[Width-1..0] |
Хранение |
x |
0 |
Q[Width-1..0] |
Соответствующее AHDL-описание регистра Rg:
SUBDESIGN rg
(
d[15..0],ld,c : INPUT;
q[15..0] : OUTPUT;
)
VARIABLE
q[15..0] : DFFE;
BEGIN
q[].(clk, ena) = (c, ld);
q[] = d[];
END;
3.4 Программный счетчик
Для ЦВУ необходим программный счетчик PCtr с возможностью загрузки адреса команды. Режимы работы программного счетчика с загрузкой приведены в таблице 4.
Таблица 4 – Режимы работы счетчика
Режим работы |
С |
LD |
CE |
Q+[ Width-1..0] |
Загрузка |
|
1 |
x |
D[Width-1..0] |
Инкремент |
|
0 |
1 |
Q[Width-1..1] + 1 |
Хранение |
х |
0 |
0 |
Q[Width-1..0] |
Соответствующее AHDL-описание модуля PCtr:
SUBDESIGN PCTR
(
c,en,ld,res,d[6..0]:input;
ctr[6..0]:output;
)
VARIABLE
ctr[6..0]:dffe;
begin
ctr[].(clk,ena,clrn)=(c,en#ld,
if ld then
ctr[].d=d[6..0];
else
if en then
ctr[].d=ctr[].q+1;
end if;
end if;
end;
3.5 Мультиплексор и дешифратор
В составе банка регистров общего назначения используются двоичный дешифратор и мультиплексор.
Дешифратор формирует сигналы выборки для регистров банка по двухразрядному адресу регистра при наличии сигнала разрешения. Введем внутренние обозначения сигналов:
- входной код адреса - code[2..0];
- сигнал разрешения - en;
- выходные сигналы – out[7..0].
AHDL-описание дешифратора:
SUBDESIGN dc
(
code[2..0],en : input;
out[7..0] : output;
)
BEGIN
out[0] = !code[2] & !code[1] & !code[0] & en;
out[1] = !code[2] & !code[1] & code[0] & en;
out[2] = !code[2] & code[1] & !code[0] & en;
out[3] = !code[2] & code[1] & code[0] & en;
END;
Мультиплексор «8 в 1» передает данные с одного из регистров банка на выход. Введем внутренние обозначения сигналов:
- входной код адреса - sel[2..0];
- водные сигналы
- A[15..0],B[15..0],C[15..0],D[
G[15..0],H[15..0]:
- выходной сигнал - Y[15..0].
AHDL-описание модуля mux_8:
SUBDESIGN mux_8
(
A[15..0],B[15..0],C[15..0],D[
sel[2..0] : input;
Y[15..0] : output;
)
BEGIN
case sel[] is
when 0 => Y[]=A[];
when 1 => Y[]=B[];
when 2 => Y[]=C[];
when 3 => Y[]=D[];
end case;
END;
3.6 Модули памяти
Модули ОЗУ данных и ПЗУ программ реализуем на основе библиотечной параметризируемой мегафункции altsyncram. Настройка мегафункции выполнена средствами инструмента MegaWizard Plug-In Manager инструментальной системы Qartus II. Полученное описание ПЗУ емкостью 256х12 на языке AHDL:
INCLUDE "altsyncram.inc";
SUBDESIGN ROM
(
address[6..0] : INPUT;
clken : INPUT;
clock : INPUT;
q[10..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 = 256,
OPERATION_MODE = "ROM",
OUTDATA_ACLR_A = "NONE",
OUTDATA_REG_A = "UNREGISTERED",
WIDTHAD_A = 7,
WIDTH_A = 11,
WIDTH_BYTEENA_A = 1
);
BEGIN
q[10..0] = altsyncram_component.q_a[10..
altsyncram_component.clocken0 = clken;
altsyncram_component.clock0 = clock;
altsyncram_component.address_
END;
Полученное описание синхронного ОЗУ емкостью 128х16 на языке AHDL:
INCLUDE "altsyncram.inc";
SUBDESIGN ROM
(
address[6..0] : INPUT;
clken : INPUT;
clock : INPUT;
q[10..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 = 258,
OPERATION_MODE = "ROM",
OUTDATA_ACLR_A = "NONE",
OUTDATA_REG_A = "UNREGISTERED",
WIDTHAD_A = 7,
WIDTH_A = 11,
WIDTH_BYTEENA_A = 1
);
BEGIN
q[10..0] = altsyncram_component.q_a[10..
altsyncram_component.clocken0 = clken;
altsyncram_component.clock0 = clock;
altsyncram_component.address_
END;
Значения параметра INIT_FILE "Rom.mif" и "Ram.mif" указывают на файлы инициализации памяти (контент модулей памяти).
Список использованных источников
Приложение А
(обязательное)
Схема электрическая функциональная
Приложение Б
(обязательное)
AHDL-описание ЦВУ
INCLUDE "co.inc";
INCLUDE "alu.inc";
INCLUDE "rg.inc";
INCLUDE "PCTR.inc";
INCLUDE "ROM.inc";
INCLUDE "RAM.inc";
INCLUDE "mux_8.inc";
INCLUDE "dc.inc";
SUBDESIGN CVU
(
clk : INPUT;
res_b : INPUT;
PC[6..0] : OUTPUT;
DB_out[15..0] : OUTPUT;
AB_out[6..0] : OUTPUT;
W[15..0] : OUTPUT;
ZFF : OUTPUT;
y[7..0] : OUTPUT;
CFF : OUTPUT;
DROM[10..0] : OUTPUT;
COP[3..0] : OUTPUT;
RES[15..0] : OUTPUT;
GPR[15..0] : OUTPUT;
FSR[6..0] : OUTPUT;
)
VARIABLE
W[15..0] : NODE;
PC[6..0] : NODE;
DB[15..0] : Tri_State_node;
AB[6..0] : Tri_State_node;
y[7..0] : NODE;
DROM[10..0] : NODE;
DRAM[15..0] : NODE;
RES[15..0] : NODE;
cout, z : NODE;
COP[3..0] : DFFE;
CFF,ZFF : DFFE;
A[15..0],B[15..0],C[15..0],D[
dcr[7..0] : NODE;
FSR[6..0] : DFFE;
GPR[15..0] : NODE;
BEGIN
---------------------------
dcr[] = dc(.code[]=AB[2..0],.en=(y3 & cop[0]));
A[] = rg(.d[]=W[],.ld=dcr[0],.c=clk)
B[] = rg(.d[]=W[],.ld=dcr[1],.c=clk)
C[] = rg(.d[]=W[],.ld=dcr[2],.c=clk)
D[] = rg(.d[]=W[],.ld=dcr[3],.c=clk)
E[] = rg(.d[]=W[],.ld=dcr[4],.c=clk)
F[] = rg(.d[]=W[],.ld=dcr[5],.c=clk)
G[] = rg(.d[]=W[],.ld=dcr[6],.c=clk)
H[] = rg(.d[]=W[],.ld=dcr[7],.c=clk)
GPR[] = mux_8(.A[]=A[],.B[]=B[],.C[]=
for i in 0 to 15 generate
DB[i] = Tri(GPR[i],y[2]&cop[0]);
end generate;
---------------------------
FSR[6..0].(ena,clk) = (y[4],clk);
FSR[6..0].d = AB[6..0];
%-----------------------------
(RES[],z,cout) = alu(.W[]=W[],.DATA[]=DB[],.c=
W[] = Rg(.D[]=RES[],.LD=y[2],.C=!
for i in 0 to 15 generate
DB[i] = Tri(W[i],y[3]);
end generate;
CFF.(d,ena,clk) = (cout,y[2]&(COP[2]#COP[1]),
ZFF.(d,ena,clk) = (z,y[2]&(COP[2]#COP[1]),clk);
%-----------------------------
PC[] = Pctr(.c=clk,.res=!res_b,.ld=y[
for i in 0 to 6 generate
AB[i] = Tri(PC[i],y[7]);
end generate;
%-----------------------------
DROM[10..0]=ROM(.address[]=AB[
for i in 0 to 3 generate
DB[i] = Tri(DROM[i+7],y[1]);
end generate;
for i in 0 to 6 generate
AB[i] = Tri(DROM[i],y[4]#y[5]);
end generate;
for i in 0 to 2 generate
AB[i] = Tri(DROM[i],COP[0]&y[2]#y3&
end generate;
COP[3..0].(clk,ena) = (clk,y[1]);
COP[3..0].d = DB[3..0];
%-----------------------------
DRAM[]= RAM(.data[]=DB[],
.clken=y[2]#y[3]&!COP[0],
.wren=y3&!COP[0],
.address[]=FSR[],
.clock=clk);
for i in 0 to 15 generate
DB[i] = Tri(DRAM[i],!COP[0]&y[2]);
end generate;
%---------------------------- Control State Machine -----------------------------%
(y[7..0]) = co(.C=!CLK,.RST=res_b,.en=vcc %bt_clk%,.cop[]=cop[3..0],.ZF=
DB_out[] = DB[];
AB_out[] = AB[];
END;
Приложение В
(обязательное)
Схема электрическая принципиальная
ГОУ ОГУ 230101.65.6011.19 ПЗ | ||||||||||
Изм |
Лист |
№ докум. |
Подп. |
Дата | ||||||
Разраб. |
Кравцун Д.Д. |
Цифровое вычислительное устройство Пояснительная записка |
Лит. |
Лист |
Листов | |||||
Пров. |
Хлуденёв А.В. |
|||||||||
ФИТ _____ | ||||||||||
Н.контр. |
||||||||||
Утв. |
Лист |
ГОУ ОГУ 230101.65.6512.10 Э2 | |||||||||||
ЦВУ Схема электрическая функциональная |
Литера |
Масса |
Масштаб | ||||||||
Изм |
Лист |
№ докум. |
Подп. |
Дата |
|||||||
Разраб. |
Кравцун Д.Д. |
||||||||||
Пров. |
Хлуденев А.В. |
||||||||||
Т.Контр. |
Лист 1 |
Листов 1 | |||||||||
ФИТ _________ | |||||||||||
Н.Контр. |
|||||||||||
Утв. |
Лист |
ГОУ ОГУ 230101.65.6512.10 Э3 | |||||||||||
ЦВУ Схема электрическая принципиальная |
Литера |
Масса |
Масштаб | ||||||||
Изм |
Лист |
№ докум. |
Подп. |
Дата |
|||||||
Разраб. |
Хабибуллов А. |
||||||||||
Пров. |
Хлуденев А.В. |
||||||||||
Т.Контр. |
Лист 1 |
Листов 1 | |||||||||
ФИТ ________ | |||||||||||
Н.Контр. |
|||||||||||
Утв. |
Лист |