X-Git-Url: http://git.joshuawise.com/fpgaboy.git/blobdiff_plain/62940da0dd1b60db11e9861d6dd55a43c5756114..f8c46ff554cb7f4c067eab1234faf729118c4c25:/Timer.v diff --git a/Timer.v b/Timer.v index 53f392d..facf20f 100644 --- a/Timer.v +++ b/Timer.v @@ -11,15 +11,17 @@ module Timer( inout [7:0] data, output reg irq = 0); + reg rdlatch = 0; + reg [15:0] addrlatch = 0; reg [7:0] tima = 0, tma = 0, tac = 0, div = 0; reg ovf = 0; reg [9:0] clkdv = 0; - wire is_tima = addr == `ADDR_TIMA; - wire is_tma = addr == `ADDR_TMA; - wire is_tac = addr == `ADDR_TAC; + wire is_tima = addrlatch == `ADDR_TIMA; + wire is_tma = addrlatch == `ADDR_TMA; + wire is_tac = addrlatch == `ADDR_TAC; - assign data = rd ? + assign data = rdlatch ? is_tima ? tima : is_tma ? tma : is_tac ? tac : @@ -33,8 +35,11 @@ module Timer( (clkdv[7:0] == 8'b0) : 0; - always @ (negedge clk) + always @ (posedge clk) begin + rdlatch <= rd; + addrlatch <= addr; + if(wr) begin case(addr) `ADDR_DIV: div <= 8'b0;