47
Universidade Federal de Pernambuco – UFPE Centro de Informática – CIn Infra-estrutura de Hardware – IF674 Projeto CPU arquitetura MIPS Alunos: Cecil Accetti Resende de Ataíde Melo [CARAM]

cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

  • Upload
    lydan

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

Page 1: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

Universidade Federal de Pernambuco – UFPECentro de Informática – CIn

Infra-estrutura de Hardware – IF674

Projeto CPU arquitetura MIPS

Alunos:

Cecil Accetti Resende de Ataíde Melo [CARAM]

Gustavo Luiz Benevides Oliveira [GLBO]

Pedro Henrique Mendes Xavier [PHMX]

Thiago Sepulveda Suzart [TSS]

Tiago Neves Bastos [TNB]

Índice

Page 2: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

3 - Introdução

4 - Descrição das Operações

11- Descrição das Entidades

Introdução

Page 3: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

O projeto aqui apresentado refere-se à implementação de uma unidade central de processamento de 32 bits, baseada na arquitetura MIPS multi-ciclo, estudada em sala de aula na disciplina de Infra-Estrutura de Hardware. Essa arquitetura é baseada no uso de registradores de modo que as suas instruções tem à disposição um conjunto de 32 deles para realizar as operações. Além do mais, o MIPS foi projetado de acordo com a filosofia RISC (Reduced Instruction Set Computer - ou seja, Computadores com Conjunto de Instruções Reduzidas). Isso significa que existe um conjunto bastante pequeno de instruções que o processador sabe fazer. Combinando este pequeno número, podemos criar todas as demais operações. Além disso, devido a sua elegância e simplicidade, o MIPS é bastante utilizado em projetos de sistemas embarcados tais como video-games e roteadores.

Para o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog, a qual descreve o comportamento e a arquitetura do hardware. A CPU que foi descrita por nós é constituída de uma unidade de processamento e uma unidade de controle: Esta contém os diversos componentes necessários a execução das instruções armazenadas na memória principal e aquela é uma máquina de estados (FSM) que é responsável por gerar todos os sinais que controlam esses componentes. Além disso, este relatório contém a descrição de todo o conjunto de instruções exigido, assim como a simulação de cada instrução em forma de figura. Para a implementação desse repertório, foi necessária a adição de alguns módulos descritos por nós na arquitetura e, por isso, disponibilizamos aqui também o relato do funcionamento de cada um deles. Apesar de uma das principais características do MIPS ser sua relativa simplicidade, a máquina de estados desenvolvida é um pouco complexa e portanto fornecemos o detalhamento do que acontece em cada estado utilizado, seguido de um desenho do diagrama para facilitar a compreensão. Desse modo, o objetivo deste projeto é principalmente pôr em prática a teoria vista durante as aulas e, por conseguinte, expandir o conhecimento acerca do funcionamento de um processador.

Descrição das Operações

Page 4: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

1)Aritméticas:-

ADD Rs, Rt, Rd – No estágio de decodificação o conteúdo do registrador Rt e Rs são carregados nos registradores de saídas do banco de registradores, um sinal de controle é enviado a ULA indicando que a operação a ser realizada é uma soma, um outro sinal de controle seleciona o resultado para ser entrada de dados no banco de registradores e o valor é gravado no registrador Rd. Uma nova instrução é buscada na memória.

ADDU Rs, Rt, Rd – No estágio de decodificação o conteúdo do registrador Rt e Rs são carregados nos registradores de saídas do banco de registradores, um sinal de controle é enviado a ULA indicando que a operação a ser realizada é uma soma unsigned, um outro sinal de controle seleciona o resultado para ser entrada de dados no banco de registradores e o valor é gravado no registrador Rd. Uma nova instrução é buscada na memória.

ADDI Rt, Rs, Imm – No estágio de decodificação o conteúdo do registrador Rs é carregados no registrador de saída do banco de registradores, e Imm passa pela extensão de sinal e entra na ula, um sinal de controle é enviado a ULA indicando que a operação a ser realizada é uma soma, um outro sinal de controle seleciona o resultado para ser entrada de dados no banco de registradores e o valor é gravado no registrador Rt. Uma nova instrução é buscada na memória.

MULT Rs, Rt - No estágio de decodificação o conteúdo do registrador Rt e Rs são carregados nos registradores de saídas do banco de registradores, um sinal de controle é enviado ao mult indicando que a operação irá ser realizada, a saída do mult será dois resgistradores que irão armazenar os mais significativos e os menos significativos. Um flag é mandado ao controle avisando quando a multiplicação é terminada. Uma nova instrução é buscada na memória.

Page 5: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

MFLO Rd – No estágio de decodificação será selecionado o registrador Rd para escrita e o sinal de controle “High ou Low” irá selecionar Mflo como saída do multiplexador e essa saída será entrada “dados para escrita” do banco de registradores onde esse valor será armazenado em Rd.

