Цифровое вычислительное устройство

Автор работы: Пользователь скрыл имя, 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
Список использованных источников ……

Содержимое работы - 1 файл

111.docx

— 768.18 Кб (Скачать файл)

 

 

 

Таблица 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,!res);

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[15..0],E[15..0],F[15..0],

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[15..0],E[15..0],F[15..0],G[15..0],H[15..0]: input;

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..0];

altsyncram_component.clocken0 = clken;

altsyncram_component.clock0 = clock;

altsyncram_component.address_a[6..0] = address[6..0];

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..0];

altsyncram_component.clocken0 = clken;

altsyncram_component.clock0 = clock;

altsyncram_component.address_a[6..0] = address[6..0];

END;

Значения параметра  INIT_FILE "Rom.mif" и "Ram.mif" указывают на файлы инициализации памяти (контент модулей памяти).

 

 

 

 

Список  использованных источников

  1. Хлуденев А.В. Цифровое вычислительное устройство: Методические указания. – Оренбург: ГОУ ОГУ, 2005. - 67 с.
  2. Грушвицкий Р.И., Мурсаев А.Х., Угрюмов Е.П. Проектирование систем на микросхемах программируемой логики. – С-П.: БХВ-Петербург, 2002. - 606 с.

 

Приложение  А

(обязательное)

Схема электрическая функциональная

 

 

Приложение  Б

(обязательное)

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[15..0],E[15..0],F[15..0],G[15..0],H[15..0]: NODE;

dcr[7..0]  : NODE;

FSR[6..0]  : DFFE;

GPR[15..0]  : NODE;

 

 

BEGIN

---------------------------GPR--------------------------------------------

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[]=C[],.D[]=D[],.E[]=E[],.F[]=F[],.G[]=G[],.H[]=H[],.sel[]=AB[2..0]);

for i in 0 to 15 generate

DB[i] = Tri(GPR[i],y[2]&cop[0]);

end generate;

 

---------------------------FSR--------------------------------------------

FSR[6..0].(ena,clk) = (y[4],clk);

FSR[6..0].d = AB[6..0];

%------------------------------------- OU ---------------------------------------%

(RES[],z,cout) = alu(.W[]=W[],.DATA[]=DB[],.c=CFF,.COP[]=COP[2..1]);

W[] = Rg(.D[]=RES[],.LD=y[2],.C=!clk);

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]),clk);

ZFF.(d,ena,clk) = (z,y[2]&(COP[2]#COP[1]),clk);

 

%------------------------------- Program counter --------------------------------%

PC[] = Pctr(.c=clk,.res=!res_b,.ld=y[5],.d[]=AB[],.en=y[0]);

for i in 0 to 6 generate

AB[i] = Tri(PC[i],y[7]);

end generate;

%----------------------------------- ROM & IR -----------------------------------%

DROM[10..0]=ROM(.address[]=AB[],.clken=y[7],.clock=clk);

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&cop[0]);

end generate;

COP[3..0].(clk,ena) = (clk,y[1]);

COP[3..0].d = DB[3..0];

%------------------------------------ RAM ---------------------------------------%

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=ZFF,.CF=CFF);

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

         

ФИТ  ________

Н.Контр.

     

Утв.

     


 


Лист

 




Информация о работе Цифровое вычислительное устройство