3º Trabalho de Laboratório. Unidade de Controlo Microprogramada



Documentos relacionados
ARQUITECTURA DE COMPUTADORES

Arquitectura de Computadores RECUPERAÇÃO DO 1º TESTE

MICROPROCESSADORES Nuno Cavaco Gomes Horta Universidade Técnica de Lisboa / Instituto Superior Técnico

28/9/2010. Unidade de Controle Funcionamento e Implementação

Componentes do Computador e. aula 3. Profa. Débora Matos

Conjunto de instruções. O Conjunto de Instruções. Conjunto de instruções. Instruções típicas. Instruções típicas. Instruções típicas

ULA Sinais de Controle enviados pela UC

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2)

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Nível da Microarquitetura

O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema.

Arquitectura de Computadores Unidade de Processamento

2 Formalidades referentes ao trabalho

Programação ao nível da máquina. Operações lógicas e aritméticas

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

1. SINTAXE DA LINGUAGEM ASSEMBLY

Arquitetura e Organização de Computadores

Arquitectura de Computadores. Dicas e Truques do Assembly do P3

MICROPROCESSADORES. Arquitectura do Conjunto de Instruções. Nuno Cavaco Gomes Horta. Universidade Técnica de Lisboa / Instituto Superior Técnico

Interrupções. As interrupções são casos especiais de chamadas de procedimentos.

Funcionamento básico de um computador

Capítulo 4. MARIE (Machine Architecture Really Intuitive and Easy)

Projecto de uma placa com DIP-Switches e LCD com ligação à placa DETIUA

Arquitetura de Computadores. Tipos de Instruções

MICROPROCESSADORES 2º TESTE - A

2. A influência do tamanho da palavra

Sistemas Lógicos II. Aula 10

Organização e Arquitetura de Computadores I

Arquitetura de Computadores - Revisão -

Arquitectura de Computadores

Instituto Superior Técnico Licenciatura em Engenharia Informática e de Computadores. Projecto de. Arquitectura de Computadores.

Organização e Arquitetura de Computadores I

Capítulo 3 Processadores de Propósito Geral: Software

Estrutura de um Computador

ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

Arquitectura de Computadores 2007/2008 2º Semestre Repescagem 1º Teste - 03/07/2008

Organização Básica do Computador

BARRAMENTO DO SISTEMA

Edeyson Andrade Gomes

Computador Cleópatra

Figura 1 - O computador

Acetatos de apoio às aulas teóricas

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias:

Arquitectura de Computadores

Dispositivos de Entrada e Saída

Unidade 10: A Unidade Lógica Aritmética e as Instruções em Linguagem de Máquina Prof. Daniel Caetano

Representação de Dados

A Unidade Central de Processamento é a responsável pelo processamento e execução de programas armazenados na MP.

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores.

CISC - Complex Instruction Set Computer

Sistemas Computacionais II Professor Frederico Sauer

CAPÍTULO 6 ARITMÉTICA DIGITAL

Conjunto de instruções e modos de. aula 4. Profa. Débora Matos

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini prof.andre.luis.belini@gmail.com /

Introdução. ULA: Faz os Cálculos UC: Como isso tudo ocorre?

Sistemas Operacionais

Unidade Central de Processamento

Universidade Federal de Santa Catarina Departamento de Informática e Estatística Bacharelado em Ciências da Computação

ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM

Máquina Multinível. Um programa pode ser definido como uma seqüência de instruções que descrevem como executar uma determinada tarefa.

Primeiros "computadores" digitais. Execução de um programa. Consolas. Primórdios dos computadores. Memória interna. Computadores com memória interna

ARQUITETURA DE COMPUTADORES

Organização de Computadores 1

Linguagem de Montagem Funcionamento de CPU e Assembly Rudimentar

Arquitectura de Computadores MEEC (2014/15 2º Sem.)

3. Arquitetura Básica do Computador

ARQUITETURA DE COMPUTADORES

Objetivos Gerais. Arquitetura de Computadores. Arquiteturas estudadas. O Computador Neander

GUIA DE FUNCIONAMENTO DA UNIDADE CURRICULAR

PCS-2302 / PCS-2024 Lab. de Fundamentos de Eng. de Computação

RISC simples. Aula de Março de

Programação de Sistemas

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO

Exemplo de Subtração Binária

Introdução à Arquitetura de Computadores

Introdução à programação em linguagem assembly

Organização e Arquitetura de Computadores I

Programando o computador IAS

SISTEMAS DIGITAIS. Memórias. Prof. Guilherme Arroz Prof. Carlos Sêrro Alterado para lógica positiva por Guilherme Arroz.

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

CONSTRUÇÃO DE UMA UCP HIPOTÉTICA M++ INTRODUÇÃO

Evolução dos Processadores

CIRCUITOS E SISTEMAS ELECTRÓNICOS

Entradas/Saídas. Programação por espera activa Programação por interrupções

SISTEMAS DIGITAIS CIRCUITOS COMBINATÓRIOS TÍPICOS

Processadores BIP. Conforme Morandi et al (2006), durante o desenvolvimento do BIP, foram definidas três diretrizes de projeto:

O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware

ARQUITECTURA DE COMPUTADORES

Aula 14: Instruções e Seus Tipos

1345 Arquitectura de Computadores

Laboratório de Sistemas Processadores e Periféricos Lista de comandos de Assembly

ZS Rest. Manual Profissional. BackOffice Mapa de Mesas. v2011

ARQUITETURA DE COMPUTADORES

Componentes básicos de um sistema computacional. Cap. 1 (Stallings)

Armazenar dados e programas que serão utilizados pelo processador (CPU Unidade Central de Processamento)

Pipeline. Todos os estágios devem estar prontos ao mesmo tempo para prosseguir.

Transcrição:

MICROPROCESSADORES 3º Trabalho de Laboratório Unidade de Controlo Microprogramada Objectivo: Pretende-se que os alunos compreendam a metodologia usada na implementação, programação e teste de uma Unidade de Controlo Microprogramado de um computador de Ciclo Múltiplo, assim como a familiarização dos conceitos de pilha e subrotina. O trabalho terá uma duração de 2 semanas, devendo o relatório ser entregue na aula de laboratório da segunda semana. O trabalho deverá ser preparado fora do horário de laboratório, destinando-se as 4 horas de laboratório à resolução de eventuais problemas, e à demonstração do trabalho realizado. 1 INTRODUÇÃO Pretende-se programar uma Unidade de Controlo Microprogramado para um computador elementar de Ciclo Múltiplo baseado numa Unidade de Processamento de 6 bits. O computador será integralmente fornecido pelo corpo docente sob a forma de um projecto de Xilinx, sendo o trabalho centrado na microprogramação do conjunto de instruções na ROM da Unidade de Controlo, e numa subrotina e programa principal em código Assembly que efectua multiplicações de operandos de 6 bits armazenados na memória RAM. A arquitectura do computador encontra-se na figura 1 abaixo. MR 0 1 N C 0 1 2 3 MUX R IRW IR Dout[15:0] DSel ASel Data in UA (9 x 6 bits) A B RW BSel SPC SP PC Dout[5:0] PCC 01 Opcode 6 6 6 L / CNT NADR MC MR 0 1 MUX C CAR Address ROM (64 x 35 bits) Data out MC Restantes Sinais de Controlo MA 1 0 MUX A X 6 6 UF UF out 0 1 2 Y MUX B Flags MD FW Reg MB PC 0 1 MUX D Concat. 0 C,Z Data in Dout[5:0] 0 1 2 MUX M 6 Address RAM (64 x 16 bits) Data out Write Dout[15:0] MM MW Figura 1- Arquitectura elementar de um computador de ciclo múltiplo Relativamente à identificação de Restantes Sinais Controlo da figura 1, esta corresponde respectivamente a IRW (1 bit), DT (1 bit), M Dsel (2 bits), RW (1 bit), AT (1 bit), M Asel (2 bits), BT (1 bit), M Bsel (2 bits), MA (1 bit), MB (2 bits), FS (3 bits), FW (1 bit), MW (1 bit), MD (1 bit), MM (2 bits), PCC (2 bits), SPC (2 bits). 2 UNIDADE DE PROCESSAMENTO (UP) A Unidade de Processamento (UP) de 6 bits a controlar assemelha-se àquelas usadas nas sessões de laboratório anteriores. A UP é constituída por uma Unidade de Armazenamento (UA), uma Unidade Funcional (UF) e 2 Muxs. Unidade de Armazenamento (UA). A UA dispõe de 9 registos: R0, R1,..., R7 e Rt com a codificação 000, 001,..., 111 para os registos R0 a R7 respectivamente. Os registos R0 a R7 podem ser endereçados pelas instruções assembly armazenadas na RAM (através do Instruction Register (IR)). Contudo, o registos Rt não. Este destina-se exclusivamente a ser utilizado como armazenamento temporário na execução das instruções microprogramadas guardadas na ROM. 1 de 10

Dito de outra forma, o registo Rt é invisível para o utilizador (uma vez que este não os pode referenciar nas suas instruções assembly). Cada registo tem 6 bits. Quando RW=1, a entrada de dados da UA é armazenada no registo endereçado por Dsel. Quando RW=0, nenhum registo da UA é escrito. O acesso aos registos da UA é feito através das linhas DSEL, ASEL e BSEL de 4 bits (ver figura 1) que estão ligadas ao resto do computador como se mostra na figura 2 abaixo. Figura 2- MUX s de selecção dos bits de controlo ASel, BSel e DSel Note que os 3 bits de menor peso de Asel, Bsel e Dsel podem ter origens diversas (mas provêm sempre de bits contidos no Instruction Register) e são controlados pelos sinais MAsel, MBsel e MDsel gerados na Unidade de Controlo (UC). O bit de maior peso de Asel, Bsel e Dsel é denominado AT, BT e DT, respectivamente. Os sinais AT, BT e DT são também gerados na UC. Note que estas ligações confirmam o funcionamento anteriormente descrito: o utilizador só pode referenciar nas suas instruções assembly os registos R0 a R7; o acesso ao registo Rt exige a manipulação dos bits AT, BT e DT que estão apenas ao alcance da UC. Unidade Funcional (UF). A UF é semelhante à do laboratório 2, com a excepção de que os operandos têm agora 6 bits (e não 4). As linhas FS (Function Selection) determinam qual a micro-operação executada pela UF: Tabela 1- Micro operações realizadas pela unidade funcional FS 2 FS 1 FS 0 Micro-operação Descrição 000 W = X Transferência de X 001 W = Y Transferência de Y 010 W = X+1 Incremento de X 011 W = X-1 Decremento de X 100 W = X+Y Adição 101 W = X-Y Subtracção 110 W = X AND Y Operação lógica AND 111 W = X OR Y Operação lógica OR A micro-operação executada na UF afecta as flags Negative (N) e Carry (C). Estas flags podem ser guardadas num registo após a execução de cada instrução, consoante o sinal de controlo FW: se FW=1 as flags são armazenadas no registo Reg indicado na figura 1. Muxs. O Mux A selecciona o operando X da UF: quando MA=0, o operando X da UF é o registo da UA escolhido pelas linhas Asel, quando MA=1 o operando X é o dado (Op) contido nos 6 bits menos significativos do Instruction Register - IR[5:0]. O Mux B selecciona o operando Y da UF: quando MB=0, o operando Y é o registo da UA escolhido pelas linhas Bsel; quando MB=1, o operando Y é o dado contido nos 6 bits menos significativos das linhas Dout da RAM; quando MB=2, o operando Y é o registo Stack Pointer (SP). 3 ARQUITECTURA DO COMPUTADOR E DA UNIDADE DE CONTROLO (UC) A arquitectura do computador implementado caracteriza-se essencialmente por possuir uma Unidade de Controlo microprogramado (ROM, CAR, Mux R e Mux C) e uma memória comum para dados, programa e pilha (RAM). Além destas unidades, distinguem-se a UP (constituída pela UA e pela UF), vários Mux s e ainda 3 registos: o Program Counter (PC), o Instruction Register (IR) e o Stack Pointer (SP). 2 de 10

3.1 Formato das Instruções Assembly As instruções de Assembly a utilizar neste computador são de 16 bits e possuem formatos de acordo com o tipo de endereçamento utilizado como indicado na figura 3: em que: Figura 3- Modos de endereçamento e formato das instruções OpCode (4 bits): código da instrução assembly a executar; DR (3 bits): selecciona um dos registos R0 a R7; RB (3 bits): selecciona um dos registos R0 a R7; RA (3 bits): selecciona um dos registos R0 a R7; Op (6 bits): operando constante de 6 bits; Address (6 bits): constante de 6 bits em formato binário com o endereço de uma posição de memória RAM (endereço efectivo); Offset (6 bits): constante de 6 bits em formato de complemento para 2 (permite indicar saltos para a frente ou para trás). 3.2 Memória e Registos auxiliares A memória RAM tem uma dimensão de 64x16 bits, e contém o programa, os dados e a pilha (stack). Dado que os registos da UA têm 6 bits, e que as instruções de programa têm 16, torna-se óbvio que nos endereços em que a memória é utilizada para guardar dados a sua capacidade não é completamente aproveitada, pelo que as operações que guardam e buscam dados na memória só utilizam os bits menos significativos da memória. A este respeito, notar o bloco de concatenação de zeros na figura 1. Dado que a memória é comum, as regiões de código, dados e pilha têm de se apresentar disjuntas no espaço de endereçamento (para evitar sobreposições). Assim: O programa a ser executado deve ser colocado a partir do endereço 0 (e ocupa as posições seguintes de memória); O topo da pilha é o endereço 63 (ou 3Fh), e cada operação que coloca dados na pilha decrementa esse endereço; Os dados ficarão colocados numa área situada entre o programa e a pilha como indicado na figura 4 explicada mais à frente. O acesso à memória é feito a partir do Mux M, da seguinte forma: Se MM=0, o endereço da RAM provém do registo da UA seleccionado por Bsel; 3 de 10

Se MM=1, o endereço da RAM provém do registo Stack Pointer (SP). Note que o SP contém o endereço da última posição em que se acedeu à pilha e é inicializado com o valor 00h 1 ; Se MM=2, o endereço da RAM provém do Program Counter (PC). Note que o PC contém o endereço da instrução do programa a ser executada (i.e., aponta para a instrução a ser executada). É também inicializado com o valor 00h. De notar que as operações CALL e RET, utilizadas para manipular subrotinas, utilizam a pilha para guardar o conteúdo do PC nos 6 bits de menor peso da palavra da memória. O PC e o SP representados no diagrama de blocos não são simples registos, mas sim unidades mais complexas que contêm diversas funcionalidades: O SP é um registo de 6 bits controlado pelo sinal SPC (2 bits). Quando SPC=0, o valor de SP não é alterado (hold). Quando SPC=1, o SP é incrementado de uma unidade (SP SP+1). Quando SPC=2, o SP é decrementado de uma unidade (SP SP-1); O PC é um registo de 6 bits controlado pelo sinal PCC (2 bits). Quando PCC=0, o valor de PC não é alterado. Quando PCC=1, o PC é incrementado de uma unidade (PC PC+1). Quando PCC=2, o registo PC é carregado com os 6 bits menos significativos da RAM (PC address). Quando PCC=3, são adicionados ao PC os 6 bits menos significativos da RAM (PC PC + offset). Atenção que esta informação, offset e address, provém da RAM e não do registo IR. ATENÇÃO que o valor do campo offset e address que devem ser colocados à entrada do PC provêm da memória RAM e não do registo IR. 1 Isto deve-se ao facto de a instrução PUSH começar por decrementar o SP, pelo que a primeira posição a ser utilizada no stack será a 63, ou seja 3Fh (o SP passa de 000000 para 111111) 4 de 10

3.3 Conjunto de Instruções O conjunto de instruções que se pretendem implementar no computador durante a primeira semana estão descritas na tabela 2: Tabela 2- Instruções assembly a implementar na 1ª semana Opcode Operação Modo Endereçamento Descrição Comentários 0-0000 CMP RA,M[RB] Registo (RA) M[(RB)] Compara RA com o dado contido na posição de memória endereçada por RB 1-0001 INC DR,RA Registo 2-0010 MOV DR,RA Registo (DR) (RA)+1 (DR) (RA) Incrementa de uma unidade o conteúdo do registo RA e guarda o resultado em DR Move o conteúdo do registo RA para o registo DR 3-0011 JMP address Directo (PC) address Salto incondicional para a posição de memória address 4-0100 SUB DR,RA Registo (DR) (DR) - (RA) Subtrai RA a DR e guarda o resultado em DR 5-0101 CALL address Directo SP SP-1, M[(SP)] PC, PC address Chama subrotina 6-0110 RET Implícito PC M[(SP)], SP SP+1 Retorna de subrotina 7-0111 CLR M[RA] Registo M[RA] 0 Coloca todos os bits da posição de memória endereçada por RA a zero. 8-1000 STR M[Op],RB Imediato M[(Op)] RB 9-1001 PUSH RA,RB Registo SP SP-1, M[(SP)] (RA), SP SP-1, M[(SP)] (RB), 10-1010 POP RA,RB Registo (RA) M[(SP)], SP SP+1 (RB) M[(SP)], SP SP+1 Escreve o conteúdo de RB na posição de memória endereçada pelo Operando. Guarda RA e RB no topo da pilha Coloca em RA e RB o topo da pilha 11-1011 INC M[DR] Registo M[(DR)] ) M[(DR)]+1 Incrementa a posição de memória endereçada por DR 12-1100 JC offset Relativo C=1: PC PC + offset Se C=1, move PC de offset posições 13-1101 JNC offset Relativo C=0: PC PC + offset Se C=0, move PC de offset posições 14-1110 SUBI DR,M[RB],Op Imediato (DR) M[(RB)] -Op Subtrai o valor do operando ao conteúdo de memória endereçado por RB 15-1111 SWAP RA,RB Registo (RA) (RB), (RB) (RA) Troca os conteúdos dos registos RA e RB Os grupos devem programar apenas parte das instruções apresentadas na tabela 2 de acordo com o número do grupo como especificado na tabela 3. Todos os grupos devem implementar as instruções com opcode 0 a 6. Tome atenção ao ponto 4.1.3 porque apesar de não ser necessário microprogramar algumas instruções os alunos devem apresentar os fluxogramas ASM de todas as instruções da tabela. Tabela 3- Distribuição de trabalho para os vários grupos Grupo 1 2 3 4 5 6 7 8 OPCODE 8 9 10 11 12 13 14 15 5 de 10

A ROM programada e fornecida pelo corpo docente que os alunos deverão utilizar na segunda semana implementa as instruções descritas na tabela 4: Tabela 4- Instruções assembly fornecidas para a 2ª semana Opcode Operação Modo Endereçamento Descrição Comentários 0-0000 SUM DR,RB,RA Registo (DR) (RA) + (RB) Soma RA a RB e guarda o resultado em DR 1-0001 MOVI DR,Op Imediato 2-0010 DEC DR Registo 3-0011 MOVSP DR Registo (DR) Op (DR) (DR)-1 (DR) (SP) Carrega a constante Op (com extensão de sinal) em DR Decrementa de uma unidade o conteúdo do registo DR Copia SP para DR 4-0100 SUMI DR, RB,Op Imediato (DR) (RB) + Op Soma RB ao Operando e guarda o resultado em DR 5-0101 SUB DR,RB,RA Registo (DR) (RB) (RA) Subtrai RA a RB e guarda o resultado em DR 6-0110 CALL address Directo SP SP-1,M[(SP)] PC, PC address 7-0111 RET Op Imediato PC M[(SP)] + 1, SP SP+1+(Op) Chama subrotina Retorna de subrotina e liberta (Op) posições da pilha. Modifica as flags. 8-1000 PUSH RA Registo SP SP-1, M[(SP)] (RA) Guarda RA no topo da pilha 9-1001 POP RA Registo (RA) M[(SP)], SP SP+1 Coloca em RA o topo da pilha 10-1010 JMP offset Relativo (PC) PC + offset Salto incondicional de offset posições 11-1011 JN offset Relativo N=1: PC PC + offset Se N=1, move PC de offset posições 12-1100 LD DR,M[RB] Registo 13-1101 STR M[RB],RA Registo (DR) M[(RB)] M[(RB)] (RA) Copia o dado na posição de memória endereçada por RB para DR Escreve o conteúdo de RA na posição de memória endereçada por RB 14-1110 CMP RB,Op Imediato RB Op Compara RB ao operando e modifica os bits de estado 15-1111 NEG DR Registo DR - DR Inverte o sinal do registo DR 3.4 Unidade de Controlo Microprogramado A UC é constituída por uma ROM de 64x35 bits, pelo Control Address Register (CAR), que contém o endereço da microinstrução a ser executada e inicializado a 0, e pelos Muxes C e R, cuja função é controlar o sequenciamento das microinstruções contidas na ROM (ver abaixo a descrição mais pormenorizada). O CAR não é um simples registo, mas sim um contador que pode ser incrementado (L/CNT = 1) ou carregado em paralelo (L/CNT =0). A ROM deverá conter os microprogramas que permitem controlar o computador. Cada instrução de assembly contida na RAM contém um OpCode de 4 bits que corresponde aos 4 bits menos significativos do endereço da ROM. A palavra da ROM contida no endereço que é constituído por 01 seguido do OPCODE, marca o início do microprograma que executa essa instrução de assembly. Por exemplo, se a instrução assembly MOVI DR,Op, que carrega o registo DR com a constante Op, tivesse o OpCode = AAAA o início do microprograma que executa essa instrução começaria no endereço 01AAAA da ROM. O formato de cada palavra da ROM de controlo (35 bits) é o seguinte: 6 de 10

NADR MC MR IRW DT M Dsel RW AT M Asel BT M Bsel M A MB FS FW MW MD MM PCC SPC 6 1 2 1 1 2 1 1 2 1 2 1 2 3 1 1 1 2 2 2 Em que: NADR (6 bits): Next Address. Endereço da próxima microinstrução na ROM; MC (1 bit): selecciona endereço a carregar no CAR (0=NADR, 1=01 OpCode); MR (2 bits): Mux de Selecção de Carregamento e Controlo do CAR (00=carrega CAR, 01=incrementa CAR, 10=salta se N=1, 11=salta se C=0); IRW (1bit): controla a escrita no Instruction Register (0=hold; 1=write); DT (1bit): bit mais significativo do sinal Dsel. Permite aceder ao registo Rt quando DT=1; M Dsel (2 bits): selecciona os 3 bits menos significativos do sinal Dsel de acordo com a figura 2; RW (1 bit): controla a escrita nos registos da UA (0=hold; 1=write); AT (1 bit): bit mais significativo do sinal Asel. Permite aceder ao registo Rt quando AT=1; M Asel (2 bits): selecciona os 3 bits menos significativos do sinal Asel de acordo com a figura 2; BT (1 bit): bit mais significativo do sinal Bsel. Permite aceder ao registo Rt quando BT=1; M Bsel (2 bits): selecciona os 3 bits menos significativos do sinal Bsel de acordo com a figura 2; MA (1 bit): selecciona operando X da UF (MA=0: X=registo da UA seleccionado por Asel; MA=1: X=constante proveniente do 6 bits menos significativos do IR); MB (2 bits): selecciona operando Y da UF (MB=00: Y = registo da UA seleccionado por Bsel; MB=01: Y=dado contido na RAM; MB=10: Y=SP); FS (3 bits): selecciona operação a executar na UF de acordo com a tabela 1; FW (1 bit): controla a escrita nos registos que guardam as flags C e N (0=hold; 1=write); MW (1 bit): controla a escrita na RAM (0=read;1=write); MD(1 bit): controla os dados escritos na RAM. Se MD=0 é escrito na RAM o conteúdo do registo endereçado por ASel. Se MD=1 é escrito na RAM o valor do PC. MM (2 bits): selecciona endereço para RAM (MM=00: endereço provém do registo da UA escolhido por Bsel; MM=01: endereço provém de SP; MM=10: endereço provém do PC); PCC (2 bits): controla a operação do PC (PCC=00: hold; PCC=01: PC PC+1; PCC=10: PC address; PCC=11: PC PC + offset); SPC (2 bits): controla a operação do SP (SPC=00: hold; SPC=01: SP SP+1; SPC=10: SP SP-1). 4 PROJECTO O trabalho consistirá essencialmente no projecto e programação das microinstruções que implementam na UC o conjunto de instruções assembly definido para o computador. O trabalho da segunda semana consiste em fazer um programa utilizando as instruções assembly disponíveis numa ROM previamente programada pelo corpo docente. 4.1 Microprogramação do Conjunto de Instruções (1ª semana) 4.1.1 Identifique justificando, quais das instruções da tabela 2 necessitam de mais que uma microinstrução para ser implementadas (para além do IF e o EX0). 4.1.2 Defina quais os valores das variáveis de controlo da ROM para todas as instruções indicadas na tabela 2 que só necessitam de uma microinstrução para ser implementadas. 7 de 10

4.1.3 Crie os fluxogramas ASM das microrotinas das instruções que necessitam de mais do que 1 microinstrução, indicando mnemónicas, endereços e transferências de registos em cada estado, para todas as instruções indicadas na tabela 2. Os alunos devem ter o cuidado de realizar os diagramas com o mínimo de estados possíveis, correspondendo a cada estado um endereço da ROM. 4.1.4 Note que só é possível armazenar dados nos bits menos significativos da memória RAM. Indique o que devia alterar na estrutura do computador para que fosse possível ter duas microinstruções distintas STRDOWN M[RB],RA e STRUP M[RB],RA em que o armazenamento do registo RA na memória é feito respectivamente nos bits mais significativos (STRUP) ou nos menos significativos (STRDOWN). 4.1.5 Note também que a Unidade Funcional descrita na tabela 1 não possui forma de fazer deslocamentos. No entanto a implementação de um controlo microprogramado alarga a flexibilidade das operações da UF. Indique o fluxograma ASM da instrução SHL DR, RA (shift à esquerda de RA bits do registo DR) sem alterar a arquitectura definida. Por exemplo, se DR= 000001 e RA = 000010 então após esta instrução o conteúdo de DR será 000100. 4.2 Programação da ROM (1ª semana) 4.2.1 Preencha uma tabela com o conteúdo da ROM (Anexo A) de acordo com as alíneas 4.1.2 e 4.1.3 apenas para as instruções com opcode 0 a 6 e para a instrução especificada na tabela 3 de acordo com o número do grupo e também para as microinstruções Instruction Fetch (IF) e Execute (EX0). Apresente a tabela em binário em que as colunas correspondem a cada variável de controlo. Os endereços da ROM 01000 a 011111 que não forem necessários (porque nenhum grupo irá programar toda a tabela) devem ser deixados a branco. Não se esqueça que todas as indiferenças devem ser assinaladas. 4.2.2 Programe e teste a ROM no Xilinx. 4.3 Programa assembly (2ª semana) Na segunda semana e a partir das instruções da tabela 4 os alunos deverão criar um programa que execute a multiplicação de números binários de 6 bits (positivos ou negativos no formato complemento para 2). Antes de escrever o código quer do programa principal quer da rotina, os alunos deverão realizar um fluxograma dos mesmos descrevendo a metodologia usada na implementação. 4.3.1 Rotina: Os alunos deverão criar uma rotina em código assembly que execute a multiplicação de dois números binários de 6 bits (positivos ou negativos no formato complemento para 2). O multiplicando e o multiplicador assim como o resultado deverão ser passados/devolvido à rotina de acordo com a tabela seguinte: Tabela 5- Descrição da subrotina a implementar para os vários turnos Turno Multiplicando Multiplicador Resultado Descrição 3ª 8h30m 3ª 12h00 3ª 15h00 R0 R1 SP: end SP: op R7 R7 SP: end SP: end R0 5ª SP: op SP:op R7 6ª R7 SP: op SP: end Os operandos são passados à rotina pelos registos R0 e R1 e o resultado deve ser colocado num endereço de memória passado pela pilha. Os operandos são passados à rotina respectivamente pelo registo R7 e por um valor passado pela pilha. O resultado é retornado através do registo R7 Os endereços de memória que contêm os operandos são passados pela pilha e o resultado é devolvido através do registo R0. Os operandos são passados pela pilha e o resultado é devolvido através do registo R7. Os operandos são passados respectivamente pelo registo R7 e pela pilha e o resultado deve ser colocado num endereço de memória passado pela pilha. A multiplicação deverá ser realizada usando o algoritmo de somas sucessivas. Por exemplo, 3*(-1) = (-1)+(-1)+(-1). Ignore os caso em que o resultado não cabe nos 6 bits. 8 de 10

4.3.2 Programa principal: Os alunos devem criar um programa principal que deverá chamar a rotina especificada anteriormente de forma a executar 3 multiplicações distintas com dados contidos na memória. A programação das memórias de microinstruções (ROM) e de instruções/dados/pilha (RAM) está de acordo com o documento explicativo apresentado no trabalho laboratorial 2. Os dados a multiplicar assim como o seu resultado devem ser colocados na memória RAM de acordo com a figura seguinte: Figura 4- Distribuição de endereços da RAM para dados, programa e pilha Na aula o docente indicará quais os valores A a F que devem ser colocados nos endereços de memória indicados na figura de forma a testar o correcto funcionamento do programa criado pelos alunos. Pode acontecer que o programa mais a rotina criados pelos alunos necessitem de mais do que 50 endereços. Nesse caso a figura 4 não será possível de respeitar e os alunos devem deslocar a zona de dados mais para baixo, retirando espaço reservado para a pilha. Os grupos que o fizerem serão penalizados no relatório. 5 FASEAMENTO E RELATÓRIO O trabalho decorrerá durante 2 semanas, devendo ser discutido e apresentado durante a segunda aula de laboratório. As aulas de laboratório destinam-se, essencialmente, à correcção de erros e bugs e a tirar dúvidas que possam existir sobre a implementação do projecto. O trabalho deverá ser planeado e desenvolvido, tanto quanto possível, fora do horário de laboratório, sendo impossível realizá-lo sem qualquer preparação prévia e apenas durante as 4 horas de laboratório. Tendo em consideração estes aspectos, o trabalho desenvolvido será avaliado por fases. Assim: 1ª SEMANA No início da 1ª aula de laboratório os alunos deverão apresentar o trabalho correspondente às alíneas 4.1 e 4.2. Em particular, deve ser apresentada a tabela do ponto 4.2.1, os fluxogramas ASM do ponto 4.1.3 e as respostas às perguntas feitas nos pontos 4.1.4 e 4.1.5. Serão fornecidas várias RAM (ver anexo B) que contêm pequenos programas para testar as instruções assembly microprogramadas na ROM pelo alunos. 2ª SEMANA No início da 2ª aula de laboratório os alunos deverão apresentar o trabalho correspondente à alínea 4.3. Deve ser testado na aula o programa assembly feito pelos alunos para multiplicar valores positivos e negativos com 6 bits. Os alunos devem entregar um relatório no máximo com 5 páginas (excluindo anexos) descrevendo as decisões tomadas no desenvolvimento do projecto, os fluxogramas especificados no ponto 4.3 e o código do programa devidamente comentado. Não se esqueça também de apresentar uma pequena introdução, conclusão e comentários aos testes realizados na 1ª semana. 9 de 10

6 AVALIAÇÃO A avaliação do projecto será realizada parcelarmente e de acordo com os seguintes pontos: Relatório (7 Val.) Fluxogramas ASM do ponto 4.1.3 (3 val) Respostas às perguntas 4.1.4 e 4.1.5 (1 val) Funcionamento da Unidade de Controlo Microprogramado (5 Val.) Funcionamento do Programa assembly: Rotina + programa principal (2+2 Val.) Bom trabalho 7 BIBLIOGRAFIA [1] M. Morris Mano, Charles R. Kime, Logic and Computer Design Fundamentals, Second Edition, Prentice-Hall International, Inc. (Capítulo 8 a 10) [2] N. Horta, Microprocessadores Unidade de Controlo, Aulas Teóricas, 2006. [3] N. Horta, Manual para Download do Xilinx, Slides, 2006. [4] N. Horta, Manual de Introdução ao Xilinx, Slides, 2006. [5] N. Horta, Exemplo de Projecto Barramentos e Símbolos, Slides, 2006. 10 de 10