Sie sind auf Seite 1von 30

Processador em VHDL – método RTL

Orientador: Prof. Dr. Valter Fernandes Avelino

Período: Diurno Noturno

Nome do aluno: Registro do aluno:


Danilo Correia Lima 11.216.059-3

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 1/30


• DESCRIÇÃO DA ATIVIDADE

O objetivo do presente projeto foi desenvolver um processador simplificado


através do método RTL, onde foi utilizada uma configuração pré-definida de fluxo
de dados, sinais de controle e instruções, sendo que, o desafio emposto pelo
orientador foi modificar o código para que desenvolva os requisitos do projeto
peculiar de cada aluno.
Através desse projeto, iremos nos familiarizar com CPU’s e implementação
RTL.
Tratando especificamente desse projeto, a ideia foi produzir um código em
assembly que execute a rotina de análise de 4 dígitos, verificando se são
sequenciais e menores que 7. Para isso foi necessário o conhecimento prévio do
modelo RTL, movimento de dados através dos blocos, acionamento dos sinais de
controle e desenvolvimento de código VHDL em plataformas FPGA.
O espaço alocado na memória nesse projeto foi de 30 à 38, sendo que
apenas 4 foram utilizados, do 30 ao 34, aonde foram guardados os valores de
entrada das chaves para posterior manipulação. A manipulação dos dados foi em
grande parte feita através dos registradores, aonde o range que foi utilizado vai
do R0 ao R14.
Através dos conselhos do professor Valter, foi implementando um sistema
que identifica números repetidos, pois como constatado em teste realizados em
aula, poderia causar erros.
O modelo que foi utilizado para a ordenação dos valores foi o de cascata,
aonde todos os números são comparados entre si para serem colocados em
sequência. Embora não seja o melhor método, pois acaba utilizando mais espaço
na memória em detrimento a outros métodos, como o de somar o valor 1 ao dado
de entrada e verificar se esse novo valor é igual ao próximo, esse aliado a um
contador, acabou sendo essa a primeira ideia que pensei, e como os resultados
obtidos foram bastante satisfatórios, decidi deixar esse sistema de ordenação
como o cerne da programação.
Outra especificidade do programa tratado desse relatório, é a de não ter por
escolha, uma lógica que reinicia o programa, retornando ao início e assim ficando
em loop.

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 2/30


• FLUXOGRAMA – ENTRADA DE DADOS

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 3/30


• FLUXOGRAMA – ORDENA VALORES

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 4/30


• FLUXOGRAMA – VERIFICA SE EXISTE VALORES REPETIDOS

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 5/30


• FLUXOGRAMA – VERIFICA SE SEQUÊNCIA ESTÁ CORRETA

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 6/30


• PROGRAMA EM HEXADECIMAL

-- ENTRA COM AS CONSTANTES PARA A EXECUÇÃO DO PROGRAMA


0 => x"4007", -- MVI R0 #07h VALOR MÁXIMO DA ENTRADA
1 => x"41FF", -- MVI R1 #FFh VALOR POSTERIOR À ENTRADA DE TODOS OS DÍGITOS
2 => x"42F0", -- MVI R2 #F0h VALOR POSTERIOR À SEQUÊNCIA CORRETA
3 => x"43AA", -- MVI R3 #AAh VALOR POSTERIOR À SEQUÊNCIA ERRADA
4 => x"4403", -- MVI R4 #03h DIFERENÇA MÁXIMA ENTRE O MAIOR VALOR E O MENOR
5 => x"4500", -- MVI R5 #00h CARREGA REGISTRO AUXILIAR
6 => x"F000", -- HALT -- PRESSIONE <RUN>

-- ENTRA COM O PRIMEIRO DIGITO


7 => x"2700", -- IN R7 <= ch[NUMERO HEXA] configuração da chave
8 => x"171E", -- MOV mem(30) => R7
9 => x"3700", -- OUT Led <= R7 MOSTRA O CONTEÚDO DE R8 NOS LEDS
10 => x"F000", -- HALT -- PRESSIONE <RUN>

-- ENTRA COM O SEGUNDO DIGITO


11 => x"2800", -- IN R8 <= ch[NUMERO HEXA] configuração da chave
12 => x"181F", -- MOV mem(31) => R8
13 => x"3800", -- OUT Led <= R8 MOSTRA O CONTEÚDO DE R8 NOS LEDS
14 => x"F000", -- HALT -- PRESSIONE <RUN>

-- ENTRA COM O TERCEIRO DIGITO


15 => x"2900", -- IN R9 <= ch[NUMERO HEXA] configuração da chave
16 => x"1920", -- MOV mem(32) => R9
17 => x"3900", -- OUT Led <= R9 MOSTRA O CONTEÚDO DE R9 NOS LEDS
18 => x"F000", -- HALT -- PRESSIONE <RUN>

-- ENTRA COM O QUARTO DIGITO


19 => x"2A00", -- IN RA <= ch[NUMERO HEXA] configuração da chave
20 => x"1A21", -- MOV mem(33) => RA
21 => x"3A00", -- OUT Led <= RA MOSTRA O CONTEÚDO DE RA NOS LEDS
22 => x"F000", -- HALT -- PRESSIONE <RUN>

-- MOSTRA A FINALIZAÇÃO DA ENTRADA DE DADOS COM "FF"


23 => x"3100", -- OUT Led <= R1 MOSTRA FF NOS MOSTRANDO A FINALIZAÇÃO DAS
ENTRADAS DOS DADOS
24 => x"F000", -- HALT -- PRESSIONE <RUN>

-- TESTA SE O PRIMEIRO DIGITO É MENOR QUE 7


25 => x"6B70", -- SUB R11 <= R7-R0 SUBTRAI R7 DE 7
26 => x"D000", -- JMPF -- VERIFICA DE R11 É NEGATIVO
27 => x"B059", -- GOTO 59h (89)

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 7/30


• PROGRAMAÇÃO EM HEXADECIMAL

-- TESTA SE O SEGUNDO DIGITO É MENOR QUE 7


28 => x"6B80", -- SUB R11 <= R8-R0 SUBTRAI R7 DE 7
29 => x"D000", -- JMPF -- VERIFICA DE R11 É NEGATIVO
30 => x"B059", -- GOTO 59h (89)

-- TESTA SE O TERCEIRO DIGITO É MENOR QUE 7


31 => x"6B90", -- SUB R11 <= R9-R0 SUBTRAI R7 DE 7
32 => x"D000", -- JMPF -- VERIFICA DE R11 É NEGATIVO
33 => x"B059", -- GOTO 59h (89)

-- TESTA SE O QUARTO DIGITO É MENOR QUE 7


34 => x"6BA0", -- SUB R11 <= RA-R0 SUBTRAI R7 DE 7
35 => x"D000", -- JMPF -- VERIFICA DE R11 É NEGATIVO
36 => x"B059", -- GOTO 59h (89)

-- ORDENA OS VALORES
37 => x"6C87", -- SUB R12 <= R8-R7 SUBTRAI R7 DE R8
38 => x"D000", -- JMPF -- VERIFICA DE R12 É NEGATIVO
39 => x"B02A", -- GOTO 2Ah (42)
40 => x"071F", -- MOV mem(31) => R7
41 => x"081E", -- MOV mem(30) => R8

42 => x"6C97", -- SUB R12 <= R9-R7 SUBTRAI R7 DE R8


43 => x"D000", -- JMPF -- VERIFICA DE R12 É NEGATIVO
44 => x"B031", -- GOTO 31h (49)
45 => x"5958", -- ADD R9 <= R5+R8
46 => x"5857", -- ADD R8 <= R5+R7
47 => x"0720", -- MOV mem(32) => R7
48 => x"B036", -- GOTO 36h (54)
49 => x"6C98", -- SUB R12 <= R9-R8 SUBTRAI R9 DE R8
50 => x"D000", -- JMPF -- VERIFICA DE R12 É NEGATIVO
51 => x"B036", -- GOTO 36h (54)
52 => x"5958", -- ADD R9 <= R5+R8
53 => x"0820", -- MOV mem(32) => R8

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 8/30


• PROGRAMAÇÃO EM HEXADECIMAL

54 => x"6CA7", -- SUB R12 <= RA-R7 SUBTRAI RA DE R7


55 => x"D000", -- JMPF -- VERIFICA DE R12 É NEGATIVO
56 => x"B03E", -- GOTO 3Eh (62)
57 => x"5A59", -- ADD RA <= R5+R9
58 => x"5958", -- ADD R9 <= R5+R8
59 => x"5857", -- ADD R8 <= R5+R7
60 => x"0721", -- MOV mem(33) => R7
61 => x"B04A", -- GOTO 4Ah (74)
62 => x"6CA8", -- SUB R12 <= RA-R8 SUBTRAI RA DE R8
63 => x"D000", -- JMPF -- VERIFICA DE R12 É NEGATIVO
64 => x"B045", -- GOTO 45h (69)
65 => x"5A59", -- ADD RA <= R5+R9
66 => x"5958", -- ADD R9 <= R5+R8
67 => x"0821", -- MOV mem(33) => R8
68 => x"B04A", -- GOTO 4Ah (74)
69 => x"6CA9", -- SUB R12 <= RA-R9 SUBTRAI RA DE R9
70 => x"D000", -- JMPF -- VERIFICA DE R12 É NEGATIVO
71 => x"B04A", -- GOTO 4Ah (74)
72 => x"5A59", -- ADD R10 <= R5+R9
73 => x"0921", -- MOV mem(33) => R9

