Índice:
- Etapa 1: Materiais
- Etapa 2: Diagrama de blocos dos módulos de circuito
- Etapa 3: Código
- Etapa 4: Demonstração e Código de Amostra
Vídeo: Computador de dez bits - VHDL: 4 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:38
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
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
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:
Como enviar arquivos grandes de computador para computador: 6 etapas
Como enviar arquivos grandes de um computador para outro: Os tamanhos dos arquivos continuam aumentando à medida que a tecnologia avança. Se você estiver em um ofício criativo, como design ou modelagem, ou apenas um amador, transferir arquivos grandes pode ser um incômodo. A maioria dos serviços de e-mail limita o tamanho máximo dos anexos em cerca de 25
Visão geral do computador de 8 bits em uma placa de ensaio: 3 etapas
Visão geral do computador de 8 bits em uma placa de ensaio: Meu objetivo para este projeto era desenvolver uma melhor compreensão da arquitetura do computador, design de hardware e linguagens de nível de montagem. Sendo um júnior na universidade estudando engenharia da computação, eu tinha recentemente concluído cursos de eletrônica, laboratórios i
Usando PSP como joystick de computador e, em seguida, controlando seu computador com o PSP: 5 etapas (com imagens)
Usando PSP como joystick de computador e, em seguida, controlando seu computador com o PSP: você pode fazer muitas coisas legais com o PSP homebrew, e neste tutorial eu vou te ensinar como usar seu PSP como joystick para jogar, mas também há um programa que permite usar o joystick como o mouse. Aqui estão os mater
Minhas dez dicas e truques mais úteis para o breadboard: 9 etapas (com imagens)
Minhas dez dicas e truques mais úteis sobre o breadboard: há 15 centímetros de neve no chão e você está confinado em casa. Você perdeu momentaneamente a motivação para trabalhar em seu laser de corte de metal guiado por GPS. Não houve nenhum projeto novo em seu site favorito que tenha despertado sua atenção
Use SSH e XMing para exibir programas X de um computador Linux em um computador Windows: 6 etapas
Use SSH e XMing para exibir programas X de um computador Linux em um computador Windows: Se você usa Linux no trabalho e Windows em casa ou vice-versa, às vezes pode ser necessário fazer login no computador em outro local e executar programas. Bem, você pode instalar um servidor X e habilitar o encapsulamento SSH com seu cliente SSH e um