Я создал конечный автомат / путь к данным, который я отлаживаю в ModelSim. Состояния: Загрузка, Увеличение и Окончание. Состояния, кажется, прогрессируют нормально, однако countx и county (внутренние сигналы) не увеличиваются в состоянии приращения, и, следовательно, выходы vga_x, vga_y не назначаются.
Я попытался изменить сигналы countx и county с логики на reg, но это не имело никакого значения. также попытался установить выходные сигналы для блокировки, так как я хочу, чтобы countx и county были назначены на выход после того, как они будут увеличены в том же состоянии.
module fillscreen(input logic clk, input logic rst_n, input logic [2:0] colour,
input logic start, output logic done,
output logic [7:0] vga_x, output logic [6:0] vga_y,
output logic [2:0] vga_colour, output logic vga_plot);
enum logic [1:0] {Load = 2'b00, Increment = 2'b01, Out = 2'b10, Finish = 2'b11} state, next_state;
reg[7:0] countx;
reg [6:0] county;
always @ (posedge clk) begin
state = Load;
case(state)
Load: begin
if(rst_n == 0)
next_state <= Load;
else if (start == 1)
next_state <= Increment;
else begin
next_state <= Load; end
//initialize counter
countx <= 0;
county <= 0; end
Increment: begin
if(rst_n == 0)
next_state <= Load;
else if (county < 119 && countx < 159) begin
county <= county+1;
next_state <= Increment; end
else if (countx < 159) begin
countx <= countx +1;
next_state <= Increment; end
else begin
next_state <= Finish;end
//output
vga_y = county;
vga_x = countx;
vga_colour = countx % 8;
vga_plot = 1;
end
Finish: begin
done <= 1;
if(rst_n == 0)
next_state <= Load;
else begin
next_state <= Finish; end
end
default: begin
vga_y = county;
vga_x = countx;
done = 0;
vga_plot = 0;
end
endcase
state = next_state;
end
endmodule