APS4

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 21

APS4 - Nı́vel do Sistema de Computador

Relatório de Atividade

Equipe 9
Breno Orapacen da Nobrega Oliveira Filho
Bernardo Siqueira Batista
Danilo Regino Barrote
Vitor Buarque de Gusmão Montenegro

CIN0130 - Sistemas Digitais


Prof. Dr. Stefan Michael Blawid
Curso de Ciência da Computação
Recife, 20 de julho de 2024
Conteúdo

1 Introdução 2

2 Parte 1 - Jogar 3

2.1 Questão 1 -Sistema de Computador . . . . . . . . . . . . . . . . . . . . . . 3

3 Parte 2 - Desenvolver 8

3.1 Questão 2 - Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.2 Questão 3 - Data Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3.3 Questão 4 - Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.4 Questão 5 - Run a Program . . . . . . . . . . . . . . . . . . . . . . . . . . 15

4 Questão 6 - Conclusão 18

1
1 Introdução

Progresso e as nuances do nosso trabalho no APS4.

Primeiramente, faremos a exposição dos nı́veis finais do Nand Game, no módulo


de sistema de computador.

Após isso, apresentaremos nosso computador completo em 8 bits, com todos os


esquemas de instrução fornecidos pelo arquiteto implementados. Com isso, testaremos
alguns programas, como a sequência de Fibonacci, operações lógicas, carregamentos e
buscas na memória, entre outros. O código completo do computador ultrapassa as 2000
linhas, feito completamente em Verilog.

O computador foi organizado em pastas que remetem a arquitetura de blocos


fornecida pelo arquiteto. Cada bloco funcional importa arquivos isolados de módulos,
como ALU, ROM, RW-Memory, Contadores e registradores.

Cada componente foi devidamente testado por meio de testbenches. Os progra-


mas que elaboramos estarão em um arquivo de texto, devidamente documentados. Os
programas são carregados via ROM e lidos pela CPU.

Os códigos apresentados foram escritos no NeoVim e no Visual Studio Code.


Os códigos foram compilados para binários por meio do Icarus Verilog e os dumps em
”.vcd”foram analisados com o GTKWave.

Optamos por não fazer a sı́ntese do nosso circuito, visto que são utilizados mui-
tas funcionalidades não-sintetizáveis do Verilog em nossa composição. Além disso, os
diagramas de blocos fornecidos representam em sua totalidade o projeto.

No arquivo ”.7z”, os arquivos ”f iletree.txt” mostram a estrutura dos diretórios e


tentam orientar o leitor sobre onde está cada arquivo.

Este relatório abrange ”Jogar & Desenvolver”do APS4.

2
2 Parte 1 - Jogar

2.1 Questão 1 -Sistema de Computador

Primeiros passos para montar um sistema em Verilog

Inicialmente, seguindo as instruções do NAND Game, fizemos a memória combi-


nada

Figura 1: Combined Memory

3
Em seguida, construimos o sistema de instruções

Figura 2: Instruction

Esse componente redireciona uma stream de bits de instrução, definindo qual


operação a ALU deve fazer, sendo um módulo integral para o correto funcionamento
do computador.

4
E então, fomos trabalhar na unidade de controle do nosso processador.

Figura 3: Control Unit

A unidade de controle é basicamente o cérebro do nosso processador. É responsavel


por escolher corretamente o que o computador deve fazer com base em cada entrada. No
nosso projeto, utilizamos um modelo de FSM para executar essa tarefa.

5
E finalmente, encaixamos todas as peças do nosso quebra-cabeça, que culminou no
computador.

Figura 4: Computer

Dessa forma, chegamos no objetivo final da nossa disciplina, que era montar um
computador funcional com base na componentização das portas NAND.

Com tudo funcionando corretamente, nosso computador consegue fazer uso de


registros, memoria de leitura-escrita e ROM. Dessa forma, podemos trabalhar com um
volume maior de dados e realizar operações mais complexas.

6
Por último, fizemos um dispositivo representativo de Input-Output.

Figura 5: Input-Output

