Реферат по предмету "Информатика, программирование"


Моделирование процессора (операционного и управляющего автоматов) для выполнения набора машинных команд

Введение
В данной работе будет разработана структурная схема процессора(операционного и управляющего автоматов) для выполнения набора машинных команд.Необходимо создать описание процессора на языке VHDL и провести тестирование.Управляющий автомат должен представлять собой устройство с хранимыми в памятимикропрограммами управления ходом выполнения машинных команд.
ЭВМс хранимой программой (stored program electronic computer) может быть определена какмашина, обрабатывающая данные в соответствии с заранее определенными правилами(инструкциями); при этом программа (набор инструкций) и данные находятся впамяти машины. Для загрузки программы и данных в память, а также для выводарезультатов обработки из памяти необходим какой-либо способ связи с внешнимиобъектами. Этой цели служат устройства ввода-вывода.
Устройствоуправления ЭВМ управляет работой всей машины в целом. Оно принимает управляющуюинформацию от памяти, о том, какие действия надо осуществить и где в памятирасположены данные, над которыми должны производиться эти действия. После тогокак устройство управления определит, какую именно команду необходимо исполнить,оно выдает управляющие сигналы, позволяющие открыть и закрыть соответствующиевентили по всей системе, в результате чего данные, представленные в видеэлектрических сигналов, смогут поступать от одного функционального устройства кдругому в процессе исполнения операции, заданной выбранной командой. Как толькоALU заканчивает выполнять свою часть в данной операции, устройство управления можетвыдать необходимую управляющую информацию, разрешающую передачу результатовобратно в память или направляющую эти результаты к какому-нибудь устройствувывода; это делается для того, чтобы зафиксировать результаты на другомносителе, например на диске. В конце исполнения команды устройство управления заставляетмашину выбрать и декодировать следующую команду.
Такимобразом, каждой машиной управляют последовательности команд программы,написанной для решения конкретной задачи. Каждая из этих команд представляетсобой простое обращение к устройству управления, сделанное для того, чтобыпривести в действие встроенные в машину функциональные узлы (сумматор, регистры,счетчики), а также открыть и закрыть определенные вентили в цепях передачиданных; коммутация этих вентилей позволяет вводить в элементарныеарифметические и логические функциональные узлы требуемые операнды, причем вводих осуществляется в определенном порядке и в рамках определеннойпоследовательности машинных циклов.
Устройствоуправления данного процессора необходимо построить на программируемой логике.Конкретизировав задачу, определим, что необходимо выбрать схему процессора, исхему управляющего устройства. В данной работе будет использована схемапроцессора с одной магистралью.

1. Анализ задания и разработка структурной (функциональной) схемыпроцессора
Разработать структурную схему процессора (операционного иуправляющего автоматов) для выполнения набора машинных команд. Создать описаниепроцессора на языке VHDL, провести тестирование.
Управляющий автомат должен представлять собой устройство схранимыми в памяти микропрограммами управления ходом выполнения машинныхкоманд.
Использовать одномагистральную структуру.
Микропрограммный автомат с одним полем адреса.
Реализовать следующие команды для исполнения в системе:
1. MOV A, #d; Загрузка в аккумулятор константы
2. MOV Rn, #d; Загрузка в регистр константы
3. ADD A, Rn; Операция сложения содержимого аккумулятора и
содержимого регистра
4. JBС bit, rel; Условный переход на адрес
Примечание:
– обозначения команд процессора соответствуют мнемокодамязыка ассемблера МК51.
– команды, могут размещаться в памяти в любойпоследовательности;
– константа #d размещается в следующем по порядку байте послекоманды;
– n – номер регистра 0, 1, 2, 3.
Структурнаясхема процессора показана на рис. 1. Из этих команд видно, что процессордолжен содержать регистр-аккумулятор, регистр результата и регистры общегоназначения, арифметическое устройство, память микропрограмм и различныевспомогательные устройства для выборки соответствующих микроопераций, а так жерегистр на 1 бит для выполнения команды «JBC bit, rel», в данном случае врегистр заносится значение флага FC, установка которого в лог. 1 соответствуетпереполнению разрядной сетки, при выполнении операции сложения.
Процессорбудет содержать четыре регистра общего назначения R0-R3. При этом необходимобудет выбирать номер регистра, именно к которому мы хотим обратиться.
Принимаем,что процессор восьмиразрядный, т.е. обрабатывает слова размером в восемь бит.Соответственно адреса и данные будут восьмиразрядные, передаваемые по однойтакже восьмиразрядной шине.
2. Общее описание принципа работы процессора
Данныйпроцессор с одномагистральной структурой выполняет указанный в задании наборкоманд.
В даннойработе моделируется устройство, содержащую одну общую шину адреса и данных.
Недостаткомтакой схемы является низкая, по сравнению с многошинными процессорами,производительность, так как и для адресации и для передачи данных используетсяединственная шина.
Блок «Память»содержит последовательность команд и данных, которые необходимо реализовать.Выполнение других команд на данном процессоре без незначительных доработокбудет невозможно.
Выборкакоманд из памяти производится следующим образом: адрес команды, содержащийся впрограммном счетчике адреса, записывается в регистр адреса, а затем выдается наадресные входы блока памяти, что сопровождается выдачей управляющим устройствомсигнала чтения из памяти. Данные из памяти считываются в буферный регистр.После того, как выбранная из памяти команда попадает в буферный регистр, онавыдается на внутрипроцессорную шину, откуда она записывается в регистр команд IR. На этом выборка командызаканчивается.
Послеокончания фазы извлечения команды начинается фаза интерпретации команды. Взависимости от команды эта фаза может представлять собой, например, извлечениеиз памяти константы, необходимой для выполнения команды или извлечение изпамяти номера регистра. В конце этой фазы процессор готов к выполнению команды.На этом начинается фаза выполнения. Фаза извлечения данных из памятиприсутствует у команды занесения данных в аккумулятор, в регистры общегоназначения, а также при переходе на адрес.
3. Временные диаграммы, описывающие выполнение микроопераций длякаждой команды
Пронумеруем операции процессора:Код операции Команда
Mov A,#d 1
Mov Rn,#d 1
ADD Rn, A 1
JBC bit, rel
Временная диаграмма микроопераций выполнения команды MOV A, #d:
/>

