Baixe o app para aproveitar ainda mais
Prévia do material em texto
NEANDER Um processador com Arquitetura de Von Neumann A Arquitetura: formato das instruções As instruções do Neander possuem um ou dois bytes (ocupam uma ou duas posições de memória) código da oper. don’t care 7 4 3 0 endereço direto código da oper. don’t care 7 4 3 0 Instruções com um byte: NOP, NOT, HLT Instruções com dois bytes: STA, LDA, ADD, OR, AND, JMP, JN, JZ O Computador Neander A Arquitetura: conjunto de instruções código instrução comentário 0000 NOP Nenhuma operação 0001 STA end MEM(end) ← AC 0010 LDA end AC ← MEM(end) 0011 ADD end AC ← MEM(end) + AC 0100 OR end AC ← MEM(end) OR AC 0101 AND end AC ← MEM(end) AND AC 0110 NOT AC ← NOT AC 1000 JMP end PC ← end 1001 JN end IF N=1 THEN PC ← end 1010 JZ end IF Z=1 THEN PC ← end 1111 HLT parar processamento O Computador Neander A Arquitetura: características gerais • Largura de dados e endereços de 8 bits • Dados representados em complemento de 2 • 1 acumulador de 8 bits (AC) • 1 apontador de programa de 8 bits (PC) • 2 códigos de condição: negativo (N) e zero (Z), implementados como um registrador de estado com 2 bits O Computador Neander A Organização: elementos necessários • Um registrador de 8 bits para servir de acumulador (AC) • Um registrador de 8 bits para o PC (registrador contador) • Dois flip-flops: um para o código de condição N e outro para o Z • Uma memória com 256 posições (palavras) de 8 bits, endereçadas de 0 a 255 O Computador Neander Elementos da organização do NEANDER 1) Memória • Memória de 256 palavras de 8 bits, com endereços de 0 a 255 • Registrador de endereços da memória (REM) de 8 bits, para armazenar endereços • Registrador de dados da memória (RDM) de 8 bits para armazenar o dado lido ou a ser escrito • Sinais de controle: • Read – ler palavra apontada pelo REM e carregar no RDM • Write – escrever o conteúdo do RDM na palavra apontada pelo REM • Carga RDM/REM – carregar no registrador os dados que estão na sua entrada REM RDM 0 7 0 7 Memória READ WRITE CARGA REM CARGA RDM 0 1 2 3 4 5 6 7 8 9 10 11 ... 254 255 Elementos da organização do NEANDER 2) Unidade de Aritmética e Lógica (UAL) • 1 acumulador de 8 bits (AC) para armazenar resultados das operações • 2 registradores de 1 bit para armazenar os códigos de condição (N e Z) após a execução de uma operação pela UAL • Circuitos lógicos para executar cada operação da UAL • Sinais de controle: • ADD: S ← X + Y; AC ← S; ajusta N e Z • AND: S ← X AND Y; AC ← S; ajusta N Z • OR: S ← X OR Y; AC ← S; ajusta N e Z • NOT: S ← NOT X; AC ← S; ajusta N e Z • LOAD: S ← Y; AC ← S; ajusta N e Z • Carga AC e NZ – carregar no registrador os dados que estão na sua entrada U A L AC N Z 0 7 LOAD NOT ADD CARGA NZ X Y S CARGA AC AND OR Elementos da organização do NEANDER 3) Unidade de Controle (UC) • 1 registrador contador de 8 bits (PC) para armazenar o endereço da próxima instrução a ler da memória • 1 registrador de 4 (ou 8 ?) bits para armazenar a instrução lida da memó- ria na fase de busca • Circuitos lógicos para ativar, no momento certo, os sinais de controle necessários à execução de cada instrução • Decodificador para ativar a linha corres- pondente à instrução que está no RI • Sinais de controle: • INC PC: incrementar o conteúdo do PC (somar 1) • Carga RI/PC – carregar no registrador os dados que estão na sua entrada • Outros – enviados para comandar os demais componentes do processador PC Cód. Op. RI N Z Unidade de Controle (UC) 7 0 4 7 INC PC CARGA PC 0 3 ? ? ? ? Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI Já vimos como funcionam UAL, UC, memória, registradores e decodificadores Mas como integrá-los e sincronizá-los para executar um programa? Já sabemos que a parte de controle do processador coordena o ciclo de instrução: Busca – Decodificação - Execução Vamos ver uma alternativa de implementação deste ciclo! O Computador Neander A Arquitetura: o ciclo de execução Decodifica instrução Busca instrução Busca operandos e executa instrução A Arquitetura: a fase de busca (fetch) O Computador Neander Arquitetura/Organização Transferências entre registradores • Novo elemento é necessário: o registrador de instrução (RI) • MEM(PC) corresponde a um acesso à memória, usando o conteúdo do PC como fonte do endereço • Quais são os barramentos necessários ? • Que sinais de controle são usados ? A fase de busca: é igual para todas as instruções RI ← MEM(PC) PC ← PC + 1 O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução NOP (nenhuma operação) Simbólico: NOP RT: - Passos no nível RT: Busca: RI ← MEM(PC) PC ← PC + 1 Execução: nenhuma operação NOP Don’t care 7 4 3 0 As transferências indicam quais caminhos de dados devem existir, mas não indicam os caminhos físicos reais entre os elementos (registradores e UAL) O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução STA (armazena acumulador) Simbólico: STA end RT: MEM(end) ← AC Passos no nível RT: Busca: RI ← MEM(PC) PC ← PC + 1 Execução: R_end ← MEM(PC) PC ← PC + 1 MEM(R_end) ← AC STA Don’t care end 7 4 3 0 O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução LDA (carrega acumulador) Simbólico: LDA end RT: AC ← MEM(end) Passos no nível RT: Busca: RI ← MEM(PC) PC ← PC + 1 Execução: R_end ← MEM(PC) PC ← PC + 1 AC ← MEM(R_end); atualiza N e Z LDA Don’t care end 7 4 3 0 O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução ADD (soma) Simbólico: ADD end RT: AC ← MEM(end) + AC Passos no nível RT: Busca: RI ← MEM(PC) PC ← PC + 1 Execução: R_end ← MEM(PC) PC ← PC + 1 AC ← AC + MEM(R_end); atualiza N e Z ADD Don’t care end 7 4 3 0 O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução OR (“ou” lógico, bit a bit) Simbólico: OR end RT: AC ← MEM(end) OR AC Passos no nível RT: Busca: RI ← MEM(PC) PC ← PC + 1 Execução: R_end ← MEM(PC) PC ← PC + 1 AC ← AC OR MEM(R_end); atualiza N e Z OR Don’t care end 7 4 3 0 O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução AND (“e” lógico, bit a bit) Simbólico: AND end RT: AC ← MEM(end) AND AC Passos no nível RT: Busca: RI ← MEM(PC) PC ← PC + 1 Execução: R_end ← MEM(PC) PC ← PC + 1 AC ← AC AND MEM(R_end); atualiza N e Z AND Don’t care end 7 4 3 0 O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução NOT (complementa acumulador) Simbólico: NOT RT: AC ← NOT AC Passos no nível RT: Busca: RI ← MEM(PC) PC ← PC + 1 Execução: AC ← NOT(AC); atualiza N e Z NOT Don’t care 7 4 3 0 O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução JMP (desvio incondicional - jump) Simbólico: JMP end RT: PC ← end Passos no nível RT: Busca: RI ← MEM(PC) PC ← PC + 1 Execução: R_end ← MEM(PC) PC ← PC + 1 PC ← R_end JMP Don’t care end 7 4 3 0 O Computador Neander desnecessário Arquitetura/Organização: transferências entre regs. Instrução JN (desviocondicional - jump on negative) Simbólico: JN end RT: IF N = 1 THEN PC ← end Passos no nível RT: Se N=1 (desvio ocorre) Busca: RI ← MEM(PC) PC ← PC + 1 Execução: R_end ← MEM(PC) PC ← R_end JN Don’t care end 7 4 3 0 Se N=0 (desvio não ocorre) Busca: RI ← MEM(PC) PC ← PC + 1 Execução: R_end ← MEM(PC) PC ← PC + 1 a rigor, desnecessário O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução JZ (desvio condicional - jump on zero) Simbólico: JZ end RT: IF Z = 1 THEN PC ← end Passos no nível RT: Se Z=1 (desvio ocorre) Busca: RI ← MEM(PC) PC ← PC + 1 Execução: R_end ← MEM(PC) PC ← R_end JZ Don’t care end 7 4 3 0 Se Z=0 (desvio não ocorre) Busca: RI ← MEM(PC) PC ← PC + 1 Execução: R_end ← MEM(PC) PC ← PC + 1 a rigor, desnecessário O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução HLT (término de execução - halt) Simbólico: HLT RT: -- Passos no nível RT: Busca: RI ← MEM(PC) PC ← PC + 1 Execução: parar o processamento HLT Don’t care 7 4 3 0 O Computador Neander Execução STA: R_end ← MEM(PC) PC ← PC + 1 MEM(R_end) ← AC Execução LDA: R_end ← MEM(PC) PC ← PC + 1 AC ← MEM(R_end); atualiza N e Z Execução ADD: R_end ← MEM(PC) PC ← PC + 1 AC ← AC + MEM(R_end); atualiza N e Z Execução OR: R_end ← MEM(PC) PC ← PC + 1 AC ← AC OR MEM(R_end); atualiza N e Z O Computador Neander Instruções que envolvem acessos à memória Execução AND: R_end ← MEM(PC) PC ← PC + 1 AC ← AC AND MEM(R_end); atualiza N e Z Execução JMP: R_end ← MEM(PC) PC ← R_end Execução JN: R_end ← MEM(PC) PC ← R_end Execução JZ: R_end ← MEM(PC) PC ← R_end O Computador Neander Instruções que envolvem acessos à memória Organização do Sistema de Memória Operações com a memória: - Leitura (READ) - Escrita (WRITE) REM RDM 0 7 0 7 Memória READ WRITE CARGA REM CARGA RDM 0 1 2 3 4 5 6 7 8 9 10 11 ●●● 255 O Computador Neander Arquitetura/Organização Operações com a memória x ← MEM(y) descreve uma leitura da memória, que é realizada pelos seguintes passos: 1. REM ← y copia y (que é um endereço) para o REM 2. Read ativa uma operação de leitura da memória 3. x ← RDM copia o conteúdo de RDM para x • REM é o registrador de endereços da memória • RDM é o registrador de dados da memória O Computador Neander Arquitetura/Organização Operações com a memória MEM(y) ← x descreve uma escrita na memória, que é realizada pelos seguintes passos: 1. REM ← y copia y (que é um endereço) para o REM 2. RDM ← x copia x (que é um dado) para o RDM 3. Write ativa uma operação de escrita na memória O Computador Neander Arquitetura/Organização Operações com a memória Observações (1) • Após a leitura do PC, seu conteúdo deve ser incrementado, para apontar para a próxima posição • O incremento do PC pode ser feito a qualquer instante após a transferência do PC para o REM • O incremento do PC pode ser feito em paralelo com outras operações O Computador Neander Arquitetura/Organização Operações com a memória Observações (2) • Quando um desvio condicional não se realiza (o código de condição testado está igual a 0), não é necessário ler o valor do endereço de desvio (operação que requer um acesso à memória) • Neste caso, basta incrementar o PC O Computador Neander Arquitetura/Organização Então, detalhando mais as transferências entre registradores… O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução NOP (nenhuma operação) Simbólico: NOP RT: - Passos no nível RT: Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: nenhuma operação NOP Don’t care 7 4 3 0 O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução STA (armazena acumulador) Simbólico: STA end RT: MEM(end) ← AC Passos no nível RT: Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: REM ← PC Read; PC ← PC + 1 REM ← RDM RDM ← AC Write STA Don’t care end 7 4 3 0 O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução LDA (carrega acumulador) Simbólico: LDA end RT: AC ← MEM(end) Passos no nível RT: Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: REM ← PC Read; PC ← PC + 1 REM ← RDM Read AC ← RDM; atualiza N e Z LDA Don’t care end 7 4 3 0 O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução ADD (soma) Simbólico: ADD end RT: AC ← MEM(end) + AC Passos no nível RT: Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: REM ← PC Read; PC ← PC + 1 REM ← RDM Read AC ← AC + RDM; atualiza N e Z ADD Don’t care end 7 4 3 0 O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução OR (“ou” lógico, bit a bit) Simbólico: OR end RT: AC ← MEM(end) OR AC Passos no nível RT: OR Don’t care end 7 4 3 0 Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: REM ← PC Read; PC ← PC + 1 REM ← RDM Read AC ← AC OR RDM; atualiza N e Z O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução AND (“e” lógico, bit a bit) Simbólico: AND end RT: AC ← MEM(end) AND AC Passos no nível RT: AND Don’t care end 7 4 3 0 Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: REM ← PC Read; PC ← PC + 1 REM ← RDM Read AC ← AC AND RDM; atualiza N e Z O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução NOT (complementa acumulador) Simbólico: NOT RT: AC ← NOT AC Passos no nível RT: Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: AC ← NOT(AC); atualiza N e Z NOT Don’t care 7 4 3 0 O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução JMP (desvio incondicional - jump) Simbólico: JMP end RT: PC ← end Passos no nível RT: Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: REM ← PC Read PC ← RDM JMP Don’t care end 7 4 3 0 O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução JN (desvio condicional - jump on negative) Simbólico: JN end RT: IF N = 1 THEN PC ← end Passos no nível RT: Se N=1 (desvio ocorre) Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: REM ← PC Read PC ← RDM JN Don’t care end 7 4 3 0 Se N=0 (desvio não ocorre) Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: PC ← PC + 1 O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução JZ (desvio condicional - jump on zero) Simbólico: JZ end RT: IF Z = 1 THEN PC ← end Passos no nível RT: JZ Don’t care end 7 4 3 0 Se Z=1 (desvio ocorre) Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: REM ← PC Read PC ← RDM Se Z=0 (desvio não ocorre) Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: PC ← PC + 1 O Computador Neander Arquitetura/Organização: transferências entre regs. Instrução HLT (término de execução - halt) Simbólico: HLT RT: -- Passos no nível RT: Busca: REM ← PC Read; PC ← PC +1 RI ← RDM Execução: parar o processamento HLT Don’t care 7 4 3 0 O Computador Neander Arquitetura/Organização • Já sabemos quais são os componentes necessários para implementar o Neander: uma memória, uma UAL, uma Unidade de Controle e barramentos • Agora vamos detalhar um pouco mais as transferências entre registradores para ver o que falta (componentes e sinais de controle) para completar a organização O Computador Neander PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 U A L AC N Z 0 7 X Y S 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 0 7 0 7 Memória Arquitetura/Organização Busca da Instrução •É uma operação de leitura da memória •O endereço a ser lido está no PC •O valor lido deve ser carregado no RI •Passos no nível RT: REM ← PC Read; PC ← PC + 1 RI ← RDM Que elementos precisamos acrescentar na organização para fazer a busca ? O Computador Neander PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 INC PC Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI U A L AC N Z 0 7 X Y S 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 4 (bits 7 a 4) 8 0 7 0 7 Memória READ CARGA REM Arquitetura/Organização: transferências entre regs. Instrução NOP (nenhuma operação) Simbólico: NOP RT: - Passos no nível RT: Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: nenhuma operação NOP Don’t care 7 4 3 0 Precisamos acrescentar algum elemento à organização para executar esta instrução ? Qual(is) ? O Computador Neander PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 INC PC Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI U A L AC N Z 0 7 X Y S 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 4 (bits 7 a 4) 8 0 7 0 7 Memória READ CARGA REM Arquitetura/Organização: transferências entre regs. Instrução STA (armazena acumulador) Simbólico: STA end RT: MEM(end) ← AC Passos no nível RT: Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: REM ← PC Read; PC ← PC + 1 REM ← RDM RDM ← AC Write STA Don’t care end 7 4 3 0 Precisamos acrescentar algum elemento à organização para executar esta instrução ? Qual(is) ? O Computador Neander PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 INC PC Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI U A L AC N Z 0 7 X Y S 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 4 (bits 7 a 4) 8 8 (bits 7 a 0) 0 7 0 7 Memória READ CARGA REM ? PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 INC PC Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI U A L AC N Z 0 7 X Y S 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 4 (bits 7 a 4) 8 8 (bits 7 a 0) 0 7 0 7 Memória READ CARGA REM ? ? PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 INC PC Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI U A L AC N Z 0 7 X Y S 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 4 (bits 7 a 4) 8 8 (bits 7 a 0) 0 7 0 7 Memória READ CARGA REM ? ? PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 INC PC Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI U A L AC N Z 0 7 X Y S 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 4 (bits 7 a 4) 8 8 (bits 7 a 0) 0 7 0 7 Memória READ CARGA REM ? SEL 0 1 S M U X PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 INC PC Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI U A L AC N Z 0 7 X Y S 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 4 (bits 7 a 4) 8 8 (bits 7 a 0) 0 7 0 7 Memória READ CARGA REM CARGA RDM SEL 0 1 PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 INC PC Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI U A L AC N Z 0 7 X Y S 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 4 (bits 7 a 4) 8 8 (bits 7 a 0) 0 7 0 7 Memória READ WRITE CARGA REM CARGA RDM SEL 0 1 Arquitetura/Organização: transferências entre regs. Instrução LDA (carrega acumulador) Simbólico: LDA end RT: AC ← MEM(end) Passos no nível RT: Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: REM ← PC Read; PC ← PC + 1 REM ← RDM Read AC ← RDM; atualiza N e Z LDA Don’t care end 7 4 3 0 Precisamos acrescentar algum elemento à organização para executar esta instrução ? Qual(is) ? O Computador Neander PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 INC PC Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI U A L AC N Z 0 7 CARGA NZ X Y S CARGA AC 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 4 (bits 7 a 4) 8 1 8 (bits 7 a 0) 0 7 0 7 Memória READ WRITE CARGA REM CARGA RDM SEL 0 1 1 LOAD Arquitetura/Organização: transferências entre regs. Instrução ADD (soma) Simbólico: ADD end RT: AC ← MEM(end) + AC Passos no nível RT: Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: REM ← PC Read; PC ← PC + 1 REM ← RDM Read AC ← AC + RDM; atualiza N e Z ADD Don’t care end 7 4 3 0 Precisamos acrescentar algum elemento à organização para executar esta instrução ? Qual(is) ? O Computador Neander PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 INC PC Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI U A L AC N Z 0 7 LOAD ADD CARGA NZ X Y S CARGA AC 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 4 (bits 7 a 4) 8 1 8 (bits 7 a 0) 0 7 0 7 Memória READ WRITE CARGA REM CARGA RDM SEL 0 1 1 Arquitetura/Organização: transferências entre regs. Instrução OR (“ou” lógico, bit a bit) Simbólico: OR end RT: AC ← MEM(end) OR AC Passos no nível RT: OR Don’t care end 7 4 3 0 Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: REM ← PC Read; PC ← PC + 1 REM ← RDM Read AC ← AC OR RDM; atualiza N e Z Precisamos acrescentar algum elemento à organização para executar esta instrução ? Qual(is) ? O Computador Neander PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 INC PC DecodificadorNOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI U A L AC N Z 0 7 LOAD ADD CARGA NZ X Y S CARGA AC OR 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 4 (bits 7 a 4) 8 1 8 (bits 7 a 0) 0 7 0 7 Memória READ WRITE CARGA REM CARGA RDM SEL 0 1 1 Arquitetura/Organização: transferências entre regs. Instrução AND (“e” lógico, bit a bit) Simbólico: AND end RT: AC ← MEM(end) AND AC Passos no nível RT: AND Don’t care end 7 4 3 0 Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: REM ← PC Read; PC ← PC + 1 REM ← RDM Read AC ← AC AND RDM; atualiza N e Z Precisamos acrescentar algum elemento à organização para executar esta instrução ? Qual(is) ? O Computador Neander PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 INC PC Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI U A L AC N Z 0 7 LOAD ADD CARGA NZ X Y S CARGA AC AND OR 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 4 (bits 7 a 4) 8 1 8 (bits 7 a 0) 0 7 0 7 Memória READ WRITE CARGA REM CARGA RDM SEL 0 1 1 Arquitetura/Organização: transferências entre regs. Instrução NOT (complementa acumulador) Simbólico: NOT RT: AC ← NOT AC Passos no nível RT: Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: AC ← NOT(AC); atualiza N e Z NOT Don’t care 7 4 3 0 Precisamos acrescentar algum elemento à organização para executar esta instrução ? Qual(is) ? O Computador Neander PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 INC PC Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI U A L AC N Z 0 7 LOAD NOT ADD CARGA NZ X Y S CARGA AC AND OR 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 4 (bits 7 a 4) 8 1 8 (bits 7 a 0) 0 7 0 7 Memória READ WRITE CARGA REM CARGA RDM SEL 0 1 1 Arquitetura/Organização: transferências entre regs. Instrução JMP (desvio incondicional - jump) Simbólico: JMP end RT: PC ← end Passos no nível RT: Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: REM ← PC Read PC ← RDM JMP Don’t care end 7 4 3 0 Precisamos acrescentar algum elemento à organização para executar esta instrução ? Qual(is) ? O Computador Neander PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 INC PC CARGA PC Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI U A L AC N Z 0 7 LOAD NOT ADD CARGA NZ X Y S CARGA AC AND OR 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 4 (bits 7 a 4) 8 1 8 (bits 7 a 0) 0 7 0 7 Memória READ WRITE CARGA REM CARGA RDM SEL 0 1 1 Arquitetura/Organização: transferências entre regs. Instrução JN (desvio condicional - jump on negative) Simbólico: JN end RT: IF N = 1 THEN PC ← end Passos no nível RT: Se N=1 (desvio ocorre) Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: REM ← PC Read PC ← RDM JN Don’t care end 7 4 3 0 Se N=0 (desvio não ocorre) Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: PC ← PC + 1 Precisamos acrescentar algum elemento à organização para executar esta instrução ? Qual(is) ? O Computador Neander PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 INC PC CARGA PC Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI U A L AC N Z 0 7 LOAD NOT ADD CARGA NZ X Y S CARGA AC AND OR 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 4 (bits 7 a 4) 8 1 8 (bits 7 a 0) 0 7 0 7 Memória READ WRITE CARGA REM CARGA RDM SEL 0 1 1 Arquitetura/Organização: transferências entre regs. Instrução JZ (desvio condicional - jump on zero) Simbólico: JZ end RT: IF Z = 1 THEN PC ← end Passos no nível RT: JZ Don’t care end 7 4 3 0 Se Z=1 (desvio ocorre) Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: REM ← PC Read PC ← RDM Se Z=0 (desvio não ocorre) Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: PC ← PC + 1 Precisamos acrescentar algum elemento à organização para executar esta instrução ? Qual(is) ? O Computador Neander PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 INC PC CARGA PC Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI U A L AC N Z 0 7 LOAD NOT ADD CARGA NZ X Y S CARGA AC AND OR 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 4 (bits 7 a 4) 8 1 8 (bits 7 a 0) 0 7 0 7 Memória READ WRITE CARGA REM CARGA RDM SEL 0 1 1 Arquitetura/Organização: transferências entre regs. Instrução HLT (término de execução - halt) Simbólico: HLT RT: -- Passos no nível RT: Busca: REM ← PC Read; PC ← PC + 1 RI ← RDM Execução: parar o processamento HLT Don’t care 7 4 3 0 Precisamos acrescentar algum elemento à organização para executar esta instrução ? Qual(is) ? O Computador Neander PC Cód. Op. RI Unidade de Controle (UC) 7 0 4 7 INC PC CARGA PC Decodificador NOP STA LDA . . . HLT 0 1 2 . . . 15 CARGA RI U A L AC N Z 0 7 LOAD NOT ADD CARGA NZ X Y S CARGA AC AND OR 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 254 255 REM RDM 4 (bits 7 a 4) 8 1 8 (bits 7 a 0) 0 7 0 7 Memória READ WRITE CARGA REM CARGA RDM SEL 0 1 1 HLT A Organização: sinais de controle para cada transferência Transferência Sinais de controle REM ← PC sel=0, cargaREM PC ← PC + 1 incrementaPC RI ← RDM cargaRI REM ← RDM sel=1, cargaREM RDM ← AC cargaRDM AC ← RDM; atualiza N e Z UAL(LOAD), cargaAC, cargaNZ AC ← AC + RDM; atualiza N e Z UAL(ADD), cargaAC, cargaNZ AC ← AC AND RDM; atualiza N e Z UAL(AND), cargaAC, cargaNZ AC ← AC OR RDM; atualiza N e Z UAL(OR), cargaAC, cargaNZ AC ← NOT(AC); atualiza N e Z UAL(NOT), cargaAC, cargaNZ PC ← RDM cargaPC Leitura da memória read Escrita na memória write O Computador Neander tempo STA LDA ADD OR AND NOT t0 sel=0, carga REM sel=0, carga REM sel=0, carga REM sel=0, carga REM sel=0, carga REM sel=0, carga REM t1 Read, incrementa PC Read, incrementa PC Read, incrementa PC Read, incrementa PC Read, incrementa PC Read, incrementa PC t2 carga RI carga RI carga RI carga RI carga RI carga RI t3 sel=0, carga REM sel=0, carga REM sel=0, carga REM sel=0, carga REM sel=0, carga REM UAL(NOT), carga AC, carga NZ, goto t0 t4 Read, incrementa PC Read, incrementa PC Read, incrementa PC Read, incrementa PC Read, incrementa PC t5 sel=1, cargaREM sel=1, carga REM sel=1, carga REM sel=1, carga REM sel=1, carga REM t6 carga RDM Read Read Read Read t7 Write, goto t0 UAL(LOAD), carga AC, carga NZ, goto t0 UAL(ADD), carga AC, carga NZ, goto t0 UAL(OR), carga AC, carga NZ, goto t0 UAL(AND, carga AC, carga NZ, goto t0 Temporização dos sinais de controle (parte 1) O Computador Neander Obs: t0 … t7 são denominados “ciclos do processador” e têm todos a mesma duração, que é igual ao tempo de acesso à memória tempo JMP JN, N=1 JN, N=0 JZ, Z=1 JZ, Z=0 NOP HLT t0 sel=0, carga REM sel=0, carga REM sel=0, carga REM sel=0, carga REM sel=0, carga REM sel=0, carga REM sel=0, carga REM t1 Read, incrementa PC Read, incrementa PC Read, incrementa PC Read, incrementa PC Read, incrementa PC Read, incrementa PC Read, incrementa PC t2 carga RI carga RI carga RI carga RI carga RI carga RI carga RI t3 sel=0, carga REM sel=0, carga REM incrementa PC, goto t0 sel=0, carga REM incrementa PC, goto t0 goto t0 Halt t4 Read Read Read t5 carga PC, goto t0 carga PC, goto t0 carga PC, goto t0 t6 t7 Temporização dos sinais de controle (parte 2) O Computador Neander Obs: t0 … t7 são denominados “ciclos do processador” e têm todos a mesma duração, que é igual ao tempo de acesso à memória t0 t1 t2 t3 t4 t5 t6 t7 Clock HLT goto t0 contador Gerador dos sinais de temporização - exemplo O Computador Neander Unidade de Controle carga REM incrementa PC carga RI sel carga RDM Read Write UAL(Y) UAL(ADD) UAL(OR) UAL(AND) UAL(NOT) carga AC carga NZ carga PC t0 t1 t2 t3 Tempo- rizador t4 t5 t6 t7 N Z NOP LDA STA ADD OR AND NOT JMP JN JZ HLT CLK Vdd GND goto t0 O Computador Neander carga REM = t0 + t3.(STA+LDA+ADD+OR+AND+JMP+JN.N+JZ.Z) + t5.(STA+LDA+ADD+OR+AND) incrementa PC = t1 + t4.(STA+LDA+ADD+OR+AND) + t3.(JN.N’ + JZ.Z’) carga RI = t2 sel = t5.(STA+LDA+ADD+OR+AND) carga RDM = t6.STA Read = t1 + t4.(STA+LDA+ADD+OR+AND+JMP+JN.N+JZ.Z) + t6.(LDA+ADD+OR+AND) Write = t7.STA UAL(Y) = t7.LDA UAL(ADD) = t7.ADD UAL(OR) = t7.OR UAL(AND) = t7.AND UAL(NOT) = t3.NOT carga AC = t7.(LDA+ADD+OR+AND) + t3.NOT carga NZ = t7.(LDA+ADD+OR+AND) + t3.NOT (= carga AC) carga PC = t5.(JMP+JN.N+JZ.Z) goto t0 = t7.(STA+LDA+ADD+OR+AND) + t3.(NOP+NOT+JN.N’+JZ.Z’) + t5.(JMP+JN.N+JZ.Z) Expressões booleanas dos sinais de controle O Computador Neander Exemplos: circuitos para gerar os sinais de controle Carga RI t2 O Computador Neander carga REM = t0 + t3.(STA+LDA+ADD+OR+AND+JMP+JN.N+JZ.Z) + t5.(STA+LDA+ADD+OR+AND) incrementa PC = t1 + t4.(STA+LDA+ADD+OR+AND) + t3.(JN.N’ + JZ.Z’) carga RI = t2 sel = t5.(STA+LDA+ADD+OR+AND) carga RDM = t6.STA Read = t1 + t4.(STA+LDA+ADD+OR+AND+JMP+JN.N+JZ.Z) + t6.(LDA+ADD+OR+AND) Write = t7.STA UAL(Y) = t7.LDA UAL(ADD) = t7.ADD UAL(OR) = t7.OR UAL(AND) = t7.AND UAL(NOT) = t3.NOT carga AC = t7.(LDA+ADD+OR+AND) + t3.NOT carga NZ = t7.(LDA+ADD+OR+AND) + t3.NOT (= carga AC) carga PC = t5.(JMP+JN.N+JZ.Z) goto t0 = t7.(STA+LDA+ADD+OR+AND) + t3.(NOP+NOT+JN.N’+JZ.Z’) + t5.(JMP+JN.N+JZ.Z) Expressões booleanas dos sinais de controle O Computador Neander Exemplos: circuitos para gerar os sinais de controle Carga RI t2 t6 STA Carga RDM O Computador Neander carga REM = t0 + t3.(STA+LDA+ADD+OR+AND+JMP+JN.N+JZ.Z) + t5.(STA+LDA+ADD+OR+AND) incrementa PC = t1 + t4.(STA+LDA+ADD+OR+AND) + t3.(JN.N’ + JZ.Z’) carga RI = t2 sel = t5.(STA+LDA+ADD+OR+AND) carga RDM = t6.STA Read = t1 + t4.(STA+LDA+ADD+OR+AND+JMP+JN.N+JZ.Z) + t6.(LDA+ADD+OR+AND) Write = t7.STA UAL(Y) = t7.LDA UAL(ADD) = t7.ADD UAL(OR) = t7.OR UAL(AND) = t7.AND UAL(NOT) = t3.NOT carga AC = t7.(LDA+ADD+OR+AND) + t3.NOT carga NZ = t7.(LDA+ADD+OR+AND) + t3.NOT (= carga AC) carga PC = t5.(JMP+JN.N+JZ.Z) goto t0 = t7.(STA+LDA+ADD+OR+AND) + t3.(NOP+NOT+JN.N’+JZ.Z’) + t5.(JMP+JN.N+JZ.Z) Expressões booleanas dos sinais de controle O Computador Neander Exemplos: circuitos para gerar os sinais de controle Carga RI t2 t3 NOT UAL(NOT) t6 STA Carga RDM O Computador Neander carga REM = t0 + t3.(STA+LDA+ADD+OR+AND+JMP+JN.N+JZ.Z) + t5.(STA+LDA+ADD+OR+AND) incrementa PC = t1 + t4.(STA+LDA+ADD+OR+AND) + t3.(JN.N’ + JZ.Z’) carga RI = t2 sel = t5.(STA+LDA+ADD+OR+AND) carga RDM = t6.STA Read = t1 + t4.(STA+LDA+ADD+OR+AND+JMP+JN.N+JZ.Z) + t6.(LDA+ADD+OR+AND) Write = t7.STA UAL(Y) = t7.LDA UAL(ADD) = t7.ADD UAL(OR) = t7.OR UAL(AND) = t7.AND UAL(NOT) = t3.NOT carga AC = t7.(LDA+ADD+OR+AND) + t3.NOT carga NZ = t7.(LDA+ADD+OR+AND) + t3.NOT (= carga AC) carga PC = t5.(JMP+JN.N+JZ.Z) goto t0 = t7.(STA+LDA+ADD+OR+AND) + t3.(NOP+NOT+JN.N’+JZ.Z’) + t5.(JMP+JN.N+JZ.Z) Expressões booleanas dos sinais de controle O Computador Neander Exemplos: circuitos para gerar os sinais de controle Carga RI t2 t3 NOT UAL(NOT) t6 STA Carga RDM t7 LDA UAL(Y) O Computador Neander carga REM = t0 + t3.(STA+LDA+ADD+OR+AND+JMP+JN.N+JZ.Z) + t5.(STA+LDA+ADD+OR+AND) incrementa PC = t1 + t4.(STA+LDA+ADD+OR+AND) + t3.(JN.N’ + JZ.Z’) carga RI = t2 sel = t5.(STA+LDA+ADD+OR+AND) carga RDM = t6.STA Read = t1 + t4.(STA+LDA+ADD+OR+AND+JMP+JN.N+JZ.Z) + t6.(LDA+ADD+OR+AND) Write = t7.STA UAL(Y) = t7.LDA UAL(ADD) = t7.ADD UAL(OR) = t7.OR UAL(AND) = t7.AND UAL(NOT) = t3.NOT carga AC = t7.(LDA+ADD+OR+AND) + t3.NOT carga NZ = t7.(LDA+ADD+OR+AND) + t3.NOT (= carga AC) carga PC = t5.(JMP+JN.N+JZ.Z) goto t0 = t7.(STA+LDA+ADD+OR+AND) + t3.(NOP+NOT+JN.N’+JZ.Z’) + t5.(JMP+JN.N+JZ.Z) Expressões booleanas dos sinais de controle O Computador Neander Exemplos: circuitos para gerar os sinais de controle Carga RI t2 t3 NOT UAL(NOT) t6 STA Carga RDM t7 LDA UAL(Y) t5 Carga PC JN JZ N Z JMP O Computador Neander carga REM = t0 + t3.(STA+LDA+ADD+OR+AND+JMP+JN.N+JZ.Z) + t5.(STA+LDA+ADD+OR+AND) incrementa PC = t1 + t4.(STA+LDA+ADD+OR+AND) + t3.(JN.N’ + JZ.Z’) carga RI = t2 sel = t5.(STA+LDA+ADD+OR+AND) carga RDM = t6.STA Read = t1 + t4.(STA+LDA+ADD+OR+AND+JMP+JN.N+JZ.Z) + t6.(LDA+ADD+OR+AND) Write = t7.STA UAL(Y) = t7.LDA UAL(ADD) = t7.ADD UAL(OR) = t7.OR UAL(AND) = t7.AND UAL(NOT) = t3.NOT carga AC = t7.(LDA+ADD+OR+AND) + t3.NOT carga NZ = t7.(LDA+ADD+OR+AND) + t3.NOT (= carga AC) carga PC = t5.(JMP+JN.N+JZ.Z) goto t0 = t7.(STA+LDA+ADD+OR+AND) + t3.(NOP+NOT+JN.N’+JZ.Z’) + t5.(JMP+JN.N+JZ.Z) Expressões booleanas dos sinais de controle O Computador Neander Combinando circuitos para gerar vários sinais de controle t3 NOT UAL(NOT) Carga NZ Carga AC AND t7 LDA OR ADD O Computador Neander NEANDER Slide Number 2 Slide Number 3 Slide Number 4 Slide Number 5 Slide Number 6 Slide Number 7 Slide Number 8 Slide Number 9 Slide Number 10 Slide Number 11 Slide Number 12 Slide Number 13 Slide Number 14 Slide Number 15 Slide Number 16 Slide Number 17 Slide Number 18 Slide Number 19 Slide Number 20 Slide Number 21 Slide Number 22 Slide Number 23 Slide Number 24 Slide Number 25 Slide Number26 Slide Number 27 Slide Number 28 Slide Number 29 Slide Number 30 Slide Number 31 Slide Number 32 Slide Number 33 Slide Number 34 Slide Number 35 Slide Number 36 Slide Number 37 Slide Number 38 Slide Number 39 Slide Number 40 Slide Number 41 Slide Number 42 Slide Number 43 Slide Number 44 Slide Number 45 Slide Number 46 Slide Number 47 Slide Number 48 Slide Number 49 Slide Number 50 Slide Number 51 Slide Number 52 Slide Number 53 Slide Number 54 Slide Number 55 Slide Number 56 Slide Number 57 Slide Number 58 Slide Number 59 Slide Number 60 Slide Number 61 Slide Number 62 Slide Number 63 Slide Number 64 Slide Number 65 Slide Number 66 Slide Number 67 Slide Number 68 Slide Number 69 Slide Number 70 Slide Number 71 Slide Number 72 Slide Number 73 Slide Number 74 Slide Number 75 Slide Number 76 Slide Number 77 Slide Number 78 Slide Number 79 Slide Number 80 Slide Number 81 Slide Number 82 Slide Number 83 Slide Number 84 Slide Number 85 Slide Number 86 Slide Number 87 Slide Number 88 Slide Number 89
Compartilhar