Scrolling works!!1!
This commit is contained in:
parent
a4d24551d5
commit
c2d5c19dcc
8 changed files with 137 additions and 80 deletions
|
|
@ -8,6 +8,8 @@ input in_blank, in_vsync, in_hsync,
|
|||
input [19:0] glyphmem_data,
|
||||
output [15:0] glyphmem_r_addr,
|
||||
|
||||
input [11:0] scroll_y,
|
||||
|
||||
output out_hsync, out_vsync,
|
||||
output [7:0] out_red,
|
||||
output [7:0] out_green,
|
||||
|
|
@ -158,11 +160,11 @@ always @(posedge clk) begin
|
|||
end
|
||||
|
||||
if (in_vsync_last && !in_vsync) begin
|
||||
glyph_y <= 0;
|
||||
px_y <= 0;
|
||||
glyph_y <= scroll_y / FONT_GLYPH_H;
|
||||
px_y <= scroll_y % FONT_GLYPH_H;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
endmodule
|
||||
endmodule
|
||||
|
|
|
|||
|
|
@ -180,6 +180,7 @@ wire [19:0] glyph_buffer_w_data;
|
|||
wire win_blank;
|
||||
wire [11:0] win_w;
|
||||
wire [11:0] win_h;
|
||||
wire [11:0] win_scroll_y;
|
||||
wire out_data_en;
|
||||
wire out_data_valid;
|
||||
wire [7:0] matcher_debug;
|
||||
|
|
@ -306,6 +307,8 @@ term_renderer #(
|
|||
.in_blank(win_blank),
|
||||
.in_vsync(in_vsync),
|
||||
.in_hsync(in_hsync),
|
||||
|
||||
.scroll_y(win_scroll_y),
|
||||
|
||||
.out_hsync(),
|
||||
.out_vsync(),
|
||||
|
|
@ -347,6 +350,7 @@ window_matcher window_matcher_i (
|
|||
.win_locked(win_locked),
|
||||
.win_w(win_w),
|
||||
.win_h(win_h),
|
||||
.win_scroll_y(win_scroll_y),
|
||||
|
||||
.win_x_dbg(win_x_dbg),
|
||||
.win_y_dbg(win_y_dbg),
|
||||
|
|
@ -368,4 +372,4 @@ window_matcher window_matcher_i (
|
|||
.out_blue(out_blue)
|
||||
);
|
||||
|
||||
endmodule
|
||||
endmodule
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ module window_matcher(
|
|||
output reg [11:0] win_h,
|
||||
output reg [11:0] win_right,
|
||||
output reg [11:0] win_bottom,
|
||||
output reg [11:0] win_scroll_y,
|
||||
output reg win_locked,
|
||||
input [7:0] win_red, [7:0] win_green, [7:0] win_blue,
|
||||
|
||||
|
|
@ -208,6 +209,8 @@ module window_matcher(
|
|||
reg [11:0] win_y_int;
|
||||
reg [11:0] win_w_int;
|
||||
reg [11:0] win_h_int;
|
||||
reg [11:0] win_scroll_y_int;
|
||||
reg [11:0] win_sof_marker_int;
|
||||
|
||||
assign win_x_dbg = win_x_int;
|
||||
assign win_y_dbg = win_y_int;
|
||||
|
|
@ -221,17 +224,11 @@ module window_matcher(
|
|||
ST_MAT_RX3 = 5'b01000,
|
||||
ST_MAT_DATA = 5'b10000;
|
||||
reg [4:0] matcher_state;
|
||||
wire matched = matcher_state[4];
|
||||
reg matched;
|
||||
|
||||
reg [11:0] dval_x_reg;
|
||||
reg [11:0] dval_y_reg;
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst == 1) begin
|
||||
out_data_valid <= 0;
|
||||
out_data_en <= 0;
|
||||
end
|
||||
|
||||
if (rst || in_vsync) begin
|
||||
matcher_state <= ST_MAT_WAITING;
|
||||
win_x_int <= 0;
|
||||
|
|
@ -239,68 +236,82 @@ module window_matcher(
|
|||
win_w_int <= 0;
|
||||
win_h_int <= 0;
|
||||
dval_x_reg <= 0;
|
||||
dval_y_reg <= 0;
|
||||
win_scroll_y_int <= 0;
|
||||
win_sof_marker_int <= 0;
|
||||
matched <= 0;
|
||||
out_data_en <= 0;
|
||||
out_data_valid <= 0;
|
||||
end
|
||||
|
||||
if (!rst) begin
|
||||
if (in_blank) begin
|
||||
/* Reset state if the header is only partially contained in this frame */
|
||||
if (matcher_state != ST_MAT_DATA) begin
|
||||
matcher_state <= ST_MAT_WAITING;
|
||||
end
|
||||
if (!in_blank_reg) begin
|
||||
if (matcher_state != ST_MAT_DATA) begin
|
||||
out_data_en <= 0;
|
||||
end
|
||||
|
||||
matcher_state <= ST_MAT_WAITING;
|
||||
end
|
||||
|
||||
end else begin
|
||||
case (matcher_state)
|
||||
ST_MAT_WAITING: begin
|
||||
if (in_pxd_pattern_match) begin
|
||||
matcher_state <= ST_MAT_RX0;
|
||||
win_x_int <= scan_x_reg[7];
|
||||
win_y_int <= scan_y;
|
||||
if (!matched) begin
|
||||
win_x_int <= scan_x_reg[7];
|
||||
win_y_int <= scan_y;
|
||||
end
|
||||
end
|
||||
end
|
||||
ST_MAT_RX0: begin
|
||||
matcher_state <= ST_MAT_RX1;
|
||||
win_sof_marker_int <= in_pxd;
|
||||
end
|
||||
|
||||
ST_MAT_RX1: begin
|
||||
matcher_state <= ST_MAT_RX2;
|
||||
if (!matched) begin
|
||||
win_scroll_y_int <= in_pxd;
|
||||
end
|
||||
end
|
||||
|
||||
ST_MAT_RX2: begin
|
||||
matcher_state <= ST_MAT_RX3;
|
||||
win_w_int <= in_pxd;
|
||||
if (!matched) begin
|
||||
win_w_int <= in_pxd;
|
||||
end
|
||||
end
|
||||
|
||||
ST_MAT_RX3: begin
|
||||
matcher_state <= ST_MAT_DATA;
|
||||
win_h_int <= in_pxd;
|
||||
out_data_valid <= 1;
|
||||
out_data_en <= 1;
|
||||
dval_x_reg <= 13;
|
||||
dval_y_reg <= 0;
|
||||
if (!matched) begin
|
||||
matched <= 1;
|
||||
win_h_int <= in_pxd;
|
||||
end
|
||||
|
||||
if (win_sof_marker_int[7]) begin
|
||||
out_data_valid <= 1;
|
||||
out_data_en <= 1;
|
||||
|
||||
end else if (out_data_en) begin
|
||||
out_data_valid <= 1;
|
||||
end
|
||||
|
||||
dval_x_reg <= 13;
|
||||
end
|
||||
|
||||
ST_MAT_DATA: begin
|
||||
if (out_data_en) begin
|
||||
dval_x_reg <= dval_x_reg + 1;
|
||||
end
|
||||
|
||||
if (dval_x_reg == win_w_int || in_blank) begin
|
||||
out_data_valid <= 0;
|
||||
end
|
||||
end
|
||||
endcase
|
||||
end
|
||||
|
||||
if (matcher_state == ST_MAT_DATA) begin
|
||||
/* blank */
|
||||
if (scan_x == win_x_int && out_data_en) begin
|
||||
out_data_valid <= 1;
|
||||
dval_x_reg <= 1;
|
||||
|
||||
end else if (out_data_en) begin
|
||||
dval_x_reg <= dval_x_reg + 1;
|
||||
end
|
||||
|
||||
if (dval_x_reg == win_w_int || in_blank) begin
|
||||
out_data_valid <= 0;
|
||||
end
|
||||
|
||||
if (!in_blank_reg && in_blank) begin
|
||||
dval_y_reg <= dval_y_reg + 1;
|
||||
end
|
||||
|
||||
if (dval_y_reg == win_h_int) begin
|
||||
out_data_en <= 0;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -351,6 +362,7 @@ module window_matcher(
|
|||
win_y <= 0;
|
||||
win_right <= 0;
|
||||
win_bottom <= 0;
|
||||
win_scroll_y <= 0;
|
||||
|
||||
end else begin
|
||||
if (in_vsync_reg == 0 && in_vsync == 1) begin
|
||||
|
|
@ -363,6 +375,7 @@ module window_matcher(
|
|||
win_y <= win_y_int;
|
||||
win_right <= win_x_int + win_w_int + 1;
|
||||
win_bottom <= win_y_int + win_h_int + 1;
|
||||
win_scroll_y <= win_scroll_y_int;
|
||||
|
||||
end else begin
|
||||
win_w <= 0;
|
||||
|
|
@ -371,6 +384,7 @@ module window_matcher(
|
|||
win_y <= 0;
|
||||
win_right <= 0;
|
||||
win_bottom <= 0;
|
||||
win_scroll_y <= 0;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue