Dividir datos en Verilog y guardarlos

0

Lo que tengo es una matriz de 128 bits, he dividido la matriz en 4 registros de 32 bits, {dat3, dat2, dat1, dat0} < = data; dat (i) tiene un tamaño de 32 bits, los datos tienen un tamaño de 128 bits.

Después de un ciclo de reloj x, necesito usar los registros dat1..3, pero lo que encontré es que sus valores han cambiado (excepto por dat0), y no entiendo por qué. Anteriormente, he aplicado el mismo procedimiento con datos de tamaño de 64 bits en lugar de 128 bits y funcionó perfectamente para los datos de 128 bits de longitud. Algo no va bien,

¿Tienes alguna idea por favor? ¿Hay problemas con los datos de 128 bits de longitud? Si no, ¿qué podría morder el problema?

actualización:

esta es una parte del código, puede ayudar a entender la pregunta y para que me ayudes a resolver el problema. en este código, los datos tienen un tamaño de 128 bits, srcs es una estructura de datos, cada uno de ellos srcs.dat (i) tiene un tamaño de 32 bits, stateX es la máquina de estados, srcs1 y srcs0 tienen un tamaño de 16 bits. el programa comienza con un stateX del valor 8'd8.

  if(stateX == 8'd8 ) begin
  {srcs.dat3,srcs.dat2,srcs.dat1,srcs.dat0} <= data;
  stateX <= 8'd1;
  end
  if (stateX == 8'd1) begin
            {srcs1,srcs0} <= srcs.dat0;
            stateX <= 8'd2;
            startmem <= 1'b1;
            verif <= 1'b0;
    end
    else if(stateX == 8'd2) begin
            stateX <= 8'd4;     
            startmem <= 1'b0;
    end
    else if (stateX == 8'd4) begin
            {srcs1,srcs0} <= srcs.dat1;
            stateX <= 8'd9;
            startmem <= 1'b1;
            verif <= 1'b0;
    end
    else if(stateX == 8'd9) begin
            stateX <= 8'd10;
            startmem <= 1'b0;
    end
    else if (stateX == 8'd10) begin
            {srcs1,srcs0} <= srcs.dat2;
            stateX <= 8'd11;
            startmem <= 1'b1;
            verif <= 1'b0;
    end
    else if(stateX == 8'd11) begin
            stateX <= 8'd12;
            startmem <= 1'b0;
    end
    else if (stateX == 8'd12) begin
            {srcs1,srcs0} <= srcs.dat3;
            stateX <= 8'd13;
            startmem <= 1'b1;
            verif <= 1'b0;
    end 
    else if(stateX == 8'd13) begin
            stateX <= 8'd5;
            startmem <= 1'b0;
    end

gracias por la ayuda,

    
pregunta user8254046

0 respuestas

Lea otras preguntas en las etiquetas