Временная диаграмма микроопераций выполнения команды MOV Rn, #d:
/>
Временная диаграмма микроопераций выполнения команды Add A, Rn:
/>
4. Содержательный алгоритм микропрограммы
Алгоритм выполнениякоманды в общем случае состоит из таких фаз:
1.        Выборкакоманды из памяти по соответствующему адресу
2.        Интерпретациякоманды (дешифрирование) и подача соответствующих управляющих сигналов
3.        Загрузкаданных
4.        Выполнениекоманды
5.        Подготовкак загрузке следующей команды
В случае сразрабатываемым процессором общий алгоритм выглядит следующим образом:
1.        Записьзначения программного счетчика в MAR (Memory Address Register).
2.        Передачасодержимого MAR на адресные входы памяти.
3.        Передачасигнала чтения и выбора микросхемы памяти.
4.        Записьданных из памяти в MBR (Memory Buffer Register).
5.        Передачасодержимого MBR на шину данных процессора и запись его в регистр команд IR (Instruction Register).
6.        Выбориз памяти команд необходимой команды
7.        Увеличениезначения программного счётчика
8.        Записьзначения программного счетчика в MAR (Memory Address Register).
9.        Выдачасодержимого MAR на адресные входы памяти.
10.     Выдачасигнала чтения и выбора микросхемы памяти.
11.     Записьданных из памяти в MBR (Memory Buffer Register).
12.     Выдачасодержимого MBR на шину данных процессора.
13.     Есликоманда mov, то запись значения с шины данных в аккумулятор или в один изрегистров общего назначения, увеличение программного счётчика и переход кпункту 1.
14.     Есликоманда ADD или SUB, то выводим на шину данных значение из выбранного ранее регистраобщего назначения, затем подаём на АЛУ сигнал сложения либо умножения, этидействия происходят над данными из аккумулятора и данными с шины. Результатзаносится в регистр результата, а затем с регистра результата переписывается ваккумулятор. Увеличение программного счётчика и переход к пункту 1.
15.     Есликоманда JBC, то проверяется содержимое однобитного регистра, если оно равноединице, то происходит переход по адресу rel и регистр сбрасывается в ноль.
5. Синтез управляющего автомата на памяти с одним полем адреса
Структурная схема управляющего автомата на основе памяти с однимполем адреса показана на рис. 2.
/>
Рис. 2. Структурная схема управляющего автомата на основе памятис одним полем адреса
Следуетопределить набор управляющих сигналов, вырабатываемых устройством управления.Во-первых, это сигналы разрешения записи в регистры MAR, MBR, R0-R1, RzIn, IRIn. Во-вторых – сигналывыдачи содержимого регистров MAR, MBR, R0-R1 и Z. Кроме того – сигнал чтения из памяти, сигнал увеличениясодержимого программного счетчика и сигнал выбора операции АЛУ. Ниже приведенполный список этих сигналов:
Instr0 – сигналы управленияавтоматом
Instr1
Instr2
ADR – адрес перехода
PCIn – сигнал загрузки врегистр команд
IncPC – увеличение значениясчётчика команд
IrIn – загрузка в регистринструкций
MarIn – загрузка в регистркоманд
RdWr – сигнал чтения-записипамяти
CS – сигнал выборамикросхемы памяти
MbrIn – загрузка в буферныйрегистр из памяти
MbrOut – выдача на шину избуферного регистра
MbrInD – загрузка в буферныйрегистр с шины
MbrOutD – выдача в память избуферного регистра       
RzIn – загрузка в регистррезультата
RzOut – вывод из регистрарезультата
Inv – инвертированиезначения подаваемого в АЛУ из аккумулятора
RAIn – загрузка в аккумулятор
RIn – сигнал загрузки врегистры общего назначения
ROut – сигнал вывода изрегистров общего назначения
RDCIn – сигнал загрузкизначения в мультиплексор номера регистра
SADD – сигнал сложения дляАЛУ
InvZ – инвертированиерезультата
6. Создание описания отдельных узлов процессора и всего процессорасредствами ActiveHDL
Описание счетчика Add:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_signed.all;
use IEEE.STD_LOGIC_arith.all;
entity Add is
port (SIn: in std_logic_vector (5 downto 0);
Inc: in std_logic;
Reset: in std_logic;
SOut: out std_logic_vector (5 downto 0));
end Add;
architecture Add of Add is
begin
process (Inc, reset)
begin
if Inc='1' and Inc'event then
SOut
end if;
if Reset='1'then Sout
end if;        
end process;
end Add;
Временнаядиаграмма работы счетчика Add для УУ:
/>
Описание ALU:
libraryIEEE;
useIEEE.STD_LOGIC_1164.all;
useIEEE.STD_LOGIC_signed.all;
useIEEE.std_logic_arith.all;
entityALU is
port(B: in std_logic_vector (7 downto 0);
A:in std_logic_vector (7 downto 0);
SADD:in std_logic;
CLK:in std_logic;
Q:out std_logic_vector (7 downto 0);
FC:out std_logic;
FZ:out std_logic);
endALU;
architectureALU of ALU is
signalrez: std_logic_vector (7 downto 0):= «00000000»;
begin
process(CLK)
begin         
ifCLK='0' and CLK'event then FC
ifSADD='1' then
Q
FC
elseQ
endif;
ifA= «00000000» then FZ
elseFZ
endif;
endif;
endprocess;
endALU;
Временнаядиаграмма работы устройства сложения ALU:
/>
Описаниесчетчика микрокоманд PC:
library IEEE;
useIEEE.STD_LOGIC_1164.all;
useIEEE.STD_LOGIC_signed.all;
entityPC is
port(RST: in std_logic;
CLK:in std_logic;
PCIn:in std_logic;
IncPC:in std_logic;
AdrIn:in std_logic_vector (7 downto 0);
AdrOut:out std_logic_vector (7 downto 0));
endPC;
architecturePC of PC is
signalreg: std_logic_vector (7 downto 0);
begin
process(CLK, RST)
begin
IfCLK='0' and CLK'event and PCIn='1' then    reg
endif;
IfCLK='0' and CLK'event and IncPC='1' then reg
endif;
IfCLK='1' and CLK'event then       AdrOut
endif;
if      RST='1' then reg
endif;
endprocess;
endPC;
Временнаядиаграмма работы счетчика микрокоманд PC:
/>
Описаниерегистров РОН и их выбора:
libraryIEEE;
useIEEE.STD_LOGIC_1164.all;
entityR0 is
port(RST: in std_logic;
CLK:in std_logic;
C:in std_logic;
RIn:in std_logic;
ROut:in std_logic;
DataIn:in std_logic_vector (7 downto 0);
DataOut:out std_logic_vector (7 downto 0));
endR0;
architectureR0 of R0 is
signalregist: std_logic_vector (7 downto 0);
begin
process(CLK, RST)
begin
ifCLK='0' and CLK'event and RIn='1'and C='1' then regist
endif;
ifCLK='0' and CLK'event and ROut='1'and C='1' then        DataOut
endif;
ifCLK='0' and CLK'event and ROut='0' then DataOut
endif;
ifRST='1' then    regist
endif;
endprocess;
endR0;

