Sistemas Digitais Projeto 2ª Unidade CPU Arquitetura/plataforma de prototipação Sistemas Digitais Conjunto de instruções         INSTRUÇÂO Add endereço : Store endereço: Load endereço: Jump endereço: JNEG endereço: Sub endereço: OPCODE Ac endereço dado .:.

Download Report

Transcript Sistemas Digitais Projeto 2ª Unidade CPU Arquitetura/plataforma de prototipação Sistemas Digitais Conjunto de instruções         INSTRUÇÂO Add endereço : Store endereço: Load endereço: Jump endereço: JNEG endereço: Sub endereço: OPCODE Ac endereço dado .:.

Sistemas Digitais
Projeto 2ª Unidade
CPU
Arquitetura/plataforma de prototipação
Sistemas Digitais
Conjunto de instruções








INSTRUÇÂO
Add endereço :
Store endereço:
Load endereço:
Jump endereço:
JNEG endereço:
Sub endereço:
OPCODE
Ac <= Ac + conteúdo endereço .:. 00
endereço dado <= Ac
.:. 01
Ac <= conteúdo do endereço
.:. 02
Pc <= endereço
.:. 03
Se Ac < 0 Pc <= endereço
.:. 04
Ac <= Ac - conteúdo endereço .:. 05
In (Leitura) dispositivo : Lê do dsipositivo
Out (Escrita) dispositivo : Escreve no dispositivo
.:.
.:.
06
07
Sistemas Digitais
Declaração da CPU
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CPU IS
PORT(
clock
reset
: IN STD_LOGIC;
: IN STD_LOGIC;
bus_data_in_register : IN STD_LOGIC_VECTOR(1 downto 0);
...
...
memory_address_register
...
...
: OUT STD_LOGIC_VECTOR(7 downto 0);
);
Sistemas Digitais
Modelo de arquitetura
--Aqui deve constar a declaração dos sinais e dos estados
BEGIN
PROCESS (clock, reset)
BEGIN
IF (reset = '1') THEN
state <= reset_pc;
ELSIF (clock'EVENT AND clock = '1') THEN
CASE state IS
WHEN reset_pc =>
program_counter <= "00000000";
memory_address_register <= "00000000";
memory_data_out_register <= "0000000000000000";
register_AC <= "0000000000000000";
bus_data_out_register <= "00";
bus_address_register <= "00";
memory_write <= '0';
state <= fetch;
Sistemas Digitais
Alguns estados
WHEN fetch =>
program_counter <= program_counter + 1;
memory_write <= '0';
state <= fetch1;
WHEN decode =>
memory_address_register <= instruction_register(7 DOWNTO 0);
CASE instruction_register(15 DOWNTO 8) IS
WHEN "00000000" =>
state <= execute_add;
WHEN "00000001" =>
state <= execute_store;
...
-- continua outros estados;
WHEN OTHERS =>
state <= fetch;
END CASE;
Sistemas Digitais
Alguns Estados (cont)
...
WHEN execute_jump =>
memory_address_register <= instruction_register(7 DOWNTO 0);
program_counter <= instruction_register(7 DOWNTO 0);
state <= fetch;
WHEN execute_out =>
bus_address_register <= instruction_register(1 DOWNTO 0);
bus_data_out_register <= register_ac (1 DOWNTO 0);
memory_address_register <= program_counter;
state <= fetch;
WHEN OTHERS =>
memory_address_register <= program_counter;
state <= fetch;
...
Sistemas Digitais
Unidade de mapeamento

A unidade de mapeamento será o “estágio”
final do projeto. Ela conterá os componentes
utilizados (cpu, memória, decoder, drivers ...)
e fará a ligação entre os mesmos utilizando
sinais (fios). Esse mapeamento deve ser feito
em VHDL utilizando a sintaxe de PORT MAP
Sistemas Digitais
Unidade de mapeamento
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY robot IS
PORT(
clock
: IN STD_LOGIC;
reset
: IN STD_LOGIC;
motorControl1
: IN STD_LOGIC_VECTOR(1 DOWNTO 0);
...
motorOut1 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
...
);
END robot;
Sistemas Digitais
Unidade de mapeamento(cont)
-- declaração dos sinais usados
...
-- declaração dos componentes usados
COMPONENT decoder
PORT(
clock
: IN STD_LOGIC;
busAddress
: IN STD_LOGIC_VECTOR(1 downto 0);
CSMotor1
: OUT STD_LOGIC;
CSMotor2
: OUT STD_LOGIC;
muxSelector
: OUT STD_LOGIC
);
END COMPONENT;
...
Sistemas Digitais
Mapeamento
...
BEGIN
U1: decoder PORT MAP(clock => clock, busAddress => bus_address,
CSMotor1 => chip_select_motor1, CSMotor2 => chip_select_motor2,
muxSelector => chip_select_mux
);
U2: driver PORT MAP(reset => reset, chipSelect => chip_select_motor1,
busData => bus_data_out, motorSignal => motorOut1
);
...
Sistemas Digitais