Baixe o app para aproveitar ainda mais
Prévia do material em texto
SEL0632 – Linguagens de Descrição de Hardware Projeto Final Processador MIPS de 32 bits O MIPS é um exemplo de processador com conjunto reduzido de instruções (RISC) desenvolvido na década de 1980, para fins didáticos. Ele tem instruções de 32 bits e trinta e dois registradores de 32 bits de uso geral. O registrador 0 sempre contém o valor 0. A memória também é de 32 bits. Como mostrado na tabela 1, o MIPS tem apenas três formatos de instrução. Somente as instruções I-Format LOAD e STORE referenciam operandos da memória. Instruções R-Format como ADD, AND e OR realizam operações somente em dados nos registradores. Elas requerem dois registradores de operandos, RS e RT. O resultado da operação é armazenado num terceiro registrador, RD. Os campos Shift e Function da R-format são usados como um campo de instrução estendida. Instruções J-Format incluem as instruções de desvio. Tabela 1 – Formatos de Instruções do MIPS 32 bits Field Size 6-bits 5-bits 5-bits 5-bits 5-bits 6-bits R-Format Opcode Rs Rt Rd Shift Function I-Format Opcode Rs Rt Address/Immediate value J-Format Opcode Branch target address Um resumo das instruções básicas do MIPS é mostrado na tabela 2 abaixo. Tabela 2 – Instruções do processador MIPS Mnemonic Format Opcode Field Function Field Instruction Implementada Add R 0 32 Add S Sub R 0 34 Subtract S And R 0 36 Bitwise And S Or R 0 37 Bitwise Or S Slt R 0 42 Set If Less Than S Addi I 8 - Add Immediate S Lw I 35 - Load Word S Sw I 43 - Store Word S Beq I 4 - Branch on Equal S J J 2 - Jump S Sltu R 0 43 Set if Less Than Unsigned N Xor R 0 38 Add Unsigned N Nor R 0 39 Add Unsigned N Jr R 0 8 Jump Register (used for Return) N Sll R 0 0 Shift Left logical N Srl R 0 2 Shift Right Logical N Sra R 0 3 Shift Right Arithmetical N Andi I 12 - And immediate N Ori I 13 - Or immediate N Xori I 14 - Xor Imediate N Bne I 5 - Branch Not Equal N Blez I 6 - Branch less than or equal zero N Bgtz I 7 - Branch greater than zero N Bltz I 1 0 Branch less than zero Jal J 3 - Jump and Link (used for Call) N Uma implementação núcleo do processador MIPS, baseado no exemplo do livro Digital Design and Computer Architecture, de David Money Harris & Sarah L. Harris, é mostrada na figura 1 abaixo. Esta implementação realiza a busca, decodificação e execução de instruções em um único ciclo de clock. O Contador de Programa (PC) é utilizado para buscar o próximo endereço na memória de instrução. Uma vez que a memória é endereçada byte a byte, o PC é incrementado de 4 para buscar a próxima palavra de 32 bits na memória. Ao mesmo tempo em que a instrução é buscada, um somador (abaixo da memória) é usado para somar 4 ao PC para gerar o próximo endereço. A saída da memória de instrução é a próxima instrução de 32 bits. Figura 1 - Implementação Ciclo único do MIPS Figura 1 - Esquema do processador MIPS de ciclo único O código da instrução é enviado à unidade de controle e o código da função é enviado à unidade de controle da ULA. Os campos de endereço de registradores da instrução são usados para endereçar o banco de registradores de duas portas de entrada. Este banco pode realizar duas leituras e uma escrita independentes em um único ciclo de clock. Isto implementa a decodificação de instrução. As duas saídas do banco de registradores alimentam as entradas de dados da ULA. A unidade de controle identifica a operação da ULA necessária para a execução da instrução. Depois, dependendo da instrução, uma série de ações são tomadas. As instruções LOAD e STORE lêem ou escrevem na memória de dados. Instruções R-Format passam direto pela memória de dados utilizando um multiplexador. Por último, as instruções de leitura e R-Format escrevem de volta um novo valor no banco de registradores. Instruções de desvios relativos ao PC usam um somador e um multiplexador para calcular o endereço de desvio. O multiplexador é necessário para operações de desvio condicional. Depois que todas as saídas tiverem sido estabilizadas, o próximo clock carrega o novo valor do PC e o processo repete para a próxima instrução. Já foi preparada uma descrição em VHDL da arquitetura acima para ser utilizada como base para o projeto. Ela foi retirada do livro Digital Design and Computer Architecture, mas algumas partes foram removidas para que os alunos utilizem seus conhecimentos para implementar as partes faltantes. A primeira parte do projeto será realizar a implementação destas partes faltantes. Além disso, toda a estrutura terá que ser parametrizada. Ou seja, não será aceito declaração de objetos bit_vector, por exemplo, com os índices numéricos. Constantes ou genéricos terão que ser utilizados para a definição do tamanho do vetor. Abaixo temos um exemplo de implementação não aceita e outra aceita: Não aceito: dado1_s: bit_vector (31 downto 0); Aceito: dado1_s: bit_vector (n_dados_c – 1 downto 0); Para os campos das instruções, será exigido o uso de alias. Todos os sinais criados terão que ser em letra minúscula, terminando com ‘_g’, ‘_c’, ‘_s’ ou ‘_v’, se forem genéricos, constantes, sinais ou variáveis, respectivamente. Parâmetros de entrada e saída de entidades/componentes e subrotinas deverão começar com ‘i_’, no caso de entradas, e ‘o_’, no caso de saídas. Será aceito como resultado, além do código em VHDL, o resultado da compilação no Quartus II, com a indicação do consumo de lógica e do RTL das partes integrantes da arquitetura. A data de entrega da primeira parte será no dia: 12/06 – Turma 01 13/06 – Turma 02 A segunda parte será a implementação de um conjunto extra de instruções. A arquitetura implementada possui apenas as instruções indicadas com S na tabela 1. Cada grupo irá implementar uma das instruções indicadas com N na tabela 1, conforme a tabela 2 abaixo. Grupo Instrução 1 Instrução 2 Instrução 3 Instrução 4 Instrução 5 1 Xor Bgtz Jal Jr Bne 2 Nor Blez Jal Jr Bne 3 Sltu Bltz Jal Jr Bne 4 Sll Andi Jal Jr Bne 5 Srl Ori Jal Jr Bne 6 Sra Xori Jal Jr Bne 7 Xor Bltz Jal Jr Bne 8 Sra Andi Jal Jr Bne Definição de novos tipos, constantes, alias, subrotinas, etc., deverão ser implementadas em pacotes. Serão entregues aos grupos testbenchs para testar as implementações no Modelsim. Serão aceitos como resultados prints do console e da tela do waveform do Modelsim, mostrando a correta execução das instruções implementadas. A data de entrega da segunda parte será no dia: 26/06 – Turma 01 27/06 – Turma 02 A terceira parte consistirá em modificar a arquitetura para uma das possíveis implementações: Pipeline – Turma 01 Multiciclo – Turma 02 A figura 2 apresenta a implementação da arquitetura tipo Pipeline. O grande desafio é inserir corretamente os pipelines de forma a garantir o correto funcionamento da arquitetura. Esta estrutura de pipeline divide a execução das instruções em 5 estágio: Fecth, Decode, Execute, Mem, Writeback. Figura 2 - Implementação Pipeline do MIPS Na figura 3 é apresentada a implementação multiciclo. Nesta, o grande desafio, além de unidades adicionais de controle de fluxo de dados (registradores), é a montagem da unidade de controle que irá coordenar a execução das instruções. Esta unidade de controle terá como base uma máquina de 12 estados, conforme descrito no livro base. Figura 3 - Implementação Multiciclo do MIPS A avaliação será dividida em duas partes: Documentação e Implementação. Na Documentação, será avaliado: uma descrição detalhada do projeto; a estrutura interna dos arquivos (cabeçalhos,comentários, tabulação, identação, etc.); e a organização em pastas dos arquivos, que deverá respeitar alguma estrutura similar à utilizada em projetos de sistemas digitais tipo opensource do site Opencores. Este critério corresponderá a 40% da nota do trabalho. Na Implementação, será avaliado: o uso adequado da linguagem VHDL. Para isso, será avaliado o correto uso obrigatório dos aspectos funcionais da linguagem listados abaixo. Este critério corresponderá a 60% da nota do trabalho. A data de entrega da terceira parte será no dia: 06/07 – Turma 01 07/07 – Turma 02 A seguir são apresentados os critérios de avaliação no critério Implementação do trabalho. Notas de Trabalho – SEL0632 – Linguagens de Descrição de Hardware Turma-__ Grupos Critérios Pontos 01 02 03 04 05 06 Comandos concorrentes 0,4 Comandos seqüenciais 0,4 Atributos 0,4 Componentes 0,6 Esquemas de iteração 0,6 Genéricos 0,6 Subprogramas 0,6 Bibliotecas 0,6 Pacotes 0,6 Pseudônimos 0,6 Tipos 0,6 Total 6,0 Mais detalhes serão repassados durante a execução do projeto. Este documento estará em constante atualização. Atenciosamente Prof. Maximiliam Luppe
Compartilhar