|
@@ -8,7 +8,11 @@
|
|
|
// Sharing JTAG pins (via JTAGEN)
|
|
|
`undef SHARED_JTAG
|
|
|
|
|
|
-module max80 (
|
|
|
+module max80
|
|
|
+#(
|
|
|
+ // Pull-up installed on RTC 32 kHz line
|
|
|
+ parameter rtc_32khz_rework = 1'b0
|
|
|
+) (
|
|
|
// Clock oscillator
|
|
|
input clock_48, // 48 MHz
|
|
|
|
|
@@ -768,13 +772,14 @@ module max80 (
|
|
|
|
|
|
// System local clock (not an RTC, but settable from one)
|
|
|
// Also provides a periodic interrupt (set to 32 Hz)
|
|
|
+ //
|
|
|
// XXX: the RTC 32 kHz signal is missing a pull-up,
|
|
|
- // so it will require board rework. For now, use an
|
|
|
+ // so unless the board has been reworked, use a
|
|
|
// divider down from the 84 MHz system clock. The
|
|
|
// error is about 200 ppm; a proper NCO could do better.
|
|
|
|
|
|
- reg [10:0] ctr_64khz;
|
|
|
- reg ctr_32khz;
|
|
|
+ reg ctr_32khz;
|
|
|
+ reg [10:0] ctr_64khz;
|
|
|
always @(posedge sys_clk)
|
|
|
begin
|
|
|
if (~|ctr_64khz)
|
|
@@ -786,11 +791,14 @@ module max80 (
|
|
|
ctr_64khz <= ctr_64khz - 1'b1;
|
|
|
end
|
|
|
|
|
|
+ // 32kHz clock synchronized with sys_clk
|
|
|
+ wire clk_32kHz = rtc_32khz_rework ? rtc_32khz : ctr_32khz;
|
|
|
+
|
|
|
sysclock #(.PERIODIC_HZ_LG2 ( 5 ))
|
|
|
sysclock (
|
|
|
.rst_n ( rst_n ),
|
|
|
.sys_clk ( sys_clk ),
|
|
|
- .rtc_clk ( ctr_32khz ),
|
|
|
+ .rtc_clk ( clk_32kHz ),
|
|
|
|
|
|
.wdata ( cpu_mem_wdata ),
|
|
|
.rdata ( iodev_rdata_sysclock ),
|
|
@@ -836,7 +844,7 @@ module max80 (
|
|
|
`else // !`ifdef REALLY_ESP32
|
|
|
reg [5:-13] esp_ctr; // 32768 * 2^-13 = 4 Hz
|
|
|
|
|
|
- always @(posedge ctr_32khz)
|
|
|
+ always @(posedge clk_32kHz)
|
|
|
esp_ctr <= esp_ctr + 1'b1;
|
|
|
|
|
|
assign spi_clk = esp_ctr[0];
|