summaryrefslogtreecommitdiff
path: root/rtl
diff options
context:
space:
mode:
authorfabian-mv <fabian@cluster451.org>2022-10-25 10:04:20 -0600
committerfabian-mv <fabian@cluster451.org>2022-10-25 10:04:20 -0600
commit085dbae65516cfb292482861f12531935e58499c (patch)
tree615b74bc03cc0119ee6aeee6f4edb8a4a405d5a4 /rtl
parent2dbac6c57c6180adf07dcca598e86a9dad1162ce (diff)
mul: actualiza API de modulo de multiplicación
Diffstat (limited to 'rtl')
-rw-r--r--rtl/core/mul/mul.sv38
1 files changed, 17 insertions, 21 deletions
diff --git a/rtl/core/mul/mul.sv b/rtl/core/mul/mul.sv
index 9abee23..5ff7e24 100644
--- a/rtl/core/mul/mul.sv
+++ b/rtl/core/mul/mul.sv
@@ -1,27 +1,23 @@
-module core_mul_mul // TODO: cambiar nombre a solo core_mul, ya que solo va a haber una operación para esto
+module core_mul
#(parameter W=32)
-(
- input logic[W - 1:0] a,
- b,
- input logic clk,
+( // realiza la operación a * b + c = q
+ input logic[W - 1:0] a, // primer sumando
+ b, // segundo sumando
+ input logic[W - 1:0] c_hi, // parte más significativa de c
+ c_lo, // parte menos significativa de c
+ input logic c_size, // si es 1, c es de 2 words, si es 0, c es de 1 word
+ clk, // clock, ya que es una máquina de estados
+ add // si es 1, c se suma. si es 0, no se suma
+ sig // si la suma es signed o unisgned
+ q_size // si es 1, q es de 2 words, si es 0, q es de 1 word
- output logic[(W*2) - 1:0] q, // TODO: cambiar a dos salidas de tamaño de 1 word, independientemente de W. se les puede llamar q_hi y q_lo a las dos partes de la respuesta
- output logic z, // no hay C ni V, ya que se dejan unaffected
- n
+ output logic[31:0] q_hi, // parte más significa tiva del resultado
+ output logic[31:0] q_lo, // parte menos significativa del resultado
+ output logic z,
+ n, // no hay C ni V, ya que se dejan unaffected
+ rdy // si es 1, la multiplicación está lista
//! TODO:
- //! como es una máquina de estados, es necesario tener también:
- //! Entradas:
- //! logic[w-1:0] c_hi // ya que puede ser a * b + c
- //! logic[w-1:0] c_lo // ya que puede ser a * b + c // se necesitan un hi y un lo porque SMLAL lo requiere
- //! logic c_big // ya que puede ser de 32bits o 64bits
- //! logic add // ya que se tiene que avisar si se va a sumar c o no
- //! indicar cuando se inicia la multiplicación en la máquina de estados
- //! si la operación es signed o unsigned
- //! logic double_word // si la salida es de tamaño word o double word
- //! Salidas:
- //! indicar en qué ciclo la multiplicación está lista // ya que la multiplicación es de ciclos
- //! // variables
//! hay que definit un protocolo de cómo se usa este módulo
//! Por ejemplo:
//! se levanta rdy en algún momento, pero qué pasa al ciclo siguiente? se mantiene o se baja? qué sucede?
@@ -52,7 +48,7 @@ always@(posedge clk) begin
2'b10:
- booth[(W*2):W] = A - B;
+ booth[(W*2):W] = A - B;
// 2'b11 o 2'b00:
default: ;