Remuestreo con la operación MSB

0

Soy nuevo en verilog y HDL, así que ten paciencia conmigo.

En un código, tengo una variable de entrada clk , dos muestras de entrada de 16 bits, que se almacenan en [31:16] ddc_out_sample y [15:0] ddc_out_sample y una luz estroboscópica de entrada llamada ddc_out_strobe .

Lo que quiero hacer es tomar el bit de 8 MSB de [31:16] ddc_out_sample y [15:0] ddc_out_sample , con una muestra de 16 bits en lugar de 32 uno. Luego combine 4 de esas muestras para alimentarlas directamente a la salida [31:0] bb_sample . El estroboscopio de salida es bb_strobe .

Había pensado en la siguiente implementación para lograr esto:

reg count = 0;

always @(posedge clk)
     i_msb <= ddc_chain_out[31:24]
     q_msb <= ddc_chain_out[15:8]
     assign bb_strobe = 1'b0;
     if(count % 4 == 3) 
        assign bb_strobe = ddc_out_strobe;
     end
     count = count + 1;
end

Sé que deben evitarse las condiciones asíncronas , pero no veo cómo implementar esto de otra manera .

Cualquier comentario y opinión será apreciada.

    
pregunta titus.andronicus

1 respuesta

3

1) No mezcle = y < =, tienen diferentes significados y algunas herramientas se opondrán.

2) "asignar" es básicamente cablear una cosa a otra, no debe usarse en bloques "siempre".

3) No has asignado bb_sample .

Mi versión:

// 'reg' by itself is a single bit, need two bits for 0-3
reg [1:0] count = 0;

always @(posedge clk)
   if (ddc_out_strobe) begin
     i_msb <= ddc_chain_out[31:24];
     q_msb <= ddc_chain_out[15:8];
     if(count == 2'd3) 
         bb_strobe <= 1'b1;
         count <= 2'b0;
     end
     else begin
         count <= count + 1;
         bb_strobe <= 1'b0;
     end
   end
   else begin
      bb_strobe <= 1'b0;
   end
end
    
respondido por el pjc50

Lea otras preguntas en las etiquetas