--VERIFICA SE VALORES ESTÃO REPITIDOS


74 => x"6E78", -- SUB R14 <= R7-R8
75 => x"D000", -- JMPF -- VERIFICA DE R12 É NEGATIVO
76 => x"B059", -- GOTO 59h (89)
77 => x"6E89", -- SUB R14 <= R8-R9
78 => x"D000", -- JMPF -- VERIFICA DE R12 É NEGATIVO
79 => x"B059", -- GOTO 59h (89)
80 => x"6E9A", -- SUB R14 <= R9-RA
81 => x"D000", -- JMPF -- VERIFICA DE R12 É NEGATIVO
82 => x"B059", -- GOTO 59h (89)

--VERIFICA SE OS NUMEROS ESTÃO NA SEQUÊNCIA


83 => x"6DA7", -- SUB R13 <= RA-R7 SUBTRAI RA DE R7
84 => x"6DD4", -- SUB R13 <= R13-R4 SUBTRAI R13 DE R4
85 => x"E000", -- JMPF -- VERIFICA DE R13 É ZERO
86 => x"B059", -- GOTO 59h (89)
87 => x"3200", -- OUT Led <= R2 MOSTRA QUE SEQUENCIA ESTÁ CORRETA
88 => x"F000", -- HALT -- PRESSIONE <RUN>
89 => x"3300", -- OUT Led <= R3 MOSTRA QUE SEQUENCIA ESTÁ ERRADA
90 => x"F000", -- HALT -- PRESSIONE <RUN>

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 9/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – VISÃO GERAL

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 10/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – VISÃO GERAL

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 11/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – VISÃO GERAL

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 12/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – VISÃO GERAL

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 13/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – MEMÓRIAS

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 14/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – MEMÓRIAS

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 15/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – DESLOCAMENTO DE DADOS

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 16/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – DESLOCAMENTO DE DADOS

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 17/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – DESLOCAMENTO DE DADOS

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 18/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – DESLOCAMENTO DE DADOS

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 19/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA– VISÃO GERAL

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 20/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – VISÃO GERAL

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 21/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – VISÃO GERAL

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 22/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – VISÃO GERAL

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 23/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – MEMÓRIAS

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 24/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – MEMÓRIAS

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 25/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – DESLOCAMENTO DE DADOS

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 26/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – DESLOCAMENTO DE DADOS

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 27/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – DESLOCAMENTO DE DADOS

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 28/30


• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – DESLOCAMENTO DE DADOS

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 29/30


• COMENTÁRIOS E CONCLUSÕES

Realizado o download em placa, analisando os resultados obtidos e comparando com os parâmetros fornecidos pelo
orientador, foi constatado um resultado satisfatório, tanto para sequências incorretas como para sequências corretas. O
sistema que detecta dígitos repetidos também funcionou como esperado.
Analisando a simulação e posteriormente o teste prático, que do modo que o código foi escrito, o valor 7 é
considerado como fora da sequência e consequentemente apresentando erro ao final da análise, o que era esperado pois
segundo os parâmetros passados, os dígitos deveriam ser menores que 7, excluindo o mesmo de uma sequência correta.
Algumas melhorias na programação poderiam ser feitas, de tal modo que o processamento de dados proceda com
mais eficiência e ocupe uma memória menor. Um exemplo de melhoria que poderia ser implementada seria alocar um
multiplexador na saída do banco de registradores, conectando diretamente com a memória de dados, realizando as
devidas modificações nas instruções, fluxo de dados e sinais de controle. Com essa modificação seria possível fazer o
apontamento de dados de memória través de registradores, podendo criar uma espécie de vetor com os dados,
dispensando o uso de registradores auxiliares.
Após a realização do experimento, a análise de dados expostas acima e realização da parte prática, sinto que os
meus conhecimentos na linguagem de máquina, no modelo RTL e na plataforma xilinx foram acrescidos substancialmente,
podendo assim desenvolver projetos mais básicos e pouco complexos.

Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre 2019 30/30

Das könnte Ihnen auch gefallen