Necesito derivar un reloj de frecuencia más baja del reloj principal y muestrearlo en verilog

0

He tenido éxito en derivar el reloj, pero no puedo muestrear y verificar los resultados en el banco de pruebas. Adjuntando el código y el banco de pruebas escrito. Necesito encontrar una manera de eliminar el error- >

Línea 68: el objetivo de la asignación concurrente o la conexión del puerto de salida debe ser un tipo de red.

El programa-

module clk_div 
#( 
parameter WIDTH = 4, // Width of the register required
parameter N = 6
)
(clk,reset, clk_out);

input clk;
input reset;
output clk_out;

reg [WIDTH-1:0] reg1;
wire [WIDTH-1:0] next;
reg clk_tmp;

always @(posedge clk or posedge reset)

begin
  if (reset)
     begin
        reg1 <= 0;
    clk_tmp <= 1'b0;
     end

  else if (next == N)
       begin
         reg1 <= 0;
         clk_tmp <= ~clk_tmp;
       end

  else 
      reg1 <= next;
end

 assign next = reg1+1;            
 assign clk_out = clk_tmp;

endmodule

//-----------------------------------------------------------------------------------------------------

module sampling(clk_out, clk, result);
input clk_out;
input clk;
output reg [3:0] result;

clk_div inst (clk_out,rst,result);

reg [3:0] reg2;

always @ (posedge clk_out)
begin
if (clk==1'b1)
reg2[0]<=1;

else
reg2[0]<=0;

reg2<={reg2[2:0], clk_out};
assign result = reg2[0];

end
endmodule

Es banco de pruebas-

module tb1;

    // Inputs
    reg clk_out;
    reg clk;

    // Outputs
    wire [3:0] result;

    // Instantiate the Unit Under Test (UUT)
    sampling uut (
        .clk_out(clk_out), 
        .clk(clk), 
        .result(result)
    );

    initial begin
        // Initialize Inputs
        clk_out = 0;
        clk = 0;

        // Wait 100 ns for global reset to finish
        #100;

        // Add stimulus here
        clk=1'b1;
        forever #10 clk=~clk;

    end

endmodule
    
pregunta Ameya

1 respuesta

1

Su problema es probablemente esta línea:

assign result = reg2[0];

Porque antes declaraste

output reg [3:0] result;

Las redes declaradas como tipo reg solo pueden asignarse dentro de bloques de procedimiento (bloques always y initial ).

Si desea utilizar la asignación continua, debe declarar la variable como un tipo de cable.

En el caso de una salida, eso solo significa eliminar la palabra clave reg de la declaración:

output [3:0] result;
    
respondido por el The Photon

Lea otras preguntas en las etiquetas