He estado trabajando en este tema durante días y no he podido resolverlo. Esperaba que alguno de ustedes pudiera ayudarme a resolver este problema.
Entonces, cuando ejecuto mi código SV en Quartus y lo compilo, no recibo ningún error. Esto también sucede cuando compilo mi código en ModelSIM. Sin embargo, siempre que genero mi análisis de forma de onda en ModelSIM, ninguna de las variables, excepto las que fuerzo, están cambiando sus valores.
El código está debajo:
Top_level.sv
module top_level (
input logic SYS_CLK,
input logic PS2_CLK,
input logic PS2_DATA,
input logic rst,
output logic [3:0] VGA_R, VGA_G, VGA_B,
output logic h_sync_o, v_sync_o // h_sync and vertical sync output
);
logic reducedClk;
logic halfClock;
logic [1:0] direction = 0;
logic [9:0] x = 0, y = 0;
halfClk half (
.clk(SYS_CLK),
.reset(rst),
.halfclk(halfClock)
);
counter count (
.SYS_CLK(SYS_CLK),
.reset(rst),
.newCLK(reducedClk)
);
halfClk.sv
module halfClk(input logic clk, input logic reset, output logic halfclk); // This module takes in a clock signal, and outputs a clock signal with half the frequncy
always_ff@(posedge clk) begin
if (reset)
halfclk <= 0; // at every single positive edge of the clock,
halfclk = ~halfclk;
end // the slow clock flips. This means that for each two cycles of the clock, the half clock is cycled.
endmodule //this produces a duty cycle of 50%
counter.sv
module counter (
input logic SYS_CLK,
input logic reset,
output logic newCLK
);
logic [11:0] CLK_COUNTER;
always_ff @(posedge SYS_CLK) begin
if (reset) begin
CLK_COUNTER <= 0;
newCLK <= 1;
end
if (CLK_COUNTER < 2000) begin
CLK_COUNTER <= CLK_COUNTER + 1;
newCLK <= newCLK;
end
else begin
CLK_COUNTER <= 0;
newCLK <= ~newCLK;
end
end
endmodule
Para los propósitos de esta pregunta, ignora todas las otras variables. Creo que si puedes ayudarme a averiguar por qué halfClock
y reducedClock
no están cambiando, me ayudará con los otros.
Gracias por su ayuda de antemano, este error realmente ha sido molesto.