diff --git a/rtl/apple1_mist.sv b/rtl/apple1_mist.sv index cfa34a5..6bc724a 100644 --- a/rtl/apple1_mist.sv +++ b/rtl/apple1_mist.sv @@ -552,7 +552,7 @@ clock clock( .reset ( reset_button ), // input: reset signal .cpu_clock ( cpu_clock ), - .cpu_clken ( cpu_clken ), // output: cpu clock enable + .cpu_clken ( cpu_clken ), // output: cpu clock enable (phi2) .pixel_clken( pixel_clken ) // output: pixel clock enable ); diff --git a/rtl/clock.v b/rtl/clock.v index 4356c20..6142092 100644 --- a/rtl/clock.v +++ b/rtl/clock.v @@ -10,30 +10,36 @@ module clock output cpu_clock ); -localparam CPU_DIVISOR = 56; // (sys_clock / CPU_DIVISOR) = 1 MHz -localparam PIXEL_DIVISOR = 8; // (sys_clock / PIXEL_DIVISOR) = 7 MHz +localparam CPU_DIVISOR = 56; // (sys_clock / CPU_DIVISOR) = 1 MHz +localparam PIXEL_DIVISOR = 8; // (sys_clock / PIXEL_DIVISOR) = 7 MHz +localparam REFRESH_DIVISOR = 65; // reg [5:0] counter_cpu; reg [2:0] counter_pixel; + reg [7:0] counter_refresh; always @(posedge sys_clock or posedge reset) begin if(reset) begin - counter_cpu <= 0; - counter_pixel <= 0; + counter_cpu <= 0; + counter_pixel <= 0; + counter_refresh <= 0; end else begin - if (counter_cpu == (CPU_DIVISOR-1)) counter_cpu <= 0; - else counter_cpu <= counter_cpu + 1; + if (counter_cpu == (CPU_DIVISOR-1)) begin + counter_cpu <= 0; + counter_refresh <= (counter_refresh == REFRESH_DIVISOR-1) ? 0 : counter_refresh + 1; + end + else + counter_cpu <= counter_cpu + 1; - if (counter_pixel == (PIXEL_DIVISOR-1)) counter_pixel <= 0; - else counter_pixel <= counter_pixel + 1; + counter_pixel <= (counter_pixel == PIXEL_DIVISOR-1) ? 0 : counter_pixel + 1; end end - assign cpu_clken = counter_cpu == 0; + assign cpu_clken = counter_cpu == 0 /*&& counter_refresh > 3*/; assign pixel_clken = counter_pixel == 0; assign cpu_clock = counter_pixel < 4 ? 1 : 0;