Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/jorgeloopzz/multiplier


https://github.com/jorgeloopzz/multiplier

de10-lite digital-electronics electronics modelsim quartus ulpgc vhdl

Last synced: 18 days ago
JSON representation

Awesome Lists containing this project

README

        



Multiplicador serie

- [🎯 Objetivos](https://github.com/jorgeloopzz/Multipliier#-objetivos)
- [✖️ Proceso de la multiplicación](https://github.com/jorgeloopzz/Multipliier#%EF%B8%8F-proceso-de-la-multiplicaci%C3%B3n)
- [📓 Definición del data-path](https://github.com/jorgeloopzz/Multipliier#-definici%C3%B3n-del-data-path)
- [🔢 Contador](https://github.com/jorgeloopzz/Multipliier#-contador)
- [🕹️ Definición de la unidad de control](https://github.com/jorgeloopzz/Multipliier#%EF%B8%8F-definici%C3%B3n-de-la-unidad-de-control)
- [🔲 Esquema general del multiplicador](https://github.com/jorgeloopzz/Multipliier#-esquema-general-del-multiplicador)
- [🛠️ Implementación en la placa](https://github.com/jorgeloopzz/Multipliier#%EF%B8%8F-implementaci%C3%B3n-en-la-placa)

 

# 🎯 Objetivos

El objetivo general de este proyecto es la realización de un multiplicador serie e implementarlo en la tarjeta DE10-Lite. El multiplicador tomará dos datos de 4 bits (X e Y) y los multiplicará.

 

# ✖️ Proceso de la multiplicación

El resultado estará formado por una "parte alta" y una "parte baja" de 4 bits, la unión de ambas partes será el número final. Para llegar a dicho valor, se emplea el siguiente algoritmo:

- Al iniciar la operación, a la parte alta se le asigna 0 y a la parte baja el valor de Y.
- Si el bit menos significativo de la parte baja es 0, se realiza un desplazamiento a la derecha de la parte alta añadiendo un 0 al principio, quedando al final un número de 5 bits.
- En caso contrario, se realiza la misma operación, pero a la parte alta se le suma el valor de X.
- Este algoritmo hay que hacerlo un total de 4 veces (sin contar la inicialización) y es realizado por la **ALU**.

 

# 📓 Definición del data-path

El circuito para implementar esas operaciones estará formado por 2 registros que almacenen X y el resultado final, la unidad aritmético lógica y 2 multiplexores que unirán parte alta y baja, formando el siguiente diagrama de bloques:

 

## 🔢 Contador

¿Y cómo controlamos los pasos que tiene que hacer el data-path? El final de la multiplicación se maneja mediante una señal de salida _done_ que se pone a 1 cuando acaba. En la [descripición VHDL](https://github.com/jorgeloopzz/Multipliier/blob/main/quartus/multiplier_datapath.vhd) hay que añadir un [contador](https://github.com/jorgeloopzz/Multipliier/blob/main/quartus/contador_k.vhd) no mostrado en la imagen. Este contador ya viene definido para que cuenta hasta 4, por lo que conectamos su RCO, _fin_cuenta_, a la señal de salida para que se ponga a 1 cuando termine de contar.

 

# 🕹️ Definición de la unidad de control

La unidad de control del multiplicador se realizará mediante una MEF que siga el siguiente diagrama de estados:

 

Esta genera las señales por las que se inicia el producto (**inicio**) y se empieza el proceso de multiplicación (**enable**). El contador mencionado antes, empieza a contar en el estado de **mult**, por lo tanto, su _enable_ debe estar a 1 cuando cuando **inicio** y **enable** tienen los valores correspondientes.

 

# 🔲 Esquema general del multiplicador

El circuito multiplicador estará constituido por la unidad de control y por la unidad de data-path, según se muestra en la siguiente imagen:

 

 

# 🛠️ Implementación en la placa

Añadiremos la carpeta utils-display al proyecto, que contiene los archivos para representar los datos en BCD. Declaramos `TrabajoPR1_multiplicador.vhd` como top-level entity, que define los leds que deben encenderse en la placa. Luego haremos la asignación de pines importando el fichero `TrabajoPR1_multiplicador.qsf`, es importante que se encuentre dentro de la carpeta de trabajo. La conexión de los pines se muestra en la siguiente imagen:

 

 

| 4 X 2 | 8 X 2 |
| :----------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------: |
| | |