libraryIEEE;
useIEEE.STD_LOGIC_1164.all;
entityRDC is
port(Number: in std_logic_vector (7 downto 0);
RDCIn:in std_logic;
R1:out std_logic;
R2:out std_logic;
R3:out std_logic;
R4:out std_logic);
endRDC;
architectureRDC of RDC is
begin
process(RDCIn)
begin
ifRDCIn='1' and RDCIn'event then
R1
R2
R3
R4
ifNumber= «00000001» then R1
endif;
ifNumber= «00000010» then R2
endif;
ifNumber= «00000011» then R3
endif;
ifNumber= «00000100» then R4
endif;
endif;
endprocess;
end RDC;
Временнаядиаграмма работы выбора регистров РОН RDC:
/>
Описание памяти RAM:
libraryIEEE;
useIEEE.STD_LOGIC_1164.all;
useIEEE.STD_LOGIC_signed.all;
entityRAM is
port(RdWr: in std_logic;
CS:in std_logic;
Adr:in std_logic_vector (7 downto 0);
Data:inout std_logic_vector (7 downto 0));
endRAM;
architectureRAM of RAM is
typeMemoryType is array (0 to 8) of std_logic_vector (7 downto 0);
signalMemory: MemoryType:=(
«00000000»,– mov A,#d
«00110011»,–#d
«00000001»,– mov R,#d
«00000001»,– number R
«11110110»,–#d
«00000010»,– add A, Rn
«00000001»,– number R
«00000100»,– JBC bit, rel
«00000000»);– restart
begin        
process(RdWr, CS, Adr)
begin
ifRdWr='1' and CS='1' then  Data
endif;
ifRdWr='0' and CS='1' then Memory (CONV_INTEGER ('0'& Adr))
endif;
endprocess;
endRAM;
Описаниерегистра в один бит:
libraryIEEE;
useIEEE.STD_LOGIC_1164.all;
entityR_1bit is
port(reg_in, IE: in std_logic;
CLK,Zero:in std_logic;
reg_out:out std_logic);
endR_1bit;
architectureR_1bit of R_1bit is
signalregist: std_logic;
begin
process(CLK)
begin
reg_out
ifCLK='0' and CLK'event and IE='1' then regist
elsifZero='1' then regist
endif;
endprocess;        
endR_1bit;