Com isso, finalizamos o último módulo da parte de Hardware do NAND Game.

7
3 Parte 2 - Desenvolver

3.1 Questão 2 - Memory

Testando o módulo Memory

Com base no diagrama de blocos, juntamente com os códigos fornecidos pelo ar-
quiteto, criamos o sistema de memória para nosso computador.

Figura 6: Memory Diagram

Então, após a implementação, fomos testar através de testbenches se nosso sistema


funcionava corretamente. Conseguimos, com sucesso, ler dados da ROM, ler e escrever
dados na ”RAM”, e interagir com dados nas portas de saı́da.

8
Figura 7: Writing A to RAM and loading it into B

Figura 8: Using Output Port

Figura 9: Loading Output from ROM

As minúcias do processo de execução do computador serão abordadas mais a frente


por meio da análise de formas de onda no nosso programa proposto. Os processos se
repetem para qualquer tipo de instrução.

9
3.2 Questão 3 - Data Path

Projetando os caminhos por onde os dados vão fluir

Com nossa memória pronta, podemos construir o Data Path, que funciona basica-
mente como um multiplexador gigante com diversas funções.

Figura 10: Data Path Diagram

Analisamos casos onde registradores eram carregados da memória, escritos na


memória, diferentes operações de ALU, e condições de calculos baseadas no registrador
CCR.

10
Figura 11: Arithmetic Operations

Figura 12: Boolean Operations

Figura 13: Branch if Equal to Zero

É notável que em alguns momentos, B parece assumir valores de A. Isso acontece


pois precisamos trocar o conteúdo dos registradores (B deve assumir o valor de A) pois
a ALU é programada para executar as operações considerando B como a sua entrada
primária.

Foi assim que decidimos implementar nossa solução. Outra forma de executar esse
problema é simplesmente armazenar o valor de A na RAM e carrega-lo em B. Esse método
é mais intuitı́vo, porém requer mais linhas de código na ROM.

11
3.3 Questão 4 - Controller

Definindo os estado em que o computador pode estar

Finalmente, definimos o módulo da unidade de controle, basicamente o cérebro do


computador.

Figura 14: Teste de Regressão do Contador FSM

Sintetizamos todas as instruções que estavam descritas na ROM, e testamos cada


caso devidamente por meio de testbenches.

12
Figura 15: Branch if Less than Zero

Figura 16: Branch if Greather Than Zero

Figura 17: Instructions

13
Figura 18: State Example

Cada estado possui um bloco como o apresentado, sendo 79 ao todo. Cada ciclo
do computador inicia buscando o que está armazenado em ROM no endereço do Program
Counter. Sendo assim, cada ciclo possui 3 estágios: Fetch, Decode e Execute, sendo este
último variável para cada tipo de operação realizada.

Figura 19: Diagram Example

14
3.4 Questão 5 - Run a Program

Sequência de Fibonacci

Para finalizar nosso desenvolvimento, escolhemos computar algo simples e elegante.


Dadas as limitações do sistema, optamos por calcular os primeiros elementos da sequência
de Fibonacci de forma iterativa.

Figura 20: Fibonacci - Testbench

Figura 21: Fibonacci - Código

15
Figura 22: State Diagram and Program Flow

Os estados de Fetch e Decode se repetem após a execução de cada instrução. As


setas não foram apresentadas para evitar a poluição do diagrama.

Todo e qualquer ciclo de execução inicia-se inserindo o valor de PC em MAR. Com


isso, a instrução é lida na ROM e vem por meio de from-memory para ser interpretada
pela control-unit. Os componentes internos do computador são alimentados com os dados
através de Bus1 e Bus2, que carregam as informações devidamente escolhidas no momento
da execução.

Figura 23: In-Depth waveform analysis

16
O computador é extremamente dinâmico com relação às portas de from-memory
e to-memory. É necessário muito cuidado ao programar, pois esses fios sempre possuem
dados que nem sempre devem ser lidos ou escritos na memória. Isso também se aplica
aos registradores, que são conectados aos Buses, que sempre estão sendo utilizados.