MFHI Rd – No estágio de decodificação será selecionado o registrador Rd para escrita e o sinal de controle “High ou Low” irá selecionar Mfhi como saída do multiplexador e essa saída será entrada “dados para escrita” do banco de registradores onde esse valor será armazenado em Rd.

Sub Rs, Rt, Rd - No estágio de decodificação o conteúdo do registrador Rt e Rs são carregados nos registradores de saídas do banco de registradores, um sinal de controle é enviado a ULA indicando que a operação a ser realizada é uma subtração, um outro sinal de controle seleciona o resultado para ser entrada de dados no banco de registradores e o valor é gravado no registrador Rd. Uma nova instrução é buscada na memória.

Subu Rs, Rt, Rd - No estágio de decodificação o conteúdo do registrador Rt e Rs são carregados nos registradores de saídas do banco de registradores, um sinal de controle é enviado a ULA indicando que a operação a ser realizada é uma subtração unsigned, um outro sinal de controle seleciona o resultado para ser entrada de dados no banco de registradores e o valor é gravado no registrador Rd. Uma nova instrução é buscada na memória.

ADDIU Rt, Rs, Imm – No estágio de decodificação o conteúdo do registrador Rs é carregados no registrador de saída do banco de registradores, e Imm passa pela extensão de sinal e entra na ula, um sinal de controle é enviado a ULA indicando que a operação a ser realizada é uma soma unsigned, um outro sinal de controle seleciona o resultado para ser entrada de dados no banco de registradores e o valor é gravado no registrador Rt. Uma nova instrução é buscada na memória.

2) Entrada/Saída:

Page 6: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

Lb Rs, Rt, Offset – Calcula endereço de memória através da ULA, somando offset estendido com o registrador base Rs, e acessa elemento da memória desejado, salvando-o no registrador, e, logo em seguida, o valor armazenado neste registrador entra numa caixa chamada “separador”, que irá manter os 8 bits menos significativos e setar o resto para zero. A saída de “separador” irá entrar no banco de registradores como “dados para escrita” e irá armazenar o valor em Rt. Um nova instrução é buscada na memória.

Lh Rs, Rt Offset – Calcula endereço de memória através da ULA, somando offset estendido com o registrador base Rs, e acessa elemento da memória desejado, salvando-o no registrador, e, logo em seguida, o valor armazenado neste registrador entra numa caixa chamada “separador”, que irá manter os 16 bits menos significativos e setar o resto para zero. A saída de “separador” irá entrar no banco de registradores como “dados para escrita” e irá armazenar o valor em Rt. Um nova instrução é buscada na memória.

Lw Rs, Rt, Offset – Calcula endereço de memória através da ULA, somando offset estendido com o registrador base Rs, e acessa elemento da memória desejado, salvando-o no registrador, e, logo em seguida, o valor armazenado neste registrador entra no banco de registradores como “dados para escrita” e irá armazenar o valor em Rt. Um nova instrução é buscada na memória.

Sw Rs, Rt, Offset – Calcula endereço de memória através da ULA, somando offset estendido com o registrador base Rs. No endereço de memória calculado é armazenado o valor do registrador Rt, o qual é a entrada “Escrita de Dados” da Memória.

Sb Rs, Rt, Offset – Calcula endereço de memória através da ULA, somando offset estendido com o registrador base Rs e então o registrador Rt é alterado na entidade “Concatenador” para que todos os 8 bits menos significativos se mantenham e o resto seja zero. Rt alterado entra na memória como dados de escrita e o endereço de memória calculado entra como “Endereço”.

Page 7: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

Sh Rs, Rt, Offset – Calcula endereço de memória através da ULA, somando offset estendido com o registrador base Rs e então o registrador Rt é alterado na entidade “Concatenador” para que todos os 16 bits menos significativos se mantenham e o resto seja zero. Rt alterado entra na memória como dados de escrita e o endereço de memória calculado entra como “Endereço”.

Lui Rt, Imm - Após identificar a instrução lui no estágio de decodificação, a implementação do LUI faz com que o immediate (16 bits) recebido da instrução seja estendido para 32 bits, só que colocando zeros na parte menos significativa do vetor. O resultado dessa extensão é colocado no registrador rt. Após isso, é buscada uma nova instrução.

3) Lógicas/Shift

And Rs, Rt, Rd - Após identificar a instrução and no estágio de decodificação, os valores dos registradores rs e rt são carregados a partir do banco de registradores e a operação and é realizada na ULA de acordo com o sinal de controle que vem da unidade de controle. Posteriormente, o resultado é gravado no registrador de destino rd e uma nova instrução é buscada na memória.

Sll Rt, Rd, Shamt - Após identificar a instrução sll no estágio de decodificação, o valor do registrador rt é carregado a partir do banco de registradores e o controle manda dois sinais: um para o mux que existe na entrada da implementação dos deslocamentos, que faz com que selecione o shamt (que varia de zero a 32); e outro indicando qual o tipo de shift que será feito. O resultado do deslocamento é armazenado no registrador rd. Após isso, é buscada uma nova instrução.