Временнаядиаграмма работы памяти МПА RAM:
/>
Описаниерегистра-аккумулятора RA:
library IEEE;
useIEEE.STD_LOGIC_1164.all;
entityRA is
port(
CLK:in std_logic;
RAIn:in std_logic;
DIn:in std_logic_vector (7 downto 0);
DOut:out std_logic_vector (7 downto 0)
);
endRA;
architectureRA of RA is       
signalreg: std_logic_vector (7 downto 0):= «00000000»;
begin
process(CLK, RAIn)
begin
DOut
ifCLK='0' and CLK'event and RAIn='1' then
reg
endif;
endprocess;
end RA;
Временнаядиаграмма работы регистра-аккумулятора RA:
/>
Описание узла памяти Memory:
libraryIEEE;
useIEEE.STD_LOGIC_1164.all;
useIEEE.STD_LOGIC_signed.all;
entityMemory is
port(Adr: in std_logic_vector (5 downto 0);
RD:in std_logic; 
MrOut:out std_logic;
InstrCom:out std_logic_vector (0 to 27));
endMemory;
architectureMemory of Memory is
typeMemoryType is array (0 to 59) of std_logic_vector (0 to 27);
signalMemory: MemoryType;
begin
Memory(0)
Memory(1)
Memory(2)
Memory(3)
Memory(4)
Memory(5)
Memory(6)
– movA,#d
Memory(7)
Memory(8)
Memory(9)
Memory(10)
Memory(11)
Memory(12)
Memory(13)
– movRn,#d
Memory(14)
Memory(15)
Memory(16)
Memory(17)
Memory(18)
Memory(19)
Memory(20)
Memory(21)
Memory(22)
Memory(23)
Memory(24)
Memory(25)
Memory(26)
– addA, Rn
Memory(27)
Memory(28)
Memory(29)
Memory(30)
Memory(31)
Memory(32)
Memory(33)
Memory(34)
Memory(35)
Memory(36)
Memory(37)
Memory(38)
– JBC
Memory(51)
Memory(52)
Memory(53)
Memory(54)
Memory(55)
Memory(56)
Memory(57)
Memory(58)
Memory(59)
process(RD)
begin
ifRD='1' and RD'event then
InstrCom
MrOut
endif;
ifRD='0' and RD'event then  MrOut
endif;
endprocess;
endMemory;
Временнаядиаграмма работы памяти УУ Memory:
/>
VHDL – описание остальных элементов схемы (регистра CAR и регистра СBR, регистра инструкций,мультиплексора, декодера, простых логических элементов, регистров MAR и MBR):
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity CAR is
port (D: in std_logic_vector (5 downto 0);
CarIn: in std_logic;
CarOut: out std_logic;
Q: out std_logic_vector (5 downto 0));
end CAR;
architecture CAR of CAR is
begin
process(CarIn)
begin
if CarIn='0' and CarIn'event then
Q
CarOut
end if;
if CarIn='1' and CarIn'event then CarOut
end if;
end process;
end CAR;

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity CBR is
port (InstrCom: in std_logic_vector (0 to 27);
CbrIn: in std_logic;
Adr: out std_logic_vector (5 downto 0);
Instr0: out std_logic;
Instr1: out std_logic;
Instr2: out std_logic;
PCIn: out std_logic;
IncPC: out std_logic;
IrIn: out std_logic;
MarIn:out std_logic;
RdWr:out std_logic;
CS:out std_logic;
MbrIn:out std_logic;
MbrOut:out std_logic;
MbrInD:out std_logic;
MbrOutD:out std_logic;        
RzIn:out std_logic;
RzOut:out std_logic;
Inv:out std_logic;
RAIn:out std_logic;
RIn:out std_logic;
ROut:out std_logic;
RDCIn:out std_logic;
SADD:out std_logic;
InvZ: out std_logic);
end CBR;
architecture CBR of CBR is
begin
process(CbrIN)
begin
if CbrIN='1' and CbrIN'event then
Instr0
Instr1
Instr2
ADR
PCIn
IncPC
IrIn
MarIn
RdWr
CS
MbrIn
MbrOut
MbrInD
MbrOutD
RzIn
RzOut
Inv
RAIn
RIn
ROut
RDCIn
SADD
InvZ
end if;
end process;
end CBR;

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity IR is
port (Command: in std_logic_vector (7 downto 0);
IRin: in std_logic;
Reset: in std_logic;
IrOut: out std_logic;
Com: out std_logic_vector (7 downto 0));
end IR;
architecture IR of IR is
begin
process (IrIn, Reset)
begin
if IrIn='1' and Irin'event then
Com
IrOut
end if;
if IrIn='0' and Irin'event then IrOut
end if;
if Reset='1' then
Com
IrOut
end if;        
end process;
end IR;

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity DC1 is
port (Ale:in std_logic;
Com: in std_logic_vector (7 downto 0);
ComAdr: out std_logic_vector (5 downto 0));
end DC1;
architecture DC1 of DC1 is
begin
process(Ale)
begin
if Ale='1' and Ale'event then
if Com= «00000000» then     ComAdr
elsif Com= «00000001» then ComAdr
elsif Com= «00000010» then ComAdr
elsif Com= «00000011» then ComAdr
elsif Com= «00000100» then ComAdr
else ComAdr
end if;
end if;
end process;
end DC1;

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity INV is
port (DIn: in std_logic_vector (7 downto 0);
Inv: in std_logic;
DOut: out std_logic_vector (7 downto 0));
end INV;
architecture INV of INV is
begin
DOut
end INV;

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity LogAnd is
port (in1: in std_logic;
in2: in std_logic;
Sout: out std_logic);
end LogAnd;
architecture LogAnd of LogAnd is
begin
Sout
end LogAnd;

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity LogOR is
port (in1: in std_logic;
in2: in std_logic;
SOut: out std_logic);
end LogOR;
architecture LogOR of LogOR is
begin
SOut
end LogOR;

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity MUX is
port (IN1: in std_logic_vector (5 downto 0);
IN2: in std_logic_vector (5 downto 0);
IN3: in std_logic_vector (5 downto 0);
Adr0: in std_logic;
Adr1: in std_logic;
CLK: in std_logic;
MuxOut: out std_logic;
OUT1: out std_logic_vector (5 downto 0));
end MUX;
architecture MUX of MUX is
begin
process(CLK)
begin
if CLK='1' and CLK'event then
if       Adr1='0' and Adr0='0' then OUT1
elsif   Adr1='1' then OUT1
elsif   Adr1='0' and Adr0='1' then OUT1
else Out1
end if;
MuxOut
end if;
if CLK='0' and CLK'event then MuxOut
end if;
end process;
end MUX;

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity MAR is
port (RST: in std_logic;
CLK: in std_logic;
MarIn: in std_logic;
AdrIn: in std_logic_vector (7 downto 0);
AdrOut: out std_logic_vector (7 downto 0));
end MAR;
architecture MAR of MAR is
signal reg: std_logic_vector (7 downto 0):= «00000000»;
begin
process (CLK, RST)
begin
if CLK='0' and CLK'event and MarIn='1' then reg
end if;
if CLK='1' and CLK'event then AdrOut
end if;
if RST='1' then    reg
end if;
end process;
end MAR;

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity MBR is
port (RST: in std_logic;
CLK: in std_logic;
MbrIn: in std_logic;
MbrOut: in std_logic;
MbrInD: in std_logic;
MbrOutD: in std_logic;
DataIn: inout std_logic_vector (7 downto 0);
DataOut: inout std_logic_vector (7 downto 0));
end MBR;
architecture MBR of MBR is
signal reg: std_logic_vector (7 downto 0);
begin
Process (CLK, RST)
begin
if CLK='0' and CLK'event then
if MbrIn='1' then reg
elsif MbrOut='1' then DataOut
elsif MbrInD='1' then reg
elsif MbrOutD='1' then DataIn
end if;
if MbrIn='0' and MbrOutD='0' then DataIn
end if;
if MbrOut='0' and MbrInD='0' then DataOut
end if;
end if;
if RST='1' then    reg
end if;
end process;
end MBR;

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity RZ is
port (DIn: in std_logic_vector (7 downto 0);
CLK: in std_logic;
RST: in std_logic;
RZOut: in std_logic;
RZIn: in std_logic;
InvZ: in std_logic;
DOut: out std_logic_vector (7 downto 0));
end RZ;
architecture RZ of RZ is
signal regist: std_logic_vector (7 downto 0);
begin
process (CLK, RST)
begin
if CLK='0' and CLK'event and RZIn='1' then regist
end if;
if CLK='0' and CLK'event and RZOut='1' then
if InvZ='1'then     DOut
else DOut
end if;
end if;
if CLK='0' and CLK'event and RZOut='0' then  DOut
end if;
if RST='1' then    regist
end if;
end process;        
end RZ;

