Índice:

Computador de dez bits - VHDL: 4 etapas
Computador de dez bits - VHDL: 4 etapas

Vídeo: Computador de dez bits - VHDL: 4 etapas

Vídeo: Computador de dez bits - VHDL: 4 etapas
Vídeo: Computing Fundamentals Tutor 4-Bit CPU 06: Control Unit 2024, Julho
Anonim
Computador de dez bits - VHDL
Computador de dez bits - VHDL

Feito por: Tyler Starr e Ezzeedden Gazali

Introdução

Este projeto foi concluído como parte do projeto final do CPE 133 na Cal Poly SLO. É um ótimo projeto para quem quer entender como os computadores funcionam em seu nível mais baixo e como realizam suas tarefas. O projeto é modelado a partir do computador SAP de 8 bits descrito no livro Digital Computer Electronics de Albert Malvino. No entanto, aumentamos o computador para 10 bits para permitir a implementação de mais códigos de operação (códigos de operação). O usuário pode programar o computador para executar um conjunto de operações inserindo certas instruções.

Arquitetura de sistema e circuito:

O computador está escrito em VHDL e estará contido na placa Basys 3 da Digilent. As entradas serão mapeadas para os interruptores na parte inferior da placa. Dois interruptores táteis serão usados para as funções Reset e Write. A saída será exibida no display de 7 segmentos da placa.

O computador será dividido em circuitos menores (módulos) que lidam com diferentes operações. Cada módulo será explicado em detalhes nas etapas a seguir.

Etapa 1: Materiais

Materiais
Materiais

Tudo o que é necessário para este projeto é a placa FPGA Basys3 da Digilent e um cabo micro USB para conectar a placa ao seu computador.

Etapa 2: Diagrama de blocos dos módulos de circuito

Diagrama de blocos dos módulos de circuito
Diagrama de blocos dos módulos de circuito
Diagrama de blocos dos módulos de circuito
Diagrama de blocos dos módulos de circuito
Diagrama de blocos dos módulos de circuito
Diagrama de blocos dos módulos de circuito

Os diagramas de blocos acima mostram os diferentes módulos de circuitos que compõem o computador de 10 bits. Abaixo estão as descrições de cada uma das peças / módulos individuais mostrados nos diagramas acima.

Contador de programa

Descrição das entradas: a entrada é uma entrada de 5 bits para carregar um número no contador do programa. Cp quando alto, o contador conta com bordas de clock decrescentes. Clr redefine o contador para 0. Ep quando alto, o contador gera a contagem atual. Sp quando alto, o contador define a contagem para o número na entrada

  • Descrição das saídas:

    a saída é uma cópia da contagem para uso nos LEDS 0-15. Contagem gera a contagem atual.

  • Lugar geral no sistema: Este contador rastreia a localização da memória em que o programa está. Todos os programas começam no endereço de memória 00000 (0) e vão até 11111 (31), a menos que uma parada seja usada. Nas instruções de salto, o contador do programa continua a contar a partir do endereço para o qual o programa está saltando.

Entrada MUX

  • Descrição das entradas: O endereço obtém a entrada dos interruptores 11 a 15. O MAR obtém a entrada do registro de 10 bits usado como um MAR. O programa controla qual entrada rotear para a saída.
  • Descrição das saídas: a saída encaminha a entrada selecionada para a RAM.
  • Lugar geral no sistema: Este MUX determina se deve rotear o endereço dos switches ou do barramento para a RAM. No modo de programa, o endereço dos interruptores é roteado e, no modo de operação, o endereço do barramento é roteado.

ramMUX

  • Descrição das entradas: userInput é a entrada que o usuário insere durante o modo de programa. aRegInput são os dados contidos no registro A, usados durante uma operação de movimentação. controle é o selecionar para este MUX.
  • Descrição das saídas: a saída é a entrada de dados de 10 bits na RAM.
  • Lugar geral no sistema: Este MUX produz os dados de entrada de 10 bits que são usados no módulo de RAM. Quando o bit de controle é alto, o MUX emite os dados que o usuário inseriu no modo de programa. Quando o bit de controle está baixo, o MUX envia os dados no barramento de controle.

ramModule

  • Descrição das entradas: inputData são os dados armazenados na RAM. inputAddress é o local onde os dados estão sendo armazenados. programa indica se o computador está no modo de programa ou de execução. readWrite indica se uma operação de leitura ou gravação está ocorrendo. notCE é o bit de controle para o módulo de RAM. mover indica que uma operação de movimento está sendo executada.
  • Descrição das saídas: outputDataToBus são os dados que vão da RAM para o barramento. outputData e output Address são os dados e o endereço que vão para o registrador de instrução.
  • Lugar geral no sistema: A RAM permite o armazenamento de programas e dados na memória antes da execução do programa. Assim que o programa está em execução, a RAM recebe um endereço do MAR e envia os dados desse endereço para o barramento.

addressROM

  • Descrição das entradas: opCode é a entrada que contém o endereço do opcode que está sendo executado pelo computador
  • Descrição das saídas: opCodeStart é o endereço de memória que indica a localização da primeira microinstrução do opCode correspondente.
  • Lugar geral no sistema: Este módulo pega a microinstrução travada e produz a localização da memória que corresponde ao início dessa sequência de microinstruções.

ringCounter

  • Descrição das entradas: o reset define o contador de volta para 100000 (o primeiro "estado T"). Clk incrementa o contador em um em uma transição decrescente do relógio. NOP indica que o estado / ciclo atual é um ciclo "sem operação".
  • Descrição das saídas: contagem é a saída do contador.
  • Lugar geral no sistema: O contador de toque controla o contador pré-configurável e delineia as seis microetapas em cada ciclo de instrução (T1-T6).

preCounter

  • Descrição das Entradas: opCodeStart é a localização da memória das microinstruções para o opCode que está sendo executado. T1 redefine o contador para 0 quando está alto. Quando T3 é alto, opCodeStart é carregado e a contagem continua a partir desse local para os 3 ciclos restantes (T4-T6). Clr define o contador para 0. Clk incrementa o contador em um em uma borda descendente.
  • Descrição das saídas: controlWordLocation gera a localização da memória da palavra de controle a ser executada.
  • Lugar geral no sistema: Cada código operacional tem 3 microinstruções. O contador é incrementado em 1, começando em 0 para os primeiros 3 ciclos (ciclo de busca). O contador é então acionado pelo contador de anel para carregar o endereço em opCodeStart e incrementa em 1 para os 3 ciclos restantes. Desta forma, o preCounter controla a sequência de microinstruções a serem executadas.

controlROM

  • Descrição das entradas: controlWordLocation é o endereço do controlWord que o controlROM produzirá. NOP indica que o local é um local "sem operação".
  • Descrição das saídas: controlWord é a palavra de controle que habilita / desabilita os diferentes módulos de computador para realizar uma operação desejada.
  • Lugar geral no sistema: Este módulo decodifica a localização da memória do preCounter e gera a controlWord para a operação desejada.

ALU

  • Descrição das entradas: A e B são as entradas do Registro A e do Registro B nas quais a ALU realiza as operações aritméticas e lógicas. Quando subtrair está ativo, indica que B está sendo subtraído de A.
  • Descrição das saídas: o resultado é o resultado da adição de A e B ou da subtração de B de A. As saídas maiorThan, menorThan e igualTo indicam se (AB ou A = B) e são usadas no módulo de salto condicional. erro indica estouro ou estouro negativo quando ativo.
  • Lugar geral no sistema: A ALU contém a lógica para as operações aritméticas e lógicas realizadas pelo computador. Este módulo pode adicionar e subtrair dois números binários de 10 bits. A ALU também pode determinar se A> B, A

conditionalJmp

  • Descrição das entradas: inputCount é usado para travar a contagem atual. inputAddress é usado para travar o endereço para o qual seria feito o salto. loadFromRegister quando travas baixas inputAddress. loadCount quando baixo trava inputCount. quando outputEnable é baixo, a saída é definida para o endereço para saltar para.gT, iT e eQ determinam qual condição está sendo verificada. GreaterThan, lessThan e equalTo são as entradas da ALU que indicam o resultado da comparação entre A e B. Na transição ascendente do clock de Clk, inputCount e inputAddress são lidos nos registradores.
  • Descrição das saídas: outputJmp é o endereço que o contador do programa irá ler.
  • Lugar geral no sistema: este módulo lida com saltos condicionais e não condicionais para o computador. Com base nas entradas gT, iT e eQ, o módulo determina qual condição verificar e se essa condição é verdadeira ou falsa. Se a condição for verdadeira, ele emitirá o endereço da instrução para a qual saltar; caso contrário, ele emitirá a contagem da próxima instrução.

binToBCD

  • Descrição das entradas: numere o número de 10 bits a ser convertido em decimal codificado em binário.
  • Descrição das saídas: centenas de dígitos na casa das centenas do número binário. dezenas o dígito na casa das dezenas do número binário. uns o dígito na casa das unidades do número binário.
  • Lugar geral no sistema: Este módulo converte o número de 10 bits do registro de saída para BCD para que nosso driver de display de quatro dígitos exiba o número em decimal no display de 7 segmentos.

fourDigitDriver

  • Descrição das entradas: o número é a entrada binária de 16 bits que é direcionada ao decodificador. inClk é o relógio interno das placas Basys e é usado para um divisor de relógio. RST zera o relógio usado para acionar os dígitos.
  • Descrição das saídas: o ânodo determina qual local do dígito será iluminado. dígito é o número de entrada para o decodificador.
  • Lugar geral no sistema: Este módulo aciona o decodificador para emitir o número BCD para o display.

decodificador

  • Descrição das Entradas: inputNumber é o dígito que vem do driver e que será decodificado.
  • Descrição das saídas: cátodos determina quais cátodos serão ligados para exibir o dígito desejado.
  • Lugar geral no sistema: Este módulo decodifica o dígito que deve ser exibido no display de 7 segmentos.

fourDigitDisplay

  • Descrição das entradas: número é o número a ser exibido no display de 7 segmentos. erro indica quando o visor deve exibir "Err". Clk é o sinal do relógio de que o display está funcionando. Este sinal deve estar em torno de 60 Hz para que o display possa mostrar todas as 4 casas de dígitos simultaneamente.
  • Descrição das saídas: o ânodo determina qual local do dígito está habilitado. cátodo determina quais cátodos são ativados para exibir o dígito desejado.
  • Lugar geral no sistema: Este módulo exibe um número no display de 7 segmentos. Consulte o manual de instruções da placa Basys 3 para obter informações sobre quais cátodos e ânodos são ativados para usar o visor. Quando o bit de erro é alto, o visor mostra "Err".

outputMUX

  • Descrição das Entradas: progModeInput determina quais leds são acesos durante o modo de programação. runModeInput determina quais leds são ligados durante o modo de execução. modeSelect é o bit de seleção ou controle para o MUX.
  • Descrição das saídas: ledOutput indica quais leds serão acesos.
  • Lugar geral no sistema: Dependendo do modo em que o computador está (programa ou rum), o MUX acenderá diferentes leds. No modo de programa (modeSelect é '0'), o MUX liga os LEDs para se assemelhar ao local da memória em que o computador está e ao que ele contém. No modo de execução (modeSelect é '1'), o MUX é usado para depuração, mas pode ser configurado para exibir qualquer outra coisa.

clockDivider

  • Descrição das entradas: stop lê os cinco bits MSB do barramento para detectar um comando de parada ('11111') e pára o relógio. inputClk é o sinal de clock interno da placa Basys 3.
  • Descrição das saídas: ouputClk é o novo relógio que foi desacelerado.
  • Lugar geral no sistema: Este relógio é usado para desacelerar o computador e permitir que o usuário determine o que está acontecendo. O relógio pode funcionar muito mais rápido, no entanto, ele está atualmente definido para 2 Hz.

triStateBuffer

  • Descrição das entradas: Din é a entrada de 5 bits que vai para o buffer. Ep é o bit de controle.
  • Descrição das saídas: Dout é a saída de 5 bits do buffer
  • Lugar geral no sistema: Quando o bit de controle Ep está ativo, o buffer emite a entrada. Quando o bit de controle não está ativo, o buffer não produz nada.

tenBitDRegister

  • Descrição das entradas: Dbus é a entrada para a qual se destina o registro. Clk permite que o registrador leia os dados em uma transição crescente do clock. ARST define o registro para 0 de forma assíncrona. Quando outputEnable é baixo, o conteúdo do registro é a saída. Quando readIn é baixo, o registro trava Dbus na transição crescente do clock.
  • Descrição das saídas: Qbus é a saída do registro
  • Lugar geral no sistema: O registro é usado várias vezes em todo o computador e é usado para armazenar informações durante a execução de operações.

fiveBitDRegister

  • Descrição das entradas: Dbus é a entrada para a qual se destina o registro. Clk permite que o registrador leia os dados em uma transição crescente do clock. ARST define o registro para 0 de forma assíncrona. Quando outputEnable é baixo, o conteúdo do registro é a saída. Quando readIn é baixo, o registro trava Dbus na transição ascendente do clock.
  • Descrição das saídas: Qbus é a saída do registro.
  • Lugar geral no sistema: O registro é usado várias vezes em todo o computador e é usado para armazenar informações durante a execução de operações.

Etapa 3: Código

Abaixo está uma pasta contendo a restrição e os arquivos de origem para o computador de 10 bits.

Etapa 4: Demonstração e Código de Amostra

O vídeo acima demonstra como programar o computador de 10 bits na placa Basys 3 FPGA. Um pdf contendo os códigos operacionais e um programa de exemplo também está anexado abaixo.

Recomendado: