problema de multiplicación de Radix-4

0

Estoy escribiendo código en verilog que toma A, B como entrada de 8 bits, multiplíquelos usando el método radix -4. cuando ejecuto el código, la salida de shft aparece como "xx0" y el mutipler no puede tomar el valor de la entrada A

¿Puede alguien ayudarme con eso? Este es un subcódigo:

module pha1(A,B,M ,clk,shft);
  input wire[7:0] A,B;
  input clk;
  output reg [7:0]M;

  reg [7:0] mutipler;

  output reg[2:0] shft;

  reg init;

  initial 
    init=1'b0;
  initial 
    mutipler=A;

  always @(posedge clk)
  begin
    shft={mutipler[1],mutipler[0],init};
  end 
endmodule

Este es el banco de pruebas

'timescale 1ns / 1ps

module pah1tst;
reg [7:0] A;
reg [7:0] B;
reg clk;
wire [9:0] M;
wire [2:0] shft;

pha1 uut (
    .A(A), 
    .B(B), 
    .M(M), 
    .clk(clk), 
   .shft
);

initial clk=0;
always #2 clk=~clk;

initial begin
    A = 2;
    B =5;
    #5;
    #34;
end
endmodule
    
pregunta sepeee

1 respuesta

1

"inicial" solo ocurre una vez en el tiempo cero. Prueba:
asignar mutipler = A;

Mejor aún, ¿por qué no usar A directamente?

Utilice la asignación no bloqueada para la lógica cronometrada (es menos probable que obtenga un comportamiento no deseado):
shft < = {mutipler [1], mutipler [0], init};

En general, implemente el restablecimiento de la lógica sincronizada para que pueda forzar estados conocidos al inicio de la simulación.

(Por cierto, no sé el multiplicador de radix-4).

    
respondido por el rioraxe

Lea otras preguntas en las etiquetas