7. Тестирование процессора и подтверждение правильности его работыс помощью временных диаграмм
Описание процессора на языке Active VHDL:
library IEEE;
use IEEE.std_logic_1164.all;
entity MPA is
port (CLK: in STD_LOGIC;
Reset: in std_logic;
FC, bit_out: out std_logic;
DataBus: inout std_logic_vector (7 downto 0));
end MPA;
architecture MPA of MPA is

component Add
port (Inc: in STD_LOGIC;
Reset: in STD_LOGIC;
SIn: in std_logic_vector (5 downto 0);
SOut: out std_logic_vector (5 downto 0));
end component;

component ALU
port (A: in std_logic_vector (7 downto 0);
B: in std_logic_vector (7 downto 0);
CLK: in std_logic;
SADD: in std_logic;
FC: out std_logic;
FZ: out std_logic;
Q: out std_logic_vector (7 downto 0));
end component;

component CAR
port (CarIn: in std_logic;
D: in std_logic_vector (5 downto 0);
CarOut: out STD_LOGIC;
Q: out std_logic_vector (5 downto 0));
end component;

component CBR
port (CbrIn: in std_logic;
InstrCom: in std_logic_vector (0 to 27);
Adr: out std_logic_vector (5 downto 0);
CS: out STD_LOGIC;
IncPC: out STD_LOGIC;
Instr0: out std_logic;
Instr1: out std_logic;
Instr2: out std_logic;
Inv: out STD_LOGIC;
InvZ: out STD_LOGIC;
IrIn: out std_logic;
MarIn: out STD_LOGIC;
MbrIn: out STD_LOGIC;
MbrInD: out STD_LOGIC;
MbrOut: out STD_LOGIC;
MbrOutD: out STD_LOGIC;
PCin: out STD_LOGIC;
RAIn: out STD_LOGIC;
RDCIn: out STD_LOGIC;
RIn: out STD_LOGIC;
ROut: out STD_LOGIC;
RdWr: out STD_LOGIC;
RzIn: out STD_LOGIC;
RzOut: out STD_LOGIC;
SADD: out STD_LOGIC);
end component;

component DC1
port (Ale: in STD_LOGIC;
Com: in std_logic_vector (7 downto 0);
ComAdr: out std_logic_vector (5 downto 0));
end component;

component INV
port (DIn: in std_logic_vector (7 downto 0);
Inv: in std_logic;
DOut: out std_logic_vector (7 downto 0));
end component;

component IR
port (Command: in std_logic_vector (7 downto 0);
IRin: in std_logic;
Reset: in std_logic;
Com: out std_logic_vector (7 downto 0);
IrOut: out STD_LOGIC);
end component;

component LogAnd
port (in1: in std_logic;
in2: in std_logic;
Sout: out std_logic);
end component;

component LogOR
port (in1: in std_logic;
in2: in std_logic;
SOut: out std_logic);
end component;

component MAR
port (AdrIn: in std_logic_vector (7 downto 0);
CLK: in std_logic;
MarIn: in std_logic;
RST: in std_logic;
AdrOut: out std_logic_vector (7 downto 0));
end component;

component MBR
port (CLK: in STD_LOGIC;
MbrIn: in STD_LOGIC;
MbrInD: in STD_LOGIC;
MbrOut: in STD_LOGIC;
MbrOutD: in STD_LOGIC;
RST: in STD_LOGIC;
DataIn: inout STD_LOGIC_VECTOR (7 downto 0);
DataOut: inout STD_LOGIC_VECTOR (7 downto 0));
end component;

component Memory
port (Adr: in std_logic_vector (5 downto 0);
RD: in std_logic;
InstrCom: out std_logic_vector (0 to 27);
MrOut: out STD_LOGIC);
end component;

component MUX
port (Adr0: in std_logic;
Adr1: in std_logic;
CLK: in STD_LOGIC;
IN1: in std_logic_vector (5 downto 0);
IN2: in std_logic_vector (5 downto 0);
IN3: in std_logic_vector (5 downto 0);
MuxOut: out STD_LOGIC;
OUT1: out std_logic_vector (5 downto 0));
end component;

component PC
port (AdrIn: in STD_LOGIC_VECTOR (7 downto 0);
CLK: in STD_LOGIC;
IncPC: in STD_LOGIC;
PCIn: in STD_LOGIC;
RST: in STD_LOGIC;
AdrOut: out STD_LOGIC_VECTOR (7 downto 0));
end component;

component R0
port (C: in STD_LOGIC;
CLK: in std_logic;
DataIn: in std_logic_vector (7 downto 0);
RIn: in std_logic;
ROut: in std_logic;
RST: in std_logic;
DataOut: out std_logic_vector (7 downto 0));
end component;

component RA
port (
CLK: in STD_LOGIC;
DIn: in std_logic_vector (7 downto 0);
RAIn: in std_logic;
DOut: out std_logic_vector (7 downto 0));
end component;

component RAM
port (Adr: in STD_LOGIC_VECTOR (7 downto 0);
CS: in STD_LOGIC;
RdWr: in STD_LOGIC;
Data: inout STD_LOGIC_VECTOR (7 downto 0));
end component;

component RDC
port (Number: in std_logic_vector (7 downto 0);
RDCIn: in std_logic;
R1: out std_logic;
R2: out std_logic;
R3: out std_logic;
R4: out std_logic);
end component;

component RZ
port (CLK: in STD_LOGIC;
DIn: in STD_LOGIC_VECTOR (7 downto 0);
InvZ: in STD_LOGIC;
RST: in STD_LOGIC;
RZIn: in STD_LOGIC;
RZOut: in STD_LOGIC;
DOut: out STD_LOGIC_VECTOR (7 downto 0));
end component;

component R_1bit is
port (reg_in, IE: in std_logic;
CLK, Zero:in std_logic;
reg_out: out std_logic);
end component;

signal CS, IncPC, IrIn, MarIn, MbrIn, MbrOut, JB: STD_LOGIC;
signal S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, SR1, SR2, SR3,SR4: STD_LOGIC;
signal N1, N2, N3, FC_sig, bit_outs: STD_LOGIC;
signal PCIN, RaIn, RDCIn, RdWr, RIn, ROut, RzIn, RzOut, SADD:STD_LOGIC;
signal Adr: std_logic_vector (7 downto 0);
signal BUS2, BUS6, BUS7, BUS8, BUS11: std_logic_vector (5downto 0);
signal BUS10: std_logic_vector (27 downto 0);
signal BUS0, BUS1, BUS3, BUS4, BUS5: std_logic_vector (7downto 0);
signal MemOut: STD_LOGIC_VECTOR (7 downto 0);

