Tabla de contenido:

Computadora de diez bits - VHDL: 4 pasos
Computadora de diez bits - VHDL: 4 pasos

Video: Computadora de diez bits - VHDL: 4 pasos

Video: Computadora de diez bits - VHDL: 4 pasos
Video: Sumador n-bits VHDL Fácil con Simulación y Explicación Paso a Paso en Active HDL | FPGA CPLD 2024, Mes de julio
Anonim
Computadora de diez bits - VHDL
Computadora de diez bits - VHDL

Hecho por: Tyler Starr y Ezzeedden Gazali

Introducción

Este proyecto se completó como parte del proyecto final de CPE 133 en Cal Poly SLO. Es un gran proyecto para alguien que busca comprender cómo funcionan las computadoras en su nivel más bajo y cómo logran sus tareas. El proyecto sigue el modelo de la computadora SAP de 8 bits descrita en el libro Digital Computer Electronics de Albert Malvino. Sin embargo, hemos aumentado la computadora a 10 bits para permitir la implementación de más códigos de operación (códigos de operación). El usuario puede programar la computadora para realizar un conjunto de operaciones ingresando ciertas instrucciones.

Arquitectura del sistema y circuito:

La computadora está escrita en VHDL y estará contenida en la placa Basys 3 de Digilent. Las entradas se asignarán a los interruptores en la parte inferior de la placa. Se utilizarán dos interruptores táctiles para las funciones Reset y Write. La salida se mostrará en la pantalla de 7 segmentos de la placa.

La computadora se dividirá en circuitos (módulos) más pequeños que manejan diferentes operaciones. Cada módulo se explicará en detalle en los siguientes pasos.

Paso 1: Materiales

Materiales
Materiales

Todo lo que se necesita para este proyecto es la placa FPGA Basys3 de Digilent y un cable micro USB para conectar la placa a su computadora.

Paso 2: diagrama de bloques de los módulos de circuito

Diagrama de bloques de módulos de circuito
Diagrama de bloques de módulos de circuito
Diagrama de bloques de módulos de circuito
Diagrama de bloques de módulos de circuito
Diagrama de bloques de módulos de circuito
Diagrama de bloques de módulos de circuito

Los diagramas de bloques anteriores muestran los diferentes módulos de circuitos que componen la computadora de 10 bits. A continuación se muestran descripciones de cada una de las piezas / módulos individuales que se muestran en los diagramas anteriores.

Contador de programa

Descripción de las entradas: la entrada es una entrada de 5 bits para cargar un número en el contador del programa. Cp cuando está alto, el contador cuenta con la caída de los bordes del reloj. Clr restablece el contador a 0. Ep cuando está alto, el contador emite el recuento actual. Sp cuando está alto, el contador establece el recuento en el número de entrada

  • Descripción de salidas:

    La salida es una copia del recuento para usar en LEDS 0-15. Count muestra el recuento actual.

  • Posición general en el sistema: este contador realiza un seguimiento de la ubicación de la memoria en la que se encuentra el programa. Todos los programas comienzan en la dirección de memoria 00000 (0) y van hasta 11111 (31), a menos que se utilice una parada. En las sentencias de salto, el contador del programa continúa contando desde la dirección a la que está saltando el programa.

Entrada MUX

  • Descripción de las entradas: La dirección toma la entrada de los interruptores 11 al 15. MAR toma la entrada del registro de 10 bits utilizado como MAR. El programa controla qué entrada enrutar a la salida.
  • Descripción de las salidas: la salida enruta la entrada seleccionada a la RAM.
  • Posición general en el sistema: este MUX determina si se debe enrutar la dirección de los conmutadores o del bus a la RAM. En el modo de programa, la dirección de los interruptores se enruta y en el modo de ejecución se enruta la dirección del bus.

ramMUX

  • Descripción de las entradas: userInput es la entrada que el usuario ingresa durante el modo de programación. aRegInput son los datos contenidos en el registro A, esto se usa durante una operación de movimiento. control es la selección para este MUX.
  • Descripción de las salidas: la salida es la entrada de datos de 10 bits a la RAM.
  • Lugar general en el sistema: este MUX genera los datos de entrada de 10 bits que se utilizan en el módulo RAM. Cuando el bit de control es alto, el MUX da salida a los datos que el usuario ingresó en el modo de programa. Cuando el bit de control es bajo, el MUX envía los datos al bus de control.

ramModule

  • Descripción de las entradas: inputData son los datos que se almacenan en la RAM. inputAddress es la ubicación donde se almacenan los datos. programa indica si la computadora está en modo de programa o de ejecución. readWrite indica si se está produciendo una operación de lectura o escritura. notCE es el bit de control para el módulo RAM. move indica que se está realizando una operación de movimiento.
  • Descripción de las salidas: outputDataToBus son los datos que van desde la RAM al bus. outputData y la dirección de salida son los datos y la dirección que van al registro de instrucciones.
  • Lugar general en el sistema: la RAM permite el almacenamiento de datos y programas en la memoria antes de que se ejecute un programa. Una vez que el programa se está ejecutando, la RAM recibe una dirección del MAR y envía los datos en esa dirección al bus.

direcciónROM

  • Descripción de las entradas: opCode es la entrada que contiene la dirección del código de operación que está realizando la computadora
  • Descripción de las salidas: opCodeStart es la dirección de memoria que indica la primera ubicación de microinstrucción del opCode correspondiente.
  • Posición general en el sistema: este módulo toma la microinstrucción bloqueada y genera la ubicación de la memoria que corresponde al inicio de esa secuencia de microinstrucciones.

ringCounter

  • Descripción de las entradas: reset vuelve a poner el contador en 100000 (el primer "estado T"). Clk incrementa el contador en uno en un borde de reloj descendente. NOP indica que el estado / ciclo actual es un ciclo "sin operación".
  • Descripción de las salidas: el recuento es la salida del contador.
  • Posición general en el sistema: el contador de anillo controla el contador preestablecido y delimita los seis micropasos en cada ciclo de instrucción (T1-T6).

precontador

  • Descripción de las entradas: opCodeStart es la ubicación de la memoria de las microinstrucciones para el opCode que se está ejecutando. T1 restablece el contador a 0 cuando está alto. Cuando T3 es alto, se carga opCodeStart y el conteo continúa desde esa ubicación durante los 3 ciclos restantes (T4-T6). Clr establece el contador en 0. Clk incrementa el contador en uno en un flanco descendente.
  • Descripción de las salidas: controlWordLocation genera la ubicación de la memoria de la palabra de control que se ejecutará.
  • Lugar general en el sistema: cada código de operación tiene 3 microinstrucciones. El contador se incrementa en 1 comenzando en 0 durante los primeros 3 ciclos (ciclo de recuperación). Luego, el contador de anillo activa el contador para cargar la dirección en opCodeStart y se incrementa en 1 durante los 3 ciclos restantes. De esta forma el preCounter controla la secuencia de microinstrucciones a realizar.

controlROM

  • Descripción de entradas: controlWordLocation es la dirección de controlWord que el controlROM generará. NOP indica que la ubicación es una ubicación "sin operación".
  • Descripción de Salidas: controlWord es la palabra de control que habilita / deshabilita los diferentes módulos de la computadora para realizar una operación deseada.
  • Lugar general en el sistema: este módulo decodifica la ubicación de la memoria del contador previo y genera la palabra de control para la operación deseada.

ALU

  • Descripción de las entradas: A y B son las entradas del registro A y el registro B en las que la ALU realiza las operaciones aritméticas y lógicas. Cuando restar está activo, indica que B se resta de A.
  • Descripción de las salidas: el resultado es el resultado de sumar A y B, o restar B de A. Las salidas mayor que, menor que e igual Para indicar si (AB, o A = B) y se utilizan en el módulo de salto condicional. error indica un desbordamiento o subdesbordamiento cuando está activo.
  • Posición general en el sistema: La ALU contiene la lógica para las operaciones aritméticas y lógicas realizadas por la computadora. Este módulo puede sumar y restar dos números binarios de 10 bits. La ALU también puede determinar si A> B, A

conditionalJmp

  • Descripción de las entradas: inputCount se utiliza para bloquear el recuento actual. inputAddress se utiliza para bloquear la dirección a la que se saltará. loadFromRegister cuando el nivel bajo bloquea inputAddress. loadCount cuando el nivel bajo bloquea inputCount. cuando outputEnable es bajo, la salida se establece en la dirección a la que saltar. gT, iT y eQ determinan qué condición se está verificando. GreaterThan, lessThan e equalTo son las entradas de la ALU que indican el resultado de la comparación entre A y B. En el flanco de reloj ascendente de Clk, inputCount y inputAddress se leen en los registros.
  • Descripción de las salidas: outputJmp es la dirección que leerá el contador del programa.
  • Posición general en el sistema: este módulo maneja saltos condicionales y no condicionales para la computadora. Basado en las entradas gT, iT y eQ, el módulo determina qué condición verificar y si esa condición es verdadera o falsa. Si la condición es verdadera, generará la dirección de la instrucción a la que saltar; de lo contrario, generará el recuento de la siguiente instrucción.

binToBCD

  • Descripción de las entradas: numere el número de 10 bits para convertir a decimal codificado en binario.
  • Descripción de las salidas: centenas el dígito en el lugar de las centenas del número binario. decenas el dígito en el lugar de las decenas del número binario. ones el dígito en el lugar de las unidades del número binario.
  • Posición general en el sistema: este módulo convierte el número de 10 bits del registro de salida a BCD para que nuestro controlador de pantalla de cuatro dígitos muestre el número en decimal en la pantalla de 7 segmentos.