Figura 24: In-Depth waveform analysis with states

Perceba o fluxo bem ordenado de informações que chegam nos alvos corretamente.
Dessa forma, o computador funciona corretamente e lê as instruções sem erros. Abaixo,
está o loop de estados para o programa de Fibonacci.

Figura 25: Repeating States

Infelizmente, dado o número limitado no tamanho de bits armazenável, só conse-


guimos calcular até o número 233 antes de ficarmos sem espaço nos endereços da RAM.
Por curiosidade, em um PC de 64 bits, podemos calcular até 12200160415121876738 para
um inteiro sem sinal.

Lembrete: todos os códigos expostos no relatório estão em programs.txt.

Com isso, concluı́mos o desenvolvimento e a apresentação do nosso projeto e en-


cerramos o APS4.

17
4 Questão 6 - Conclusão

Considerações finais:

Dessa forma, concluı́mos o nosso relatório do APS4. Nesse estágio da disciplina,


fizemos a sı́ntese de todos os conteúdos abordados durante a disciplina. Partindo de uma
simples porta NAND, conseguimos construir uma máquina universal: Um computador
com CPU, um conjunto de instruções simplificado e memória.

O projeto funciona bem para os casos testados. Acreditamos que o programa esco-
lhido para representar nosso computador, o calculador dos termos da função de Fibonacci,
é bastante compreensivo e faz um ótimo uso do conjunto de instruções e é naturalmente
algo que o Computador é bom em fazer.

Acreditamos que o projeto pode ser melhorado com um conjunto maior de ins-
truções. Por exemplo, a implementação de uma instrução que troca de imediato os valo-
res dos registradores A e B, instrução de Parada, outras operações mais complexas e um
refinamento nas instruções existentes. Idealmente, a implementação de uma linguagem
de nı́vel mais alto que transpila para o nosso código de máquina também seria ideal, já
que a programação no nosso Assembly é tediosa e sucetı́vel a erros. Porém isso está fora
das nossas capacidades no momento.

E como nada é perfeito, avaliamos nosso projeto com um 9/10.

Por fim, gostarı́amos de expressar nossa sincera gratidão ao nosso professor, cujas
aulas nos guiaram através dos complicados conceitos de sistemas digitais, e à equipe de
monitoria, cujo apoio constante foi um diferencial em nossos estudos.

18
Certificate of Completion
APS4.pdf ID: e9e4f9d1-22ba-462e-aa91-f11cb4a91a66

SIGN REQUEST ISSUED: REQUESTED BY: STATUS:


Jul 23, 2024 Breno Orapacen da Nobrega Completed
08:26 PM UTC Oliveira Filho on 24 Jul, 2024, 12:35 PM UTC
[email protected]

Audit trail Generated on Jul 24, 2024

23 Jul, 2024, 08:29 PM UTC Breno Orapacen da Nobrega Oliveira Filho has
signed the document
[email protected] Verified

201.140.237.173

23 Jul, 2024, 08:29 PM UTC Breno Orapacen da Nobrega Oliveira Filho has
invited to sign the document
[email protected] Verified

23 Jul, 2024, 08:29 PM UTC Breno Orapacen da Nobrega Oliveira Filho has
invited to sign the document
[email protected] Verified

Generated with eSign from Smallpdf.com


Sign documents and request signatures electronically.
23 Jul, 2024, 08:29 PM UTC Breno Orapacen da Nobrega Oliveira Filho has
invited to sign the document
[email protected] Verified

23 Jul, 2024, 08:33 PM UTC Vitor Buarque de Gusmão Montenegro has signed
the document
[email protected] Verified

179.73.179.46

23 Jul, 2024, 09:44 PM UTC Danilo Regino Barrote has signed the document
[email protected] Verified

2804:14d:5482:a5a2:e94d:b4fe:5e87:1a1f

24 Jul, 2024, 12:35 PM UTC Bernardo Siqueira Batista has signed the document
[email protected] Verified

150.161.2.200

Generated with eSign from Smallpdf.com


Sign documents and request signatures electronically.

Você também pode gostar