Se necesita ayuda con verilog testbench

-1

¿alguien podría explicar por qué la señal de salida en mi verilog testbench no está cambiando?

Estoy tratando de construir un módulo que realice tareas tanto de posición como de negación.
Para propósitos de prueba, he construido un módulo que recibe un reloj y devuelve una señal.
La señal se establece en 1 en posición de posición, y en 0 en negedge, espero que sea una copia de la señal de reloj.
Todo se está compilando y sintetizando sin errores, se está ejecutando el banco de pruebas, pero la señal de salida no cambia, se mantiene en cero. Soy nuevo en verilog, así que tal vez me esté perdiendo algo obvio.

Aquí está mi módulo-

module mytest( clk, rst, led );
input clk, rst;
output led;

reg r_out = 1'b0;

always @ (*)
begin

    @(posedge clk)
    begin
        r_out <= 1'b1;
    end

    @(negedge clk)
    begin
        r_out <= 1'b0;
    end

end

assign led = r_out;

endmodule

Y aquí está el banco de pruebas-

'timescale 1ns/100ps
module mytest_tb;

parameter SYSCLK_PERIOD = 100;// 10MHZ
reg SYSCLK;
reg NSYSRESET;
wire w_led;

//////////////////////////////////////////////////////////////////////
// Clock Driver
//////////////////////////////////////////////////////////////////////
always @(SYSCLK)
    #(SYSCLK_PERIOD / 2.0) SYSCLK <= !SYSCLK;

//////////////////////////////////////////////////////////////////////
// Instantiate Unit Under Test:  mytest
//////////////////////////////////////////////////////////////////////
mytest mytest_0 (
    // Inputs
    .clk(SYSCLK),
    .rst(NSYSRESET),

    // Outputs
    .led(w_led)

    // Inouts

);

initial
begin
    SYSCLK = 1'b0;
    NSYSRESET = 1'b0;
end

endmodule

Gracias de antemano!

    
pregunta Karlis I.

1 respuesta

0

Por lo tanto, me indicaron que este es un enfoque incorrecto.

El problema en cuestión debería haberse resuelto mediante el uso de una máquina de estados finitos , que eliminaría la necesidad de acciones adicionales en negedge.

En cuanto a la pregunta en sí misma, ¿por qué no funciona la prueba? es porque

always @ (*) begin
    @ (posedge clk)
        ...
    @ (negedge clk)
        ...
end

es una sintaxis incorrecta. Correcto sería

always @ (posedge clk) begin
    ...
end
always @ (negedge clk) begin
    ...
end
    
respondido por el Karlis I.

Lea otras preguntas en las etiquetas