From 2dbac6c57c6180adf07dcca598e86a9dad1162ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabi=C3=A1n=20Montero?= Date: Sun, 23 Oct 2022 13:36:30 -0600 Subject: =?UTF-8?q?a=C3=B1ade=20sugerencias=20y=20TODO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rtl/core/mul/mul.sv | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) (limited to 'rtl/core/mul/mul.sv') diff --git a/rtl/core/mul/mul.sv b/rtl/core/mul/mul.sv index a5ac02f..9abee23 100644 --- a/rtl/core/mul/mul.sv +++ b/rtl/core/mul/mul.sv @@ -1,13 +1,33 @@ -module core_mul_mul +module core_mul_mul // TODO: cambiar nombre a solo core_mul, ya que solo va a haber una operación para esto #(parameter W=32) ( input logic[W - 1:0] a, b, input logic clk, - output logic[(W*2) - 1:0] q, - output logic z, + 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 + + //! 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? + //! es capaz que se soporte que se haga un ready y un start? esto se define en este módulo, para que contro lo use + //! qué pasa si la salida es signed? + //! es necesario que las señales de entrada se mantengan constantes durante los ciclos? ); logic[(W*2):0] booth; @@ -23,16 +43,7 @@ module core_mul_mul counter = W; end -always@(posedge clk or negedge rst_n) begin - if (~rst_n) begin - booth = { W{1'b0}, b, 0 } - Q = booth[1:0]; - //A = booth[(W*2):W]; - //B = a; - counter = W; - end - else begin - +always@(posedge clk) begin A = booth[(W*2):W]; unique case(Q) @@ -50,7 +61,6 @@ always@(posedge clk or negedge rst_n) begin booth >>> 1; counter = counter - 1; - end always_comb if(counter == 0) begin -- cgit v1.2.3