diff options
| author | Warrick Lo <wlo@warricklo.net> | 2026-03-04 14:53:56 -0800 |
|---|---|---|
| committer | Warrick Lo <wlo@warricklo.net> | 2026-03-04 14:53:56 -0800 |
| commit | e16feba0f56963d22c6f7820815f0b651c78bbe5 (patch) | |
| tree | 9fe65e5f89d7f60ca3ac7d9f13f9991ca6d05937 /task3/task3.sv | |
| parent | Fix gaps and incorrect geometry at large sizes (diff) | |
Signed-off-by: Warrick Lo <wlo@warricklo.net>
Diffstat (limited to '')
| -rw-r--r-- | task3/task3.sv | 50 |
1 files changed, 35 insertions, 15 deletions
diff --git a/task3/task3.sv b/task3/task3.sv index ddb4e9a..c40f464 100644 --- a/task3/task3.sv +++ b/task3/task3.sv @@ -11,26 +11,46 @@ module task3(CLOCK_50, KEY, SW, LEDR, HEX0, HEX1, HEX2, HEX3, HEX4, HEX5, output logic [7:0] VGA_X, VGA_R, VGA_G, VGA_B; output logic [9:0] LEDR; - logic resetn, start, done; - logic [2:0] colour; - logic [6:0] center_y; - logic [7:0] center_x, radius; - - assign resetn = KEY[3]; - assign start = ~KEY[0]; - assign colour = 3'b010; - assign LEDR[0] = done; - - assign center_x = 8'd80; - assign center_y = 7'd60; - assign radius = SW[7:0]; + logic resetn, done, fillscreen_start, circle_start, + fillscreen_done, circle_done, fillscreen_plot, circle_plot; + logic [2:0] fillscreen_colour, circle_colour; + logic [6:0] fillscreen_y, circle_y; + logic [7:0] fillscreen_x, circle_x; vga_adapter #(.RESOLUTION("160x120")) U0(resetn, CLOCK_50, VGA_COLOUR, VGA_X, VGA_Y, VGA_PLOT, {VGA_R, 2'b00}, {VGA_G, 2'b00}, {VGA_B, 2'b00}, VGA_HS, VGA_VS, VGA_BLANK, VGA_SYNC, VGA_CLK); - circle U1(CLOCK_50, resetn, colour, center_x, center_y, radius, - start, done, VGA_X, VGA_Y, VGA_COLOUR, VGA_PLOT); + fillscreen U1(CLOCK_50, resetn, 3'b000, fillscreen_start, + fillscreen_done, fillscreen_vga_x, fillscreen_vga_y, + fillscreen_colour, fillscreen_plot); + + circle U2(CLOCK_50, resetn, 3'b010, 8'd80, 7'd60, 8'd40, + circle_start, circle_done, circle_x, circle_y, + circle_colour, circle_plot); + + assign resetn = KEY[3]; + assign start = ~KEY[0]; + assign LEDR[0] = done; + + assign VGA_X = fillscreen_start ? fillscreen_vga_x : circle_x; + assign VGA_Y = fillscreen_start ? fillscreen_vga_y : circle_y; + assign VGA_COLOUR = fillscreen_start ? fillscreen_colour : circle_colour; + assign VGA_PLOT = fillscreen_start ? fillscreen_plot : circle_plot; + + always_ff @(posedge CLOCK_50) begin + if (~resetn) begin + fillscreen_start <= 1'b0; + circle_start <= 1'b1; + done <= 1'b0; + end else if (fillscreen_done) begin + fillscreen_start <= 1'b0; + circle_start <= 1'b1; + end else if (circle_done) begin + circle_start <= 1'b0; + done <= 1'b1; + end + end endmodule: task3 |