• Nenhum resultado encontrado

Arquitetura de Computadores

N/A
N/A
Protected

Academic year: 2021

Share "Arquitetura de Computadores"

Copied!
11
0
0

Texto

(1)

1

Arquitetura de Computadores

3º Trabalho de Laboratório

Introdução à Microprogramação e ao Processador P3

Objetivo: Pretende-se com este trabalho conferir aos alunos um conjunto de competências relacionadas com a

programação em microcódigo e em assembly e, ainda, interação com a janela de texto do P3. O trabalho terá a duração de duas semanas. Na segunda semana o trabalho deve estar completo, sendo realizada a demonstração do trabalho. O relatório final será entregue até à sexta-feira da segunda semana de laboratório, ou seja, até dia 8 de Maio, via Fénix. O trabalho deverá ser preparado fora do horário de laboratório, destinando-se as 3 horas de aula à resolução de eventuais dúvidas e demonstração do trabalho realizado.

1 I

NTRODUÇÃO

Durante as duas semanas serão desenvolvidos em assembler e em microcódigo pequenos programas que trabalhão com vetores. Far-se-á igualmente alguma interação com a janela de texto do P3.

2 M

ICRO

-

PROGRAMAÇÃO

(1

ª SEMANA

)

Os alunos deverão implementar novas instruções que executam as seguintes funcionalidades em microcódigo do P3, de acordo com o dia de semana do laboratório que frequentam:

Segunda-feira: Instrução MAXV Rvector, Rdim. Determinar o maior valor de um vetor de números.

Terça-feira: Instrução SUMIV Rvector, Rdim. Somar os números ímpares de um vetor de números. Para o

caso dos números negativos considere estes ímpares se o seu valor absoluto for ímpar. Considere o zero como par.

Quarta-feira: Instrução ABSV Rvector, Rdim. Troca todos os elementos de um vetor pelo seu valor absoluto.

Quinta-feira: Instrução CNTPV Rvector, Rdim. Determinar o total de números pares num vetor. Para o caso

dos números negativos considere estes pares se o seu valor absoluto for par. Considere o zero par.

Sexta-feira: Instrução MINV Rvector, Rdim. Determinar o menor valor de um vetor de números.

O endereço do vetor é indicado no operando AD (primeiro) da instrução e a dimensão do vetor no operando B (segundo da instrução). O resultado deve aparecer no registo de destino (primeiro operando).

2.1 (3 val) Microcódigo da Instrução em Linguagem de Transferência de Registos

Os alunos devem começar escrever o micro-código da instrução em linguagem de transferência de registos (LTR). O endereço da instrução será o 112h correspondente há primeira posição livre na ROM de controlo. Devem usar como exemplo a codificação de outras instruções, na ROM de controlo, como por exemplo a instrução SHR (endereço 06Ah da ROM). Para tal devem estudar o microcódigo das instruções disponível no manual do P3 na página 37, na coluna operação.

Nota: Devido a um bug no simulador do P3 não deve utilizar o registo auxiliar R9.

2.2 (2 val) Microcódigo da Instrução em Binário

De seguida o microcódigo deve ser codificado em binário. Para isso deve usar a palavra de controlo do P3 apresentada na Figura 1. Preencha uma tabela com o micro-código em LTR e a correspondente codificação em binário. Não se esqueça de apresentar o formato da palavra de controlo no topo da tabela.

(2)

2

Figura 1 - Palavra de controlo do P3

2.3 (2 val) Teste da Instrução

É fornecido junto com o enunciado um pequeno programa para o teste do funcionamento da instrução: “teste.as”. No programa está definido um vetor que deve ser utilizado para testar a instrução. A instrução a implementar corresponde à instrução I2OP (Instrução de dois operandos), que têm o OPCODE 101111b, que não é normalmente utilizado. A entrada da ROM A correspondente a este OPCODE encontra-se a zero (como se pode verificar na página 36 do manual do P3) pelo que necessita de ser modificada.

Para programar a ROM A é igualmente fornecido o ficheiro ROMA.rom, que programa a entrada desejada da ROM para a primeira posição livre na ROM de controlo, o endereço 112h.

