// Diseņo de la Unidad de control del Multiplicador
// Descripcion procedimental como FSM
// Rev: 3, abril 2021



module u_control(
 input xs,clk,reset,busc0,cycont,
 output reg clsincr,fin,
 output reg wa,wd,wsuml,wsumh,shrsum,upcont
    );


 // Defina aqui la lista de estados con la sentencia parameter
  
 



 
 /* Defina debajo una variable de tipo reg para el estado presente llamada estado_actual y otra para el proximo estado llamada siguiente_estado. 
 Dimensione ambas variables con el tamaņo correcto en funcion del  numero de estados que tiene.
 */

   





 /* Proceso de cambio de estado. Tiene que utilizar para las variables de estado los mismos nombres que haya elegido previamente. */

 always @(posedge clk,posedge reset)
  begin
   if(reset)
   estado_actual <= S0;
  else
   estado_actual <= siguiente_estado;
  end
  
  
  /* Proceso para obtener los proximos estados y las salidas a partir de la carta ASM 
*/

  always @(*)
  begin   //Por defecto se establecen todas las seņales a cero
   clsincr=0; 
   wa=0;
   wd=0;
   wsuml=0;
   wsumh=0;
   upcont=0;
   shrsum=0;
   fin=0;

/* Establezca "case" sobre su variable de 'estado presente' 
 Rellene todos los estados y active las salidas siguiendo la carta ASM.
En la plantilla se muestra el ejemplo del caso del estado inicial, supuesto que es S0 y siendo S1 el siguiente estado cuando Xs es 1 
*/
   case(estado_actual)

      S0:
        if(xs)
          begin
          clsincr=1;
          siguiente_estado = S1;
          end
        else
          siguiente_estado = S0;





/* Sentencia que evita inderterminacion en los codigos de estado sin usar       */
      default:  siguiente_estado=S0;  

  endcase

  end

endmodule
