Datapath and Control Queremos implementar o MIPS Instruções de referência à memória: lw, sw Instruções aritméticas e lógicas: add, sub, and, or, slt Controle de fluxo: beq, j
Cinco passos de execução Busca de instrução Decodificação de Instrução e busca de registradores Execução Acesso a Memória ou finalização das instruções tipo-r Write-back (em breve)
1) Fetch (Busca) A unidade de memória recebe um endereço e devolve a instrução Program counter Um somador para calcular o próximo endereço
2) Decode Instruction & Fetch Registers Não sabemos ainda que instrução é, mas podemos especular : Podemos buscar os registradores 21-25 e 16-20 das instruções Quais instruções não precisam essa informação? Branch bits 0-15
Formatos Register format 0 rs rt rd shamt funct 0 rs rt rd shamt funct 6 5 5 5 5 6 Immediate format op-code rs rt immediate value op-code rs rt immediate value 6 5 5 16 Jump format op-code op-code 26 26 bit bit current current segment segment address address 6 26
3) Execução Execução (dependendo da instrução) Calcula um endereço de memória(lw and sw) Calcula um resultado aritmético (int ops) Compara e ajusta o PC Os registradores são utilizados como entrada da ULA
ULA A saída da ULA é: Gravada em um registrador (arithmetic-logical instructions) Usada como endereço (load and store instructions) Determinar a próxima instrução (branch instructions)
4) Acesso à Memória ou Completar instruções R-Type Nas instruções load e store o endereço ALU_Out é usado para referênciar a memória Nas instruções lógico-aritméticas deve escrever o resultado no registrador destino
5) Write-Back Instruções de Load são completadas escrevendo de volta (writing back) o valor da memória
Datapath simplificado Data PC Address Instruction Registers ALU Instruction memory Register # Register # Register # Address Data memory Data Dois tipos de unidades Elementos que operam em valores de dados (combinacional) Elementos que contém estados (sequencial)
Combinacional e Sequencial A ULA é combinacional Outros elementos não são combinacionais, eles mantém um estado Um elemento com algum armazenamento interno é chamado de elemento de estado Elemento de estados tem pelo menos duas entradas dado clock (determina quando o dado é escrito)
Metodologia de Clocking Temos que decidir quando um sinal pode ser lido ou escrito Nós assumimos uma estratégia de disparo por borda (edge-triggered clocking strategy) Todos os elementos de armazenamento são atualizado na transição para baixou ou para cima da borda falling edge cycle time rising edge
Síncrono Execução típica Ler o conteúdo de algum elemento de estado Enviar os valores para alguma lógica combinacional Escrever os resultado em algum elemento de estado State element 1 Combinational logic State element 2 Clock cycle
D-latch Duas entradas: Valor a ser armazenado (D) Clock (C) indicando quando ler e armazenar D Duas saídas: O valor do estado interno (Q) e seu complemento C Q D D _ Q C Q
D flip-flop Saída só muda na transição para baixo D D C D latch Q D C D latch Q _ Q Q _ Q D C C Q
Até agora Vamos usar D-flip flops para construir o banco de registradores Vamos construir o datapath Capítulo 4, Appendix B
Instruction Fetch Instruction address Instruction PC Add Sum Instruction memory a. Instruction memory b. Program counter c. Adder Usar o PC para encontrar a nova instrução PC = PC + 4
Instruction Fetch + PC update
R-Format Register format op-code rs rt rd shamt funct op-code rs rt rd shamt funct 6 5 5 5 5 6 op: basic operation of instruction funct: variant of instruction rs: first register source operand rt: second register source operand rd: register destination operand shamt: shift amount
Implementando Instruções R-Format Register numbers Data 5 Read 3 register 1 5 5 Read register 2 Registers Write register Write data Read data 1 Read data 2 Data ALU control Zero ALU ALU result RegWrite a. Registers b. ALU Operações formato R da ULA precisam do banco de registradores E uma ULA, claro
Banco de Registradores Read register number 1 Read register number 2 Register file Write register Write data Write Read data 1 Read data 2 Usando D flip-flops (mas não vamos tratar destes detalhes)
Implementando Loads e Stores MemWrite Address Write data Data memory Read data 16 Sign 32 extend MemRead a. Data memory unit b. Sign-extension unit Banco de Registradores, ULA, Unidade de memória de dados, unidade de extensão de sinal
Datapath para load e store 1. Acessa registradores 2. Cálculo de endereço de memória 3. Escrever ou ler na memória 4. Se load escrever no banco de registrador
branch target = PC + 4 + (sign extended 16 bits)>>2 Datapath para um Branch Usa a ULA para a condição do branch e outro somador para o branch