Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/jorgeloopzz/multiplier
- Owner: jorgeloopzz
- Created: 2024-01-06T13:16:11.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2024-12-01T21:33:21.000Z (about 1 month ago)
- Last Synced: 2024-12-01T22:29:03.363Z (about 1 month ago)
- Topics: de10-lite, digital-electronics, electronics, modelsim, quartus, ulpgc, vhdl
- Language: VHDL
- Homepage: https://www.iuma.ulpgc.es/roberto/ed/Trabajos_Asignatura/T1_multiplicador/trabajo-multiplicador.html
- Size: 984 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.es.md
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 |
| :----------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------: |
| | |