Para testar a instrução devem começar por gerar o ficheiro de programação da ROM de controlo. Este deve ter o seguinte formato:

 Linhas com endereço seguido da microinstrução. Estes devem estar separados por espaços. Não utilize o TAB.

 Os endereços e microinstruções devem estar em hexadecimal mas não devem incluir a letra ´h´.

 Exemplo de uma linha: 02A 000A009F

 Introduza apenas as linhas que pretende modificar. Chame o ficheiro “ROM_controlo.rom”.

Para testar a instrução faça os seguintes passos:

1. Compile o ficheiro “teste.as”: Para tal na linha de comandos e na mesma diretoria em que se encontra o assemblador do P3 (p3as.exe) e o ficheiro “teste.as” escreva o comando:

>> p3as teste.as

Tal gera os ficheiros “teste.exe” e “teste.lis”. O ficheiro teste.exe é o ficheiro executável que é lido pelo simulador do P3. O ficheiro teste.lis contém os valores de todas as constantes e etiquetas utilizadas pelo assemblador e pode ser útil para debug de programas.

2. Abra o simulador do P3, clicando duas vezes no ficheiro “p3sim.jar” ou correndo o comando java -jar p3sim.jar.

3. Carregue o ficheiro de exemplo. Faça “Ficheiro->Carrega” Programa e escolha o ficheiro “teste.exe”.

4. Carrege a ROM A. Faça “Ficheiro->Carrega ROM A” e escolha o ficheiro “ROMA.rom” fornecido.

5. Carrege o microcódigo da vossa instrução. Faça “Ficheiro->Carrega ROM de Controlo” e escolha o ficheiro “ROM_controlo.rom”

6. Pressione Corre, e verifique o resultado do programa.

0 IAK MA MB M2 MRB WM 1 LS CC LI LF 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 WR MD MAD RAD MCOND CONST/NA RB M5 SR1 SR2 FM CALU

(3)

3

Caso o programa não funcione à primeira pode fazer debug:

1. Faça Ver->Ver Controlo.

2. Faça Reinicia.

3. Pressione Instrução, para correr a primeira instrução.

4. Corra o microprograma passo a passo. Vá pressionando clock e verifique se o valor dos registos é o

esperado, nomeadamente o CAR e os registos auxiliares.

3 A

SSEMBLER

(2

ª SEMANA

)

Na segunda semana será desenvolvido código em assembler correspondente às instruções implementadas na primeira semana e de utilização da janela de texto do P3.

3.1 (1 val) Escreva na Janela de Texto a String “O vetor é:”

Utilize a rotina EscString do ficheiro “demo.as” que se encontra na coletânea de exemplos fornecida na página da cadeira.

3.2 (2 val) Rotina para Escrever um Número na Janela de Texto

Comece por fazer uma rotina que recebe um número (positivo ou negativo) em R1 e o escreve na janela de texto. Faça a conversão do número em decimal por divisões sucessivas por 10. Para converter o dígito decimal em ASCII basta somar a contante ‘0’ (48). Teste a rotina.

3.3 (1 val) Rotina para Escrever um Vetor na Janela de Texto

Faça uma rotina para escrever um vetor de números na janela de texto. A rotina deve receber o endereço do vetor e a dimensão do vetor na pilha. Teste a rotina.

3.4 (3 val) Implementação das Instruções em Assembler

Faça duas rotinas que implementam duas das instruções implementadas na semana passada. As instruções a implementar dependem do turno de laboratório que frequentam, nomeadamente:

Segunda-feira: Instrução MAXV Rvector, Rdim e SUMIV Rvector, Rdim.

Terça-feira: Instrução SUMIV Rvector, Rdim e ABSV Rvector, Rdim.

Quarta-feira: Instrução ABSV Rvector, Rdim e CNTPV Rvector, Rdim.

Quinta-feira: Instrução CNTPV Rvector, Rdim e MINV Rvector, Rdim.

Sexta-feira: Instrução MINV Rvector, Rdim e MAXV Rvector, Rdim

(4)

4

3.5 (1 val) Escreva o Resultado das Rotinas na Janela de Texto

Escreva o resultado das rotinas na janela de texto. No caso da rotina ABSV escreva o vetor resultante.

4 (2

VAL

)

R

ELATÓRIO

O relatório deverá ser entregue até ao final da semana depois da segunda aula de laboratório, ou seja sexta-feira dia 8 de Maio. O relatório deve ser fornecido no formato “.pdf” e o código em formato de texto, “.as” e em formato “.pdf”, tudo num ficheiro zip submetido via Fénix. Este deverá ser sucinto (dispensam-se introduções teóricas), mas terá obrigatoriamente que conter:

 O microcódigo em linguagem de transferência de registos, e uma tabela com os sinais para cada microinstrução.

 Resposta e justificações pedidas no enunciado;

 Conclusões e comentários pertinentes.

 Anexo:

 Código fonte, devidamente comentado, indentado e formatado.

 Descrição de alterações de última hora.

O relatório completo (excluindo código fonte) não deverá exceder as 4 páginas.

Por fim, essencial a consulta do texto “Manual do Simulador do Processador P3” e o “ANEXO de Arquitetura de Computadores”, e aconselha-se o estudo dos programa de demonstração disponibilizados. Este material está disponível na página da cadeira.

5 (3

VAL

)

D

EMONSTRAÇÃO DO

T

RABALHO

Na segunda semana do laboratório realizar-se-á a demonstração do trabalho. Nesta fase os alunos devem ter o seu trabalho completo. A demonstração consiste em mostrar ao docente o trabalho em funcionamento para determinar quais dos pontos das alíneas anteriores estão em funcionamento. Além disso será realizada uma pequena oral, com perguntas sobre o trabalho aos alunos.

6 A

VALIAÇÃO

A avaliação do trabalho será realizada, ao longo das duas aulas de laboratório, e terá duas componentes, em grupo e individual. A componente em grupo (75% da nota) é avaliada de acordo com as cotações indicadas no enunciado. Valoriza-se, em particular: (1) a participação e empenho dos alunos nas aulas; (2) as respostas às questões lançadas pelo docente sobre o projeto apresentado; (3) a originalidade da solução; (4) justificação das diferentes opções de projeto; (5) o cumprimento da calendarização do trabalho; (6) a boa estruturação, a escrita sucinta e objetivas e, ainda, a boa apresentação do relatório. A segunda componente de avaliação, de cariz individual, terá um peso de 25% na nota do trabalho de laboratório e será dada pelas respostas aos dois mini-testes, os quais se realizam no início de cada aula de laboratório.

7 B

IBLIOGRAFIA

[1] N. Horta, “Arquitectura de Computadores”, Aulas Teóricas.

[2] M. Morris Mano, Charles R. Kime, “Logic and Computer Design Fundamentals”, 4th Edition Updated, Prentice-Hall International, 2008.

[3] G. Arroz, J. Monteiro, A. Oliveira, “Arquitectura de Computadores: dos Sistemas Digitais aos Microprocessadores”, IST Press, 2007.

[4] G. Arroz, J.C. Monteiro, A. Oliveira, “Manual do Simulador do P3”, IST, 2005

(5)

5

A

NEXO

A

B

REVE

I

NTRODUÇÃO À

M

ICROPROGRAMAÇÃO DO

P3

O processador P3 pode ser microprogramado. Para tal deve-se utilizar a palavra de controlo representada da Figura 1. Os sinais destes utilizados nesta palavra estão representados no diagrama de blocos do P3 na Figura 3 e Figura 4. Esta informação também pode ser consultada no “ANEXO de Arquitectura de Computadores” e no livro “Arquitectura de Computadores: dos Sistemas Digitais aos Microprocessadores” apresentados na bibliografia.

Figura 2 - Palavra de controlo do P3

Figura 3 – Unidade de Processamento de Dados do P3

F

0 IAK MA MB M2 MRB WM

1 LS CC LI LF

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

M5 SR1 SR2 FM CALU WR MD MAD RAD

MCOND CONST/NA

(6)

6

Figura 4 – Unidade de Controlo do P3

A palavra de controlo tem dois modos dependendo do valor do sinal F. Quando F=0 usam-se os sinais de cima na Figura 1, quando F=1 usam-se os sinais de baixo. Tipicamente F=0 corresponde a operação na ULA e F=1 a operações de salto ou com constantes, como se pode constatar.

Na Figura 3 e Figura 4 estão assinalados a azul os elementos de memória. O sinal M5 permite selecionar como é atualizado o CAR. Quando M5=2 é selecionada a saída da memória A que (ROM A) que faz o mapeamento do OPCODE nos endereços de microcódigo que implementa a instrução. Tal deve ser utlizado na fase EXE da instrução. Quando M5=3 o CAR é carregado com o valor da memória B (ROM B). Tal é utilizado para chamar as rotinas de leitura e escrita de operandos, em conjunto com os sinais SR1 SR2 de acordo com a tabela que se segue:

Tabela 1 – Organização da ROM B

A execução de uma instrução de assembler segue o fluxograma apresentado na Figura 5. O caso da implementação de uma rotina de 2 operandos como é pedido neste guia corresponde ao OPCODE=10XXXX. Estas instruções devem começar por chamar a rotina que lê os operandos colocando SR2=1 e M5=3. Esta rotina copia para os registos RD e SD (R13 e R11) os parâmetros da rotina. No final deve-se chamar a rotina de escrita dos resultados fazendo SR2=0, SR1=1 e M5=3. Esta rotina passa o valor que está no registo auxiliar RD para o destino.

(7)

7

Figura 5 – Fluxograma de execução de uma instrução de assembler.

Os registos do processador P3 estão apresentados na Tabela 2.

Tabela 2 – Registos do P3

(8)

8

Tabela 3 - Micro-operações da ULA

Note que na Figura 4 existem dois tipos de sinais de Flags os sinais em maiúsculas (Z, C, N, O e P) e os sinais minúsculos (z e c). Os primeiros provêm do registo de estado enquanto os segundos vêm do estado da ULA, e correspondem a informação sobre o resultado da instrução executada no ciclo de clock anterior. Estes últimos são os em geral utilizados para o desenvolvimento de micro-programas. Note que por exemplo não existe nenhuma flag n, pelo que em microcódigo para testar se um número é negativo deve testar explicitamente o bit mais significativo do número.

Tabela 4 – Registo de Estado

E Z C N O

Na Tabela 5 apresenta-se uma tabela com uma breve descrição dos sinais de controlo do P3. Esta tabela não dispensa a consulta das figuras 3 e 4.

(9)

9

Tabela 5 – Sinais de Controlo F Permite selecionar o formato da microinstrução

M5 Permite selecionar o que será carregado no CAR no próximo ciclo de relógio: 0 – endereço provém de NA ou CAR+1, dependendo da condição de salto; 1 - endereço provém de SBR, corresponde a retorno de micro-subrotinas; 2 – endereço provém da ROM A, corresponde fase de EXE em que é carregado o endereço do microcódigo da instrução; 3 – endereço provém da ROM B, corresponde a saltos para rotinas de leitura e escrita de operandos, tal como descrito pela Tabela 1.

SR1,SR2 Determina o tipo de rotina que será chamada quando M5=3 de acordo com o descrito pela Tabela 1.

IAK Assinala que foi atendida uma interrupção.

FM Cada um dos bits ativa a escrita do bit correspondente do registo de estado.

CALU Controla a operação realizada pela ULA.

MA Escolhe para a entrada A da ULA entre a saída A ou B do banco de registos.

MB Escolhe para a entrada B da ULA entre a saída B do banco de registos ou o registo de instrução (RI)

M2 É utlizado para escolher entre o primeiro operando ou o segundo operando para o SelAD ou SelB.

MRB É utilizado para indicar que o SelB provém da microinstrução (RB).

RB É utlizado para indicar o operando B na microinstrução.

WM Ativa a escrita na memória.

MCOND Especifica o tipo de salto no microcódigo.

CC Complementa o tipo de salto especificado por MCOND.

LI Carrega o registo de instruções (RI)

LF Carrega o registo de estado com o valor proveniente do BUS A.

CONST/NA Constante especificada na microinstrução/Endereço de salto no microcódigo. WR Ativa a escrita no registo de destino do banco de registos.

MD Seleciona o que será colocado no barramento D: 0 - valor da ULA; 1 – valor da memória; 2 – registo de estado; 3 – constante da microinstrução.

MAD É utilizado para indicar que SelAD provém da microinstrução (RAD).

RAD É utlizado para indicar o operando AD na microinstrução.

A.1 Exemplo: Instrução SHR

Apresenta-se de seguida o microcódigo referente à instrução SHR (Shift Rigth). Esta instrução faz um deslocamento a direita um número de vezes indicado nos bits 9 a 6 da instrução, tal como apresentado na Figura 6. Para obter estes bits é efetuado um AND do registo IR com a constante 03C0h e o resultado é guardado no registo R8. Para contar o número de deslocamentos efetuado vai se subtraindo o valor 0040h (bit 6 a um) a R8 até este chegar a zero.

Figura 6 – Formato da instrução SHR.

Na Tabela 6 encontra-se o microcódigo comentado da instrução. Este código encontra-se na página 38 e 39 do manual do P3.

(10)

10

Tabela 6 – Microcódigo da Instrução SHR

Endereço Etiqueta RTL Descrição

106 SHR0 R8<-03c0h, SBR<-CAR+1, CAR<-F1

Carrega R8 com 03C0h, guarda o valor de retorno do CAR em SBR e salta para a rotina

de leitura dos operandos (F1). Neste caso é uma rotina com um operando por isso ativa os

sinais SR1 e SR2 de acordo. M5=3, LS=1, F=1 107 SHR1 R8<-R8 and IR Depois de retornar da rotina de leitura dos

operandos, faz um AND de 03C0h com IR e guarda em R8 para obter o número de deslocamentos. Faz CALU=AND. Seleciona como operando A e D o R8 fazendo MAD=1 e

RAD=8. Seleciona como operando B o IR fazendo MB=1. WR=1, F=0 108 SHR2 R9<-0040h Coloca a constante 40h no registo R9.

Seleciona como o destino o R9 fazendo MAD=1 e RAD=9. Coloca a constante no barramento D fazendo MD=3 e CONST=40h.

WR=1, F=1

109 SHR3 RD<-shr RD, flags ZCN Faz um SHR (simples) ao registo RD, que é o registo 13 (Dh). Para isso faz CALU=SHR e MAD=1 e RAD=13. Ativa a escrita das flags ZCN

fazendo FM=1110b. WR=1, F=0. 110 SHR4 R8<-R8-R9 Subtrai R9 a R8. Para isso coloca R9 no

barramento B fazendo MRB=1 e RB=9. Faz ainda MAD=1, RAD=8 e WR=1, F=0. 111 SHR5 !z?CAR<-SHR3 Verifica se o resultado da última

microinstrução foi zero. Se não (! representa negação) então salta para SHR3. Ou seja vai

fazendo deslocamentos à direita até o contador chegar a zero. F=1, MCOND=BZ,

CC=1, NA=SHR3.

112 SHR6 CAR<-WB Salta para a rotina de escrita dos resultados. Tal corresponde a fazer M5=3 e SR1=1, SR2=0,

(11)

1

Tabela 7 – Microcódigo da instrução SHR com os respetivos sinais de controlo. F

0 IAK MA MB M2 MRB WM

1 LS CC LI LF

Endereço Hex Micro_inst RTL 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 106 6A E403C0F8 R8<-03c0h, SBR<-CAR+1, CAR<-F1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0

107 6B 00128098 R8<-R8 and IR 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 108 6C 804040F9 R9<-0040h 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 1 1 0 0 1 109 6D 03A0009D RD<-shr RD, flags ZCN 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 1 110 6E 00023298 R8<-R8-R9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 0 111 6F 80C06D00 !z?CAR<-SHR3 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 112 70 70000000 CAR<-WB 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 WR MD MAD RAD MCOND CONST/NA M5 SR1 SR2 FM CALU RB

Referências

Documentos relacionados

Em síntese, a matéria trazia informações que demonstravam um conflito de interesses entre a atuação de Giovanni Cerri como Secretário de Saúde e

Para uma melhor compreensão dos novos usos propostos pela PLC 69-2011foi elaborado um quadro comparativo considerando os usos industriais e de prestação de

Esta pesquisa tem como objetivo traçar um panorama histórico das conquistas de políticas públicas voltadas para a população de Lésbicas, Gays, Bissexuais, Transexuais,

Entretanto, na prática clínica as verificaçõesestão associadas a praticamente todas as outras dimensões: a medo de contaminação (para ver se não existe sujeira ou se

Nosso estudo é dividido em duas partes: Primeiro encontramos uma limitação para a cardinalidade do gênero em HNN-extensões onde os subgrupos associados são iguais (Teorema 2.31)

O Curso de Engenharia de Automação Industrial foi desenvolvido com o intuito de ocupar um espaço importante em nível local e colaborar em nível regional e nacional nessa

In this work, improved curves are the head versus flow curves predicted based on the correlations presented in Table 2 and improved by a shut-off head prediction