begin
DD0: IR port map (Com => BUS1, Command => DataBus, IRin=> IrIn, IrOut => S3,
Reset => Reset);
DD1: LogAnd port map (Sout => S5, in1 => bit_outs, in2=>S4);
DD2: MAR port map (AdrIn => BUS0, AdrOut => Adr, CLK=> CLK, MarIn => MarIn,
RST => Reset);
DD3: RAM port map (Adr => Adr, CS => CS, Data =>MemOut, RdWr => RdWr);
DD4: MBR port map (CLK => CLK, DataIn => MemOut,DataOut => DataBus,
MbrIn => MbrIn, MbrInD => S6, MbrOut => MbrOut,
MbrOutD => S7, RST => Reset);
DD5: R0 port map (C => SR1, CLK => CLK, DataIn =>DataBus, DataOut => DataBus,
RIn => RIn, ROut => ROut, RST => Reset);
DD6: R0 port map (C => SR2, CLK => CLK, DataIn =>DataBus, DataOut => DataBus,
RIn => RIn, ROut => ROut, RST => Reset);
DD7: R0 port map (C => SR3, CLK => CLK, DataIn =>DataBus, DataOut => DataBus,
RIn => RIn, ROut => ROut, RST => Reset);
DD8: R0 port map (C => SR4, CLK => CLK, DataIn =>DataBus, DataOut => DataBus,
RIn => RIn, ROut => ROut, RST => Reset);
DD9: RA port map (CLK => CLK, DIn => DataBus, DOut=> BUS3, RAIn => RaIn);
DD10: ALU port map (A => BUS4, B => DataBus, CLK =>CLK, FC => FC_sig, FZ => S1,
Q => BUS5, SADD => SADD);
DD11: DC1 port map (Ale => S3, Com => BUS1, ComAdr=> BUS2);
DD12: RZ port map (CLK => CLK, DIn => BUS5, DOut =>DataBus, InvZ => JB,
RST => Reset, RZIn => RzIn, RZOut => RzOut);
DD13: INV port map (DIn => BUS3, DOut => BUS4, Inv=> S2);
DD14: RDC port map (Number => DataBus, R1 => SR1, R2=> SR2, R3 => SR3,
R4 => SR4, RDCIn => RDCIn);
DD15: MUX port map (Adr0 => S9, Adr1 => S10, CLK =>CLK, IN1 => BUS11,
IN2 => BUS2, IN3 => BUS6, MuxOut => N2, OUT1 =>BUS7);
DD16: Add port map (Inc => N2, Reset => Reset, SIn=> BUS7, SOut => BUS11);
DD17: CAR port map (CarIn => CLK, CarOut => N3, D =>BUS7, Q => BUS8);
DD18: Memory port map (Adr => BUS8, InstrCom => BUS10, MrOut=> N1, RD => N3);
DD19: CBR port map (Adr => BUS6, CS => CS, CbrIn =>N1, IncPC => IncPC, Instr0 => S8,
Instr1 => S4, Instr2 => S10,  InstrCom => BUS10, Inv=> S2, InvZ => JB, IrIn => IrIn,
MarIn => MarIn, MbrIn => MbrIn, MbrInD => S6, MbrOut=> MbrOut, MbrOutD => S7,
PCin => PCIN, RAIn => RaIn, RDCIn => RDCIn, Rin=> RIn, ROut => ROut,
RdWr => RdWr,
RzIn => RzIn, RzOut => RzOut, SADD => SADD);
DD20: PC port map (AdrIn => DataBus, AdrOut => BUS0, CLK=> CLK, IncPC => IncPC,
PCIn => PCIN, RST => Reset);
DD21: LogOR port map (SOut => S9, in1 => S5, in2 =>S8);
DD22: R_1bit port map (CLK => CLK, reg_in =>FC_sig,reg_out => bit_outs, IE =>RzIn,
Zero=>S5);
FC
bit_out
end MPA;

Выводы
При выполнении работы было произведено моделирование процессора сустройством управления на основе памяти с одним полем адреса, имеющего рядспециальных регистров, а также четыре регистра общего назначения. Тестоваяпрограмма была успешно выполнена, что вполне свидетельствует о его корректнойработе.
Структурная схема, разработанная в этой работе, естественно, неявляется единственно возможной. Но на ее примере можно усвоить основныепринципы построения цифровых вычислительных систем, такие как микропрограммноеуправление, совместное использование шин процессора различными устройствами совсеми вытекающими отсюда требованиями к организации работы этих устройств:синхронизации, сингулярности передач информации и другими.
Данная схема обладает одной магистралью, она достаточно проста висполнении, хотя одномагистральная система не всегда позволяет простореализовать некоторые операции, а именно такая система занимает намного меньшеместа на печатной плате, чем двухмагистральная (и тем более трехмагистральная),что и дает ей преимущества при конструировании небольших устройств.
По диаграмме работы процессора видно, что выполнение команды JBC занимает в среднем 90 ns, команда сложениянемного больше 183 ns, команд пересылки – 140ns. Полное выполнение всех команд по очередипроизводится за 630 ns. Начальная задержка работы процессора с четом всех задержек навсех элементах составила всего 1 ns, что очень мало.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Внешняя и внутренняя среда организации. Мотивация труда
Реферат Философские вопросы математики
Реферат История, становление и развитие казначейской системы России
Реферат Культура Византии
Реферат Историческая тема в творчестве В.И. Сурикова
Реферат Расчет основных технико-экономических показателей работы малого предприятия
Реферат Critical Thinking Vs Systematic Thinking Essay Research
Реферат Сила и слабость норвежских бондов IX-XI веков
Реферат Анализ систем электронных расчетов в банковском деле
Реферат Перечень билетов и вопросов к экзамену по экономике
Реферат Ответы на 30 билетов по три вопроса
Реферат Iii международная научно-практическая конференция «коммуникация в социально-гуманитарном знании, экономике, образовании»
Реферат Разработка и исследование методов уменьшения влияния зоны захвата при работе лазерного гироскопа
Реферат Процес квантування сигналів по рівню
Реферат Проблемы формирования инвестиционной политики