Sllv Rs, Rt, Rd - Após identificar a instrução sll no estágio de decodificação, os valores do registrador rt e rs são carregados a partir do banco de registradores e o controle manda dois sinais: um para o mux que existe na entrada da implementação dos deslocamentos, que faz com que selecione os 5 bits do registrador rs que indica a quantidade de deslocamento a ser feita (que varia de zero a 32); e outro indicando qual o

Page 8: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

tipo de shift que será feito. O resultado do deslocamento é armazenado no registrador rd. Após isso, é buscada uma nova instrução.

Slt Rs, Rt, Rd - Após identificar a instrução slt no estágio de decodificação, os valores do registradores rt e RS são carregados a partir do banco de registrador e a operação de comparação é realizada pela ULA. Se o sinal LT está ativado, é porque rs é menor do que rt. Senão, rs não é menor do que rt. A implementação do SLT recebe esse bit do sinal LT, faz uma extensão para 32 bits e o resultado é colocado no registrador rd. Após isso, é buscada uma nova instrução.

Sra Rt, Rd, Shamt - Após identificar a instrução sra no estágio de decodificação, o valor do registrado rt é carregado a partir do banco de registradores e o controle manda dois sinais: um para o mux que existe na entrada da implementação dos delocamentos, que faz com que selecione o shamt (que varia de zero a 32); e outro indicando qual o tipo de shift que será feito. O resultado do deslocamento é armazenado no registrador rd. Após isso, é buscada uma nova instrução.

Srav Rs, Rt, Rd - Após identificar a instrução srav no estágio de decodificação, os valores dos registradores rt e rs são carregados a partir do banco de registradores e o controle manda dois sinais: um para o mux que existe na entrada da implementação dos deslocamentos, que faz com que selecione os 5 bits do registrador rs que indica a quantidade de deslocamento a ser feita (que varia de zero a 32); e outro indicando qual o tipo de shift que será feito. O resultado do deslocamento é armazenado no registrado rd. Após isso, é buscada uma nova instrução.

Srl Rt, Rd, Shamt - Após identificar a instrução srl no estágio de decodificação, o valor do registrado rt é carregado a partir do banco de registradores e o controle manda dois sinais: um para o mux que existe na entrada da implementação dos delocamentos, que faz com que selecione o shamt (que varia de zero a 32); e outro indicando qual o tipo de shift que será feito. O resultado do deslocamento é armazenado no registrador rd. Após isso, é buscada uma nova instrução.

Andi Rs, Rd, Imm - Após identificar a instrução andi no estágio de decodificação, o valor do registrador rs é carregado a partir do banco de

Page 9: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

registradores, o controle manda um sinal para o mux da entrada da ULA selecionar o immediate estendido e a operação andi é realizada na ULA de acordo com o sinal de controle que vem da unidade de controle. Posteriormente, o resultado é gravado no registrador de destino rd e uma nova instrução é buscada na memória.

Slti Rs, Rt, Imm - Após identificar a instrução slti no estágio de decodificação, o valor do registrador rs é carregado a partir do banco de registrador, o shamt recebido é deslocado para 32 bits e a operação de comparação é realizada pela ULA. Se o sinal LT está ativado, é porque rs é menor do que rt. Senão, rs não é menor do que rt. A implementação do SLT recebe esse bit do sinal LT, faz uma extensão para 32 bits e o resultado é colocado no registrador rt. Após isso, é buscada uma nova instrução.

Xori Rs, Rt, Rd - Após identificar a instrução xori no estágio de decodificação, o valor do registrador rs é carregado a partir do banco de registradores, o controle manda um sinal para o mux da entrada da ULA selecionar o immediate estendido e a operação xori é realizada na ULA de acordo com o sinal de controle que vem da unidade de controle. Posteriormente, o resultado é gravado no registrador de destino rd e uma nova instrução é buscada na memória.

Xor Rs, Rt, Rd - Após identificar a instrução xor no estágio de decodificação, os valores dos registradores rs e rt são carregados a partir do banco de registradores e a operação xor é realizada na ULA de acordo com o sinal de controle que vem da unidade de controle. Posteriormente, o resultado é gravado no registrador de destino rd e uma nova instrução é buscada na memória.

4) Branch

Beq Rs, Rt, offset - Após identificar a instrução beq no estágio de decodificação, os valores de rt e rs são carregados a partir do banco de registradores. A operação subtração é realizada na ULA. Se o sinal ‘zero’ ficar ativado, é porque os números são iguais. Então, haverá o desvio. O offset da instrução (que contém 16 bits) é estendido para 32 bits e

Page 10: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

deslocado de 2 à esquerda. Esse será o endereço para o qual o PC será desviado. Se o sinal ‘zero’ não estiver ativado, é porque os números não são iguais. Então, será buscada a nova instrução.

Bne Rs, Rt, offset - Após identificar a instrução bne no estágio de decodificação, os valores de rt e rs são carregados a partir do banco de registradores. A operação subtração é realizada na ULA. Se o sinal ‘zero’ ficar desativado, é porque os números não são iguais. Então, haverá o desvio. O offset da instrução (que contém 16 bits) é estendido para 32 bits e deslocado de 2 à esquerda. Esse será o endereço para o qual o PC será desviado. Se o sinal ‘zero’ estiver ativado, é porque os números são iguais. Então, será buscada a nova instrução.

Jr Rs - Após identificar a instrução jr no estágio de decodificação o valor do registrador rs é carregado a partir do banco de registradores. A partir de um sinal do controle, o PC recebe o valor que estava no registrador rs (jump para esse endereço).

J offset - Após identificar a instrução j no estágio de decodificação, os 26 bits menos significativos são deslocados de 2 a esquerda e concatenados com os 4 bits mais significativos do opcode. Esse novo endereço é colocado em PC, e será essa a próxima instrução a ser executada.

Rte - Essa instrução faz com que o programa volte a executar, após uma exceção, exatamente do ponto de onde ocorreu a exceção (o endereço está armazenado em EPC).

Break - Após identificar a instrução break há uma parada abrupta na execução do programa colocando o processador em um estado de inatividade contínua, do qual se retira apenas pelo reinício das atividades de todo o processador.

Nop - Após identificar a instrução nop no estágio de decodificação, o controle faz com que não seja executada nenhuma operação. Durante um ciclo inteiro de clock, o processador permanece inerte.

Page 11: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

Jal offset - Após identificar a instrução jal no estágio de decodificação, o controle manda um sinal para que o endereço contido em PC seja armazenado no registrador 31. Após isso, os 26 bits menos significativos são deslocados de 2 a esquerda e concatenados com os 4 bits mais significativos do opcode. Esse novo endereço é colocado em PC, e será essa a próxima instrução a ser executada

Descrição das Entidades

Unidade: MULT

Entradas:

Clk (1 bit): clock do sistema.

Reset (1 bit): sinal que quando ativado zera o conteúdo do registrador.

Multiplicando (32 bits): vetor que representa o multiplicando.

Multiplicador (32 bits): vetor que representa o multiplicador.

Multply (1 bit): sinal que quando ativado inicia a multiplicação.

MultStatus (1 bit): sinal que quando ativado encerra o processo de multiplicação.

Output (64 bits): vetor que contém o resultado da multiplicação.

Objetivo:

Essa unidade foi criada com o objetivo de realizar a multiplicação de dois números de 32 bits.

Page 12: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

Algoritmo:

Essa unidade é implementada baseada no algoritmo da multiplicação binária de Booth. Quando a instrução a ser realizada é decodificada como uma multiplicação o sinal Multply ( enviado para essa entidade pela unidade de controle) é ativado. Para controlar a quantidade de ciclos e consequentemente o fim da multiplicação foi necessária a utilização de uma variável, que ao final de cada ciclo era incrementada. Em cada ciclo os dois bits menos significativos da variável X (Multiplicando 0s + Multiplicador + 0) é analisada. Caso seja:

- 00: meio de uma string de zeros, portanto não há operação aritmética a ser realizada.

- 01: fim de uma string de 1s, portanto o multiplicando é somado a metade esquerda do produto.

-10: inicio de uma string de 1s, portanto o multiplicando é subtraído da metade esquerda do produto.

-11: meio de uma string de 1s, portanto não há operação aritmética a ser realizada.

Quando a variável de controle for igual a 32 significa que a multiplicação encerrou e o sinal MultStatus é ativado indicando para unidade de controle a finalização da operação.

Algoritmo:

Quando a saída Zero da ULA é disponibilizada (através da subtração dos registradores RS e RT) ocorre a extensão da mesma. Essa extensão é feita apenas com zeros e o bit menos significativo corresponde a saída Zero da ULA. Desse modo a saída dessa unidade corresponde a um vetor de 32 bits.

Page 13: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

Unidade: Registrador de Deslocamento

Entradas:

Clk (1 bit): clock do sistema.

Reset (1 bit): sinal que quando ativado zera o conteúdo do registrador.

Shift (3 bits): função a ser realizada pelo registrador.

N(5 bits): quantidade de deslocamentos.

Entrada (32 bits): vetor a ser deslocado.

Saída (32 bits): vetor deslocado.

Objetivo:

Essa unidade foi modificada a partir da descrição original, para aceitar na entrada N números com até 5 bits. É capaz de efetuar as operações de shift a esquerda, shift a direita lógico e shift a direita aritmético.

Algoritmo:

A funcionalidade desse registrador é especificada pela entrada Shift e pela quantidade de deslocamento. Esse deslocamento é baseado na concatenação dos bits.

Unidade: NOP

Entradas:

Entrada (32 bits): representa a saída do registrador de dados da memória.

Page 14: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

Saída (1 bit): sinal enviado para a unidade de controle.

Objetivo:

Unidade criada para verificar a saída da memória.

Algoritmo:

Caso a entrada dessa unidade seja formada por um vetor de 32 zeros o bit de saída será setado com um e enviado a unidade de controle, a qual realiza a operação relacionada a instrução no operation (nop).

Unidade: Ext32

Entradas:

Entrada (16 bits): vetor que corresponde aos 16 bits menos significativos (immediate) da instrução.

Saída (32 bits): vetor que contém o resultado da operação.

Objetivo:

Essa entidade é utilizada para estender o immediate, para que ele possa ser armazenado em um vetor de 32 bits.

Algoritmo:

A Entrada corresponde aos 16 bits mais significativos do vetor Saída e o restante é setado com zero.

Page 15: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

Unidade: Concatenador

Entradas:

Concatena (1 bit): Representa o sinal enviado pelo controle especificando a operação a ser realizada.

SaidaParaMemoria (32 bits): vetor bits que contém os dados a serem escritos na memória( caso a instrução seja sb ou sh).

EntradaB (32 bits): vetor de bits que contém o conteúdo do registrador a ser modificado.

Objetivo:

Unidade criada para selecionar e realizar corretamente a operação a ser realizada com as instruções sb e sh, dependendo do sinal (concantena) enviado pelo controle.

Algoritmo:

A operação a ser realizada depende do valor de concatena.

Instrução sb. O byte menos significativo do vetor SaidaParaMemoria é conservado da EntradaB. O restante é proveniente do vetor EntradaRegDados. Concatena <=1.

Instrução sh. Os 16 bits menos significativo do vetor SaidaParaMemoria é conservado da EntradaB. O restante é proveniente do vetor EntradaRegDados. Concatena <=0.

Page 16: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

Unidade: Separador

Entradas:

Sep_ctrl (1 bit): Representa o sinal enviado pelo controle especificando a operação a ser realizada.

EntradaRegDados (32 bits): vetor que representa o conteúdo do registrador de dados da memória.

SaidaDadosEscrita (32 bits): vetor de bits que contém os dados a serem escritos no registrador destino ( caso a instrução seja lb ou lh).

Objetivo:

Unidade criada para selecionar e realizar corretamente a operação a ser realizada com as instruções lb e lh, dependendo do sinal (sep_ctrl) enviado pelo controle.

Algoritmo:

A operação a ser realizada depende do valor de sep_ctrl.

Instrução lb. O byte menos significativo do vetor SaidaDadosEscrita é conservado do vetor EntradaRegDados. O restante é setado com zeros. Sep_ctrl<=1.

Instrução lh. Os 16 bits menos significativo do vetor SaidaDadosEscrita é conservado do vetor EntradaRegDados. O restante é setado com zeros. Sep_ctrl<=0.

Page 17: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

Entidade: LO

Entradas:Clk: indica que a entidade é síncronaReset : quando ativo zera os registradores, evitando "lixo"Load : sinal do controle que indica que o registrador deve ser carregado com o vetor entradaEntrada(32 bits) :vetor com o resultado da multiplicação Saida(32 bits): vetor carregado com os 32 bits menos significativos do resultado da multiplicação Objetivo:Esta entidade armazena os 32bits menos significativos do resultado da multiplicação.Algoritmo:Após a multiplicação, quando há um evento de clock e se o controle enviar o comando de load, então o vetor saída receberá os 32 bits menos significativos do resultado da multiplicação.

Entidade: HI

Entradas:Clk: indica que a entidade é síncronaReset: quando ativo zera os registradores, evitando "lixo"Load : sinal do controle que indica que o registrador deve ser carregado com o vetor entradaEntrada(32 bits): vetor com o resultado mais significativo da multiplicaçãoSaida(32 bits): vetor carregado com os 32 bits mais significativos do resultado da multiplicação Objetivo:Esta entidade tem a função de armazenar a parte mais significativa do resultado da operação de multiplicação.

Page 18: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

Algoritmo:Após a multiplicação, quando há um evendo de clock e se o controle enviar o comando de load, então o vetorsaída receberá os 32 bits mais significativos do resultado da multiplicação.

Entidade: ext8_32

Entradas:Entrada(8 bits) : endereço de tratamento da exceçãoSaida(32 bits): endereço de tratamento da exceção estendido

Objetivo:Estender os 8 bits provenientes dos dados no endereço de memória da exceção.

Algoritmo:Depois de ter sido observada uma exceção (overflow ou opcode inexistente) O byte localizado na posição de memória 254 ou 255 (dependendo da exceção) será estendido apenas com '0'. O multiplexador PCSrc irá escolher tal endereço e otratamento da exceção será executado.

Entidade: EPC

Entradas: Clock: sinal que representa que uma entidade síncronareset : sinal responsável por zerar o conteúdo de um registradorSinalControle: sinal que vem do controle, indicando se o "bloco" está ativo ou nãoEntradaULA(32 bits): vetor que sai da ULA contendo o endereço da instrução que está sendo executadaSaida(32 bits) : vetor que recebe a entrada, especificando assim, a saída

Page 19: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

Objetivo:Como algumas instruções causam exceção (overflow ou opcode inexistente) é necessário guardar o endereço da instrução que causou tal exceção.

Algoritmo:Ao se identificar uma exceção, então o atual PC é diminuido de 4, pois a essa altura o PC já está incrementado.O resultado terá seu valor armazenado na ULA.Com o sinal de clock ativo, o "bloco" EPC será ativo, recebendoo conteúdo da ULA (atual PC). Essa entidade é utilizada na instrução rte, na qual o Pc <- EPC.

Unidade: Shiftleft2

Entradas:Entrada (32 bits): representa o vetor que irá ser deslocado 2 à esquerdaSaída (32 bits):representa o vetor deslocado

Objetivo:Unidade criada para deslocar o vetor 2 vezes à esquerda, ou seja, multiplicar por 4 para calcular o desvio.O vetor de entrada é o address já com o sinal estendido.

Algoritmo:O address sai do registrador de instruções, tem o seu sinal estendido e depois é multiplicado por 4 para que o desvio seja calculado. Esse desvio será utilizado em instruções como beq e bne, se as condições forem satisfeitas.

Page 20: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

Entidade: shift26_28

Entradas:Entrada(26 bits): representa o offsetPC(32 bits): representa o pc, o qual terá um parte concatenado com o vetor entradaSaida(32 bits): representa o vetor que sofrerá a concatenação

Objetivo:Ao pegar um vetor de apenas 26 bits, ele desloca 2 à esquerdae concatena com os 4 bits mais significativos de PC para que o vetor seja estruturado por 32 bits.

Algoritmo:Quando o registrador de instruções é carregado, o vetor sem o opcode (26 bits)sofrerá um deslocamento de 2 à esquerda e em seguida será concatenadocom os 4 bits mais significativos [31..28] de PC. Após essa operação,o vetor saída será composto por 32 bits, ficando assim, no padrão do mips.

Unidade: Controle

Entradas:

Clk (1 bit): clock do sistema.

Reset (1 bit): sinal que quando ativado zera o conteúdo do registrador.

Opcode (6 bits): vetor de bits que corresponde aos seis bits mais significativos da instrução. Indica a operação básica.

Funct (6 bits): vetor de bits que corresponde aos seis bits menos significativos da instrução. Seleciona a variante especifica da operação no campo Opcode.

Page 21: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

NOP_FLAG (1 bit): sinal proveniente da entidade NOP. É ativado quando a instrução é composta exclusivamente com zeros, o que corresponde a instrução nop.

ENDMULT_FLAG(1 bit): sinal ativado quando a instrução é decodificada como sendo mult. Esse sinal inicia o processo de multiplicação.

OVERFLOW(1 bit): sinal proveniente da saída O da ULA. É ativado quando ocorre overflow nas instruções tipo R (exceto addu e subu que não geram overflow).

ZERO_FLAG(1 bit): sinal que corresponde a saída Z da ULA. É ativado quando na instrução slt o conteúdo dos registradores RS e RT são iguais.

Et(1bit): Flag que indica a igualdade entre os operandos na Unidade Lógica Aritmetica.

Saídas:

A(1 bit): Sinal que habilita a escrita no registrador A.

A(1 bit): Sinal que habilita a escrita no registrador A.

Concatena(1 bit): Sinal que habilita a entidade concatenador, assume o valor 1 para byte ou 0 para halfword.

WrtPC_cond(1 bit): Habilita a escrita no registrador Program Counter (PC), para o caso de instruções condicionais, BEQ ou BNE.

WrtPC(1 bit): Habilita a escrita escrita no registrador Program Counter (PC), durante a execução do Fetch, ou no caso de um Desvio( Jump).

mux_concatenador(1 bit): Sinal que controla o multiplexador da entrada de dados da memória.

MemToReg(3 bits): Sinal que controla a entrada de dados no Banco de Registradores.

mux_load(1 bit): Sinal que controla a entrada de endereço da memória.

WR(1 bit) : Sinal de leitura ou escrita na memória. O valor 0 habilita a leitura, o valor 1 habilita a escrita.

Page 22: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

WrtIR(1 bit): Sinal que habilita a escrita no Instruction Register(IR)

mux_dataout(2 bits): Sinal que controla a saída de dados, para armazenamento na memória ou banco de registradores, ou de endereços para a memória.

hi_or_lo(1 bit): Sinal que controla o multiplexador da saída dos registradores Hi e Lo.

mult_op(1 bit): Sinal que habilita o Multiplicador.

shift_select(3 bits): Sinal de controle do Registrador de Deslocamento. Indica o tipo de deslocamento a ser feito.

WrtEPC(1 bit): Sinal que habilita a escrita no registrador EPC

PCSrc(3 bits): Sinal de controle do multiplexador da origem da entrada do registrador PC.

shamt_ctrl(1 bit): Sinal de controle do multiplexador da entrada N do registrador de deslocamento.

OPAlu(3 bits): Sinal de controle da Unidade Lógica Aritmética.

AluSrcB(3 bits): Sinal de controle do multiplexador da entrada B da Unidade Lógica Aritmética.

AluSrcA(1 bit): Sinal de controle do multiplexador da entrada A da Unidade Lógica Aritmética.

WrtReg(1 bit): Sinal que habilita a escrita no Banco de Registradores.

RegDst(2 bits): Sinal de Controle do multiplexador da entrada WriteReg do Banco de Registradores.

sep_ctrl(1 bit): Sinal de controle da entidade separador.

ALUOUT(1 bit): Sinal que habilita a escrita no registrador ALUOUT

WrtMDR(1 bit): Sinal que habilita a escrita no registrador MDR.

Page 23: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

Objetivo:

A unidade de controle foi implementada para indicar quais unidades estarão ativas, formando assim o caminho de dados de cada instrução.

Algoritmo:

O controle é uma máquina de estados. Os cinco primeiros estados são iguais para todas as instruções. Os estados sucessores dependerão do valor do opcode. Na parte da descrição do controle, cada estado será explanado separadamente.

Page 24: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

Descrição dos Estados de Controle

Reset – Neste estado, o valor 227 é armazenado no registrador 29.

Fetch0- Estado de delay que se mostrou necessário durante a implementação das rotinas das instruções BEQ e BNE.

Fetch – Estado de busca de instrução na memória. Neste estado é calculado o endereço da próxima instrução, somando-se 4 ao valor atual do PC.

Fetch1- Estado de delay para leitura da memória.

Fetch2- Estado de delay para leitura da memória.

Decode – Neste estado, a instrução lida da memória é decodificada, e a partir de sua interpretação, o próximo estado de execução é determinado.

ADDU- Estado de execução da instrução ADDU.

ADDI - Estado de execução da instrução ADDI.

Mult- Estado de execução da instrução Mult .

MFLO- Estado de execução da instrução MFLO.

MFHI- Estado de execução da instrução MFHI.

ADD - Estado de execução da instrução ADD.

SUBU- Estado de execução da instrução SUBU.

SUB- Estado de execução da instrução SUB.

ADDIU- Estado de execução da instrução ADDIU.

LB1- Primeiro estado de execução da instrução LB. Neste estado é calculado o endereço de memória a ser lido.

Page 25: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

LB2- Segundo estado de execução da instrução LB. Neste estado a memória começa a ser lida, e seu conteúdo armazenado no registrador MDR.

waitLB1- Estado de delay para leitura na memória.

waitLB2- Estado de delay para leitura na memória.

LB3- Ultimo estado da execução da instrução LB. O byte mais significativo é separado, extendido a 32 bits e armazenado no Banco de Registradores.

LH1- Primeiro estado de execução da instrução LH. Neste estado é calculado o endereço de memória a ser lido.

LH2- Segundo estado de execução da instrução LB. Neste estado a memória começa a ser lida, e seu conteúdo armazenado no registrador MDR.

waitLH1- Estado de delay para leitura na memória.

waitLH2- Estado de delay para leitura na memória.

LH3- Ultimo estado da execução da instrução LH. A halfword mais significativa é separada, extendida a 32 bits e armazenada no Banco de Registradores.

LUI1- Primeiro estado da instrução LUI. Neste estado a halfword é extendida a 32 bits, deslocada em 16bits, e somada ao registrador 0 na ALU. Em seguida é armazenada no registrador ALUOUT.

LUI2- Segundo estado da instrução LUI. O conteúdo do registrador ALUOUT é armazenado no registrador de destino, no Banco de Registradores.

LW1- Primeiro estado de execução da instrução LW. Neste estado é calculado o endereço de memória a ser lido.

LW2- Segundo estado de execução da instrução LW. Neste estado a memória começa a ser lida, e seu conteúdo armazenado no registrador MDR.

waitLBW- Estado de delay para leitura na memória.

Page 26: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

waitLBW- Estado de delay para leitura na memória.

LW3- Ultimo estado da execução da instrução LW. A word armazenada no registrador MDR é armazenada no Banco de Registradores.

SW1- Primeiro estado de execução da instrução SW. Neste estado é calculado o endereço de memória a ser lido.

SW2- Segundo estado de execução da instrução SW. Neste estado o conteúdo do registrador B é armazenado na memória.

SB1- Primeiro estado de execução da instrução SB. Neste estado é calculado o endereço de memória a ser lido.

SB2- Segundo estado de execução da instrução SB. Neste estado a memória começa a ser lida, e seu conteúdo armazenado no registrador MDR.

waitSB1- Estado de delay para leitura na memória.

waitSB2- Estado de delay para leitura na memória.

SB3- Ultimo estado da execução da instrução SB. O byte mais significativo da word é reescrito e a nova word armazenada na memória

SH1- Primeiro estado de execução da instrução SH. Neste estado é calculado o endereço de memória a ser lido.

SH2- Segundo estado de execução da instrução SH. Neste estado a memória começa a ser lida, e seu conteúdo armazenado no registrador MDR.

waitSH1- Estado de delay para leitura na memória.

waitSH2- Estado de delay para leitura na memória.

SH3- Ultimo estado da execução da instrução SH. A halfword mais significativa da word é reescrito e a nova word armazenada na memória.

AND- Neste estado é executada a instrução AND na ALU, ficando o resultado armazenado no registrador ALUOUT.

Page 27: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

SLL- Neste estado é executada a instrução SLL, no Registrador de Deslocamento.

SLT- Neste estado é executada a instrução AND na ALU, ficando o resultado armazenado no registrador ALUOUT.

SLLV- Neste estado é executada a instrução SLLV, no Registrador de Deslocamento.

SRA- Neste estado é executada a instrução SRA, no Registrador de Deslocamento.

SRAV- Neste estado é executada a instrução SRAV, no Registrador de Deslocamento.

SRL- Neste estado é executada a instrução SRL, no Registrador de Deslocamento.

ANDI- Neste estado é executada a instrução ANDI na ALU, ficando o resultado armazenado no registrador ALUOUT.

SLTI- Neste estado é executada a instrução SLTI na ALU, ficando o resultado armazenado no registrador ALUOUT.

XORI- Neste estado é executada a instrução XORI na ALU, ficando o resultado armazenado no registrador ALUOUT.

XOR- Neste estado é executada a instrução XOR na ALU, ficando o resultado armazenado no registrador ALUOUT.

BEQ- Neste estado é executada uma comparação na ALU. O próximo estado é definido a partir do resultado da comparação entre o conteúdo dos registradores.

JR- Neste estado o conteúdo do registrador 31 é carregado no registrado ALUOUT, ficando disponível para carga no PC.

J- Neste estado o endereço de desvio é calculado e carregado no PC.

RTE- Neste estado é executada a instrução RTE, o conteúdo do registrador 31 é carregado no PC.

Page 28: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

Break- Nesse estado, o processador simplesmente pára o seu funcionamento, ficando em loop no estado Break. Só sai desse estado quando o processador é resetado.

NOP – No caso de uma instrução do tipo “0000 0000 0000 0000 0000 0000 0000 0000” ser lida da memória, o próximo estado volta a ser o FETCH.

JAL- Neste estado o valor do PC é armazenado no registrador 31 e é feito o desvio da execução do programa de acordo com o offset dado.

Immediate_Data- Neste estado, comum a todas as instruções aritméticas do tipo I, o conteúdo do registrador ALUOUT é armazenado no Banco de Registradores.

WRT_Data- Estado comum a todas as instruções aritméticas do tipo R, o conteúdo do registrador ALUOUT é armazenado no Banco de Registradores.

WRT_Shift- Neste estado, comum a todas as instruções de deslocamento, o conteúdo do registrador de deslocamento é armazenado no Banco de Registradores.

NoOPCODE-

WaitOPCODE1

WaitOPCODE2

ExJMP

Page 29: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

Conjunto de Simulações

1) add rd, rs, rt

2) addu rd, rs, rt

3) sub rd, rs, rt

4) subu rd, rs, rt

5) and rd, rs, rt

6) xor rd, rs, rt

Page 30: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

7) addi rt, rs, imm

8) addiu rt, rs, imm

9) andi rt, rs, imm

10) xori rt, rs, imm

11) slt rd, rs, rt

Page 31: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

12) slti rt, rs, imm

13) jr rs

14) j offset

15) jal offset

16) beq rs, rt, offset

17) bne rs, rt, offset

Page 32: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

18) mult rs, rt

19) mfhi rd

Page 33: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

20) mflo rd

21) lui rt, imm

22) break

23) sw rt, address(rs)

24) sh rt, address(rs)

Page 34: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

25) sb rt, address(rs)

26) lw rt, address(rs)

27) lh rt, address(rs)

28) lb rt, address(rs)

29) sllv rd, rt, rs

30) srav rd, rt, rs

31) sll rd, rt, shamt

32) sra rd, rt, shamt

Page 35: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,

33) srl rd, rt, shamt

34) nop

35) rte

Conclusão

Através da análise e da implementação de cada instrução acima descrita, podemos entender melhor como funciona um processador.

Acreditamos que o desafio e o objetivo de implementar algumas instruções do processador MIPS foi alcançado com sucesso, pois podemos aprender o funcionamento de um processador, de um modo geral.

Page 36: cin.ufpe.brcin.ufpe.br/~tss/Relatorio.docx · Web viewPara o desenvolvimento deste processador fez-se uso da ferramenta QUARTUS II da Altera, utilizando a linguagem SystemVerilog,