From 2a97b51b14c64d9c705c7f91bb269df4ac4eeb01 Mon Sep 17 00:00:00 2001 From: Tomek Malesinski Date: Thu, 21 Aug 2008 21:46:34 +0200 Subject: [PATCH] Factor out ms_hcount sequencer into a module --- antic.v | 127 +++++++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 78 insertions(+), 49 deletions(-) diff --git a/antic.v b/antic.v index 3d6f944..1eeb103 100644 --- a/antic.v +++ b/antic.v @@ -15,6 +15,74 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +module antic_ms_hcount_seq(ms_hcount, + new_block, dma_block, dma_pf_width, ir, + shift_reg_shift, load_pf, load_out); + input ms_hcount; + input new_block, dma_block, dma_pf_width, ir; + output shift_reg_shift, load_pf, load_out; + + wire [7:0] ms_hcount; + wire new_block, dma_block; + wire [1:0] dma_pf_width; + wire [7:0] ir; + wire shift_reg_shift; + reg load_pf, load_out; + + reg [3:0] pf_byte_mod; + + always @ (ir) + case (ir[3:0]) + 'h2: pf_byte_mod = 3; + 'h3: pf_byte_mod = 3; + 'h4: pf_byte_mod = 3; + 'h5: pf_byte_mod = 3; + 'h6: pf_byte_mod = 7; + 'h7: pf_byte_mod = 7; + 'h8: pf_byte_mod = 15; + 'h9: pf_byte_mod = 15; + 'ha: pf_byte_mod = 7; + 'hb: pf_byte_mod = 7; + 'hc: pf_byte_mod = 7; + 'hd: pf_byte_mod = 3; + 'he: pf_byte_mod = 3; + 'hf: pf_byte_mod = 3; + default: pf_byte_mod = 3; + endcase + + assign shift_reg_shift = (ms_hcount >= 3) && (ms_hcount < 195) && + (ms_hcount[1:0] == 3); + + always @ (new_block or dma_block or dma_pf_width or ms_hcount or + pf_byte_mod or ir) begin + load_pf = 0; + if (new_block && dma_block) begin + if (dma_pf_width == 1 && !ir[4]) + load_pf = ((ms_hcount & pf_byte_mod) == (3 & pf_byte_mod)) && + (ms_hcount >= 35) && (ms_hcount < 163); + else if (dma_pf_width == (ir[4] ? 1 : 2)) + load_pf = ((ms_hcount & pf_byte_mod) == (3 & pf_byte_mod)) && + (ms_hcount >= 19) && (ms_hcount < 179); + else if (dma_pf_width == 3 || (ir[4] && dma_pf_width == 2)) + load_pf = ((ms_hcount & pf_byte_mod) == (3 & pf_byte_mod)) && + (ms_hcount >= 3) && (ms_hcount < 195); + end + end + + always @ (dma_block or dma_pf_width or ms_hcount or pf_byte_mod) begin + load_out = 0; + if (dma_block) + case (dma_pf_width) + 1: load_out = ((ms_hcount & pf_byte_mod) == (9 & pf_byte_mod)) && + (ms_hcount >= 41 && ms_hcount < 169); + 2: load_out = ((ms_hcount & pf_byte_mod) == (9 & pf_byte_mod)) && + (ms_hcount >= 25 && ms_hcount < 185); + 3: load_out = ((ms_hcount & pf_byte_mod) == (9 & pf_byte_mod)) && + (ms_hcount >= 9 && ms_hcount < 201); + endcase + end +endmodule + module antic_shift_reg(clk_i, shift, load, in, out); input clk_i; input shift; @@ -128,7 +196,6 @@ module antic(rst_i, clk_i, reg char_block; reg one_bit_pixel; reg [1:0] pf_pixel_mod; - reg [3:0] pf_byte_mod; reg wsync; @@ -139,12 +206,12 @@ module antic(rst_i, clk_i, wire load_memscanh; wire load_mis; wire load_ply; - reg load_pf; + wire load_pf; wire load_char; wire [1:0] dma_ply_num; - reg load_out; + wire load_out; wire hblank, vblank, vsync; reg dwin; @@ -322,7 +389,6 @@ module antic(rst_i, clk_i, char_block = 0; one_bit_pixel = 0; pf_pixel_mod = 0; - pf_byte_mod = 3; case (ir[3:0]) 'h0: maxline = ir[6:4]; 'h1: maxline = 0; @@ -331,98 +397,84 @@ module antic(rst_i, clk_i, char_block = 1; one_bit_pixel = 0; pf_pixel_mod = 0; - pf_byte_mod = 3; end 'h3: begin maxline = 9; char_block = 1; one_bit_pixel = 0; pf_pixel_mod = 0; - pf_byte_mod = 3; end 'h4: begin maxline = 7; char_block = 1; one_bit_pixel = 0; pf_pixel_mod = 0; - pf_byte_mod = 3; end 'h5: begin maxline = 15; char_block = 1; one_bit_pixel = 0; pf_pixel_mod = 0; - pf_byte_mod = 3; end 'h6: begin maxline = 7; char_block = 1; one_bit_pixel = 1; pf_pixel_mod = 0; - pf_byte_mod = 7; end 'h7: begin maxline = 15; char_block = 1; one_bit_pixel = 1; pf_pixel_mod = 0; - pf_byte_mod = 7; end 'h8: begin maxline = 7; char_block = 0; one_bit_pixel = 0; pf_pixel_mod = 3; - pf_byte_mod = 15; end 'h9: begin maxline = 3; char_block = 0; one_bit_pixel = 1; pf_pixel_mod = 1; - pf_byte_mod = 15; end 'ha: begin maxline = 3; char_block = 0; one_bit_pixel = 0; pf_pixel_mod = 1; - pf_byte_mod = 7; end 'hb: begin maxline = 1; char_block = 0; one_bit_pixel = 1; pf_pixel_mod = 0; - pf_byte_mod = 7; end 'hc: begin maxline = 0; char_block = 0; one_bit_pixel = 1; pf_pixel_mod = 0; - pf_byte_mod = 7; end 'hd: begin maxline = 1; char_block = 0; one_bit_pixel = 0; pf_pixel_mod = 0; - pf_byte_mod = 3; end 'he: begin maxline = 0; char_block = 0; one_bit_pixel = 0; pf_pixel_mod = 0; - pf_byte_mod = 3; end 'hf: begin maxline = 0; char_block = 0; one_bit_pixel = 0; pf_pixel_mod = 0; - pf_byte_mod = 3; end endcase end @@ -452,37 +504,14 @@ module antic(rst_i, clk_i, else ms_hcount <= ms_hcount + 1; - assign shift_reg_shift = (ms_hcount >= 3) && (ms_hcount < 195) && - (ms_hcount[1:0] == 3); - - always @ (new_block or dma_block or dma_pf_width or ms_hcount or - pf_byte_mod or ir) begin - load_pf = 0; - if (new_block && dma_block) begin - if (dma_pf_width == 1 && !ir[4]) - load_pf = ((ms_hcount & pf_byte_mod) == (3 & pf_byte_mod)) && - (ms_hcount >= 35) && (ms_hcount < 163); - else if (dma_pf_width == (ir[4] ? 1 : 2)) - load_pf = ((ms_hcount & pf_byte_mod) == (3 & pf_byte_mod)) && - (ms_hcount >= 19) && (ms_hcount < 179); - else if (dma_pf_width == 3 || (ir[4] && dma_pf_width == 2)) - load_pf = ((ms_hcount & pf_byte_mod) == (3 & pf_byte_mod)) && - (ms_hcount >= 3) && (ms_hcount < 195); - end - end - - always @ (dma_block or dma_pf_width or ms_hcount or pf_byte_mod) begin - load_out = 0; - if (dma_block) - case (dma_pf_width) - 1: load_out = ((ms_hcount & pf_byte_mod) == (9 & pf_byte_mod)) && - (ms_hcount >= 41 && hcount < 169); - 2: load_out = ((ms_hcount & pf_byte_mod) == (9 & pf_byte_mod)) && - (ms_hcount >= 25 && ms_hcount < 185); - 3: load_out = ((ms_hcount & pf_byte_mod) == (9 & pf_byte_mod)) && - (ms_hcount >= 9 && ms_hcount < 201); - endcase - end + antic_ms_hcount_seq u_ms_hcount_seq(.ms_hcount(ms_hcount), + .new_block(new_block), + .dma_block(dma_block), + .dma_pf_width(dma_pf_width), + .ir(ir), + .shift_reg_shift(shift_reg_shift), + .load_pf(load_pf), + .load_out(load_out)); always @ (hcount or dma_pf_width or dma_instr_en or vblank) begin if (!dma_instr_en || vblank) -- 2.11.4.GIT