Você está na página 1de 30
Processador em VHDL – método RTL Orientador: Prof. Dr. Valter Fernandes Avelino Período: Diurno Noturno

Processador em VHDL método RTL

Processador em VHDL – método RTL Orientador: Prof. Dr. Valter Fernandes Avelino Período: Diurno Noturno Nome

Orientador: Prof. Dr. Valter Fernandes Avelino

Período: Diurno

Prof. Dr. Valter Fernandes Avelino Período: Diurno Noturno Nome do aluno: Registro do aluno: Danilo

Noturno

Prof. Dr. Valter Fernandes Avelino Período: Diurno Noturno Nome do aluno: Registro do aluno: Danilo Correia

Nome do aluno:

Registro do aluno:

Danilo Correia Lima

11.216.059-3

• DESCRIÇÃO DA ATIVIDADE O objetivo do presente projeto foi desenvolver um processador simplificado através

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.

• FLUXOGRAMA – ENTRADA DE DADOS Sistemas Digitais III – Laboratório – Projeto 1 –

FLUXOGRAMA ENTRADA DE DADOS

• FLUXOGRAMA – ENTRADA DE DADOS Sistemas Digitais III – Laboratório – Projeto 1 – 2°
• FLUXOGRAMA – ORDENA VALORES Sistemas Digitais III – Laboratório – Projeto 1 – 2°

FLUXOGRAMA ORDENA VALORES

• FLUXOGRAMA – ORDENA VALORES Sistemas Digitais III – Laboratório – Projeto 1 – 2° Semestre
• FLUXOGRAMA – VERIFICA SE EXISTE VALORES REPETIDOS Sistemas Digitais III – Laboratório – Projeto

FLUXOGRAMA VERIFICA SE EXISTE VALORES REPETIDOS

• FLUXOGRAMA – VERIFICA SE EXISTE VALORES REPETIDOS Sistemas Digitais III – Laboratório – Projeto 1
• FLUXOGRAMA – VERIFICA SE SEQUÊNCIA ESTÁ CORRETA Sistemas Digitais III – Laboratório – Projeto

FLUXOGRAMA VERIFICA SE SEQUÊNCIA ESTÁ CORRETA

• FLUXOGRAMA – VERIFICA SE SEQUÊNCIA ESTÁ CORRETA Sistemas Digitais III – Laboratório – Projeto 1
• PROGRAMA EM HEXADECIMAL -- ENTRA COM AS CONSTANTES PARA A EXECUÇÃO DO PROGRAMA 0

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)

• PROGRAMAÇÃO EM HEXADECIMAL -- TESTA SE O SEGUNDO DIGITO É MENOR QUE 7 28

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

• PROGRAMAÇÃO EM HEXADECIMAL 54 => x"6CA7", -- SUB R12 <= RA-R7 SUBTRAI RA DE

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>

• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – VISÃO GERAL Sistemas Digitais III – Laboratório

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

FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – VISÃO GERAL Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – VISÃO GERAL Sistemas Digitais III – Laboratório

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

FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – VISÃO GERAL Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – VISÃO GERAL Sistemas Digitais III – Laboratório

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

FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – VISÃO GERAL Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – VISÃO GERAL Sistemas Digitais III – Laboratório

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

FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – VISÃO GERAL Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – MEMÓRIAS Sistemas Digitais III – Laboratório –

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

FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – MEMÓRIAS Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – MEMÓRIAS Sistemas Digitais III – Laboratório –

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

FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – MEMÓRIAS Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – DESLOCAMENTO DE DADOS Sistemas Digitais III –

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

DE UMA SEQUÊNCIA INCORRETA – DESLOCAMENTO DE DADOS Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – DESLOCAMENTO DE DADOS Sistemas Digitais III –

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

DE UMA SEQUÊNCIA INCORRETA – DESLOCAMENTO DE DADOS Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – DESLOCAMENTO DE DADOS Sistemas Digitais III –

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

DE UMA SEQUÊNCIA INCORRETA – DESLOCAMENTO DE DADOS Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA INCORRETA – DESLOCAMENTO DE DADOS Sistemas Digitais III –

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

DE UMA SEQUÊNCIA INCORRETA – DESLOCAMENTO DE DADOS Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – VISÃO GERAL Sistemas Digitais III – Laboratório

SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETAVISÃO GERAL

FUNCIONAL DE UMA SEQUÊNCIA CORRETA – VISÃO GERAL Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – VISÃO GERAL Sistemas Digitais III – Laboratório

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

FUNCIONAL DE UMA SEQUÊNCIA CORRETA – VISÃO GERAL Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – VISÃO GERAL Sistemas Digitais III – Laboratório

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

FUNCIONAL DE UMA SEQUÊNCIA CORRETA – VISÃO GERAL Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – VISÃO GERAL Sistemas Digitais III – Laboratório

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

FUNCIONAL DE UMA SEQUÊNCIA CORRETA – VISÃO GERAL Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – MEMÓRIAS Sistemas Digitais III – Laboratório –

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

FUNCIONAL DE UMA SEQUÊNCIA CORRETA – MEMÓRIAS Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – MEMÓRIAS Sistemas Digitais III – Laboratório –

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

FUNCIONAL DE UMA SEQUÊNCIA CORRETA – MEMÓRIAS Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – DESLOCAMENTO DE DADOS Sistemas Digitais III –

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

DE UMA SEQUÊNCIA CORRETA – DESLOCAMENTO DE DADOS Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – DESLOCAMENTO DE DADOS Sistemas Digitais III –

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

DE UMA SEQUÊNCIA CORRETA – DESLOCAMENTO DE DADOS Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – DESLOCAMENTO DE DADOS Sistemas Digitais III –

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

DE UMA SEQUÊNCIA CORRETA – DESLOCAMENTO DE DADOS Sistemas Digitais III – Laboratório – Projeto 1
• SIMULAÇÃO FUNCIONAL DE UMA SEQUÊNCIA CORRETA – DESLOCAMENTO DE DADOS Sistemas Digitais III –

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

DE UMA SEQUÊNCIA CORRETA – DESLOCAMENTO DE DADOS Sistemas Digitais III – Laboratório – Projeto 1
• COMENTÁRIOS E CONCLUSÕES Realizado o download em placa, analisando os resultados obtidos e comparando

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.