AssisRaphael / Banco_de_registradores_Verilog

Esse repositório contém um banco de registradores com 8 registradores de 16 bits implementado na HDL Verilog.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Banco de registradores em Verilog

Esse repositório contém um banco de registradores com 8 registradores de 16 bits.

Um banco de registradores é um bloco lógico que reune um conjunto de registradores. Sua função é armazenar dados relevantes para o processamento das instruções em operação no processador em determinado período de tempo. Diferente da memória, os registradores são implementados utilizando flip-flops, o que torna o acesso à seus dados muito mais rápido. Assim, utilizá-se um banco de registradores dentro de todo processador para aumentar sua velocidade e para organizar melhor o barramento de dados entre os registradores e a ULA.

Register16bits

Os registradores criados para esse projeto possuem 16 bits. O valor presente em um determinado registrador pode ser visto através da saida de 16 bits "dadoSaida". Eventualmente, torna-se necessário mudar o valor de um registrador e, para isso, tem-se o dados de entrada e dois habilita escrita, um para o banco de registradores e outro para o registrador específico. Se os dois habilita escrita estiverem em nível lógico alto, o dado que é recebido como entrada é salvo no registrador, caso contrário nada ocorre.

Pc reg7

Outra necessidade de um processador é manipular um registrador que conta as instruções em execução de um programa, denominado de PC (program counter). Esse registrador terá seu valor incrementado com um passo referente ao tamanho da word de sua arquitetura em instruções normais e terá seu valor completamente alterado em operações de desvio. A função PC_reg7 implementa esta lógica e seu funcionamento se resume a manipular o valor do registrador PC a partir de parâmentros de controle. Assim, o registrador PC irá conter o endereço da instrução atual que será executada pelo processador e modificá-lo de acordo com as necessidades do programa. Dessa maneira, diferente dos registradores comuns, o PC não é alterado apenas quando o habilita escrita do banco de registradores estiver em nível lógico alto, mas também quando um habilita escrita individual for verdadeiro. Existem três configurações dos parâmetros possíveis para este módulo e referem-se as combinações entre o habilita_escrita e o incrementaPC. Quando ambos parâmetros são falsos nenhuma modificação é realizada no PC, representando um comando nope referente à um stall no processador. Quando apenas o incrementaPC for verdadeiro o PC possui seu valor incrementado pelo passo da word da arquitetura (que é de 1 bit nesse caso), representando uma mudança simples de instrução. Por fim, quando habilita_escrita for verdadeiro, independente do valor do incrementaPC, o PC recebe o valor de dadoEntrada, realizando assim um jump ou branch.

Decoder

O banco de registradores projetado conta com 8 registradores de 16 bits. Cada um desses registradores poderá ser sobreescrito a cada ciclo de clock. Por causa disso, criou-se o módulo decoder que calcula o habilita escrita de cada registrador. Esse módulo recebe o endereço do registrador a ser sobreescrito e devolve como saída um vetor de 8 bits contendo o habilita escrita do conjunto de registradores. Nesse vetor de saída, há apenas uma posição que possui nível lógico alto, ou seja, apenas um registrador será escrito por vez.

BancoRegistradores

Finalmente, foi desenvolvido o módulo principal que contém o banco de registradores. O banco de resistradores projetado contém 8 registradores de 16 bits cada. A cada ciclo de clock, dois registradores terão seus valores lidos e um registrador será sobreescrito. Como é de se esperar, as entradas deste módulo são, os endereços dos registradores manipulados, o habilita escrita do próprio módulo (global),\ o clock, o dado que vai ser ecrito em um registrador e o incrementa PC. Como saída, ele vai ter os dados lidos dos registradores. Internamente, o módulo contém os registradores como variáveis wire, desta forma, mesmo que não sejam lidos, os registradores podem ser alterados.

About

Esse repositório contém um banco de registradores com 8 registradores de 16 bits implementado na HDL Verilog.


Languages

Language:Verilog 100.0%