fourDigitDriver

  • Descripción de las entradas: el número es la entrada binaria de 16 bits que se envía al decodificador. inClk es el reloj interno de la placa Basys y se utiliza como divisor de reloj. RST restablece el reloj utilizado para controlar los dígitos.
  • Descripción de las salidas: el ánodo determina qué lugar del dígito se iluminará. dígito es el número de entrada al decodificador.
  • Posición general en el sistema: este módulo hace que el decodificador envíe el número BCD a la pantalla.

descifrador

  • Descripción de las entradas: inputNumber es el dígito que proviene del controlador y que se decodificará.
  • Descripción de las salidas: cátodos determina qué cátodos se encenderán para mostrar el dígito deseado.
  • Posición general en el sistema: este módulo decodifica el dígito que se mostrará en la pantalla de 7 segmentos.

fourDigitDisplay

  • Descripción de las entradas: número es el número que se mostrará en la pantalla de 7 segmentos. error indica cuando la pantalla debe leer "Err". Clk es la señal del reloj con la que se está ejecutando la pantalla. Esta señal debe ser de alrededor de 60 Hz para que la pantalla pueda mostrar todos los lugares de 4 dígitos simultáneamente.
  • Descripción de las salidas: el ánodo determina qué lugar de dígito está habilitado. cátodo determina qué cátodos se activan para mostrar el dígito deseado.
  • Posición general en el sistema: este módulo muestra un número en la pantalla de 7 segmentos. Consulte el manual de instrucciones de la placa Basys 3 para obtener información sobre qué cátodos y ánodos se activan para usar la pantalla. Cuando el bit de error es alto, la pantalla muestra "Err".

salidaMUX

  • Descripción de las entradas: progModeInput determina qué leds se encienden durante el modo de programación. runModeInput determina qué LED se encienden durante el modo de ejecución. modeSelect es el bit de selección o control para el MUX.
  • Descripción de las salidas: ledOutput indica qué leds se encenderán.
  • Posición general en el sistema: Dependiendo del modo en que se encuentre la computadora (programa o ron), el MUX encenderá diferentes leds. En el modo de programa (modeSelect es '0'), el MUX enciende los LED para parecerse a la ubicación de la memoria en la que se encuentra la computadora y lo que contiene. En el modo de ejecución (modeSelect es '1'), el MUX se usa para depurar pero se puede configurar para mostrar cualquier otra cosa.

clockDivider

  • Descripción de las entradas: stop lee los cinco bits MSB del bus para detectar un comando de detención ('11111') y detiene el reloj. inputClk es la señal del reloj interno de la placa Basys 3.
  • Descripción de las salidas: ouputClk es el nuevo reloj que se ha ralentizado.
  • Posición general en el sistema: este reloj se utiliza para ralentizar la computadora para que el usuario pueda determinar lo que está sucediendo. El reloj puede funcionar mucho más rápido, sin embargo, actualmente está configurado en 2 Hz.

triStateBuffer

  • Descripción de las entradas: Din es la entrada de 5 bits que va al búfer. Ep es el bit de control.
  • Descripción de las salidas: Dout es la salida de 5 bits del búfer
  • Posición general en el sistema: cuando el bit de control Ep está activo, el búfer genera la entrada. Cuando el bit de control no está activo, el búfer no da salida a nada.

tenBitDRegister

  • Descripción de las entradas: Dbus es la entrada a la que se dirige el registro. Clk permite que el registro lea datos en un flanco de reloj ascendente. ARST establece el registro en 0 de forma asincrónica. Cuando outputEnable es bajo, el contenido del registro es la salida. Cuando readIn es bajo, el registro bloquea Dbus en el borde de reloj ascendente.
  • Descripción de las salidas: Qbus es la salida del registro
  • Lugar general en el sistema: el registro se usa varias veces en toda la computadora y se usa para almacenar información cuando se realizan operaciones.

fiveBitDRegister

  • Descripción de las entradas: Dbus es la entrada a la que se dirige el registro. Clk permite que el registro lea datos en un flanco de reloj ascendente. ARST establece el registro en 0 de forma asincrónica. Cuando outputEnable es bajo, el contenido del registro es la salida. Cuando readIn es bajo, el registro bloquea Dbus en el borde de reloj ascendente.
  • Descripción de las salidas: Qbus es la salida del registro.
  • Lugar general en el sistema: el registro se usa varias veces en toda la computadora y se usa para almacenar información cuando se realizan operaciones.

Paso 3: Código

A continuación se muestra una carpeta que contiene los archivos fuente y de restricción para la computadora de 10 bits.

Paso 4: demostración y código de muestra

El video de arriba demuestra cómo programar la computadora de 10 bits en la placa Basys 3 FPGA. También se adjunta a continuación un pdf que contiene los códigos de operación y un programa de muestra.

Recomendado: