Skip to content

Commit f4e6209

Browse files
committed
Increase the HyperRAM clock frequency to 200MHz.
Adjust the clock frequency to 200MHz as per the W956 datasheet. The OpenHBMC controller synthesises and operates fine at 200MHz, with the ISERDES operating at 600MHz. Presumably the lower frequency was set conservatively, but now that the HyperRAM interface is capable of bursting and buffering, performance does benefit from the higher frequency. FPGA builds have been soak testing HyperRAM tests for over 12 hours without encountering any faults.
1 parent 42bf2d4 commit f4e6209

File tree

6 files changed

+7
-7
lines changed

6 files changed

+7
-7
lines changed

dv/verilator/sonata_system.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ int SonataSystem::Setup(int argc, char **argv, bool &exit_app) {
7777
// Note: calculate the period of the higher frequency clock first because
7878
// the period of the 'hr' reference clock must be exactly 3 times longer
7979
// to maintain the phase relationship.
80-
uint32_t hr3x_hperiod = (micro + 599u) / 600u; // 300MHz cycle
81-
uint32_t hr_hperiod = 3 * hr3x_hperiod; // 100MHz cycle
80+
uint32_t hr3x_hperiod = (micro + 1199u) / 1200u; // 600MHz cycle
81+
uint32_t hr_hperiod = 3 * hr3x_hperiod; // 200MHz cycle
8282

8383
// The HyperRAM requires a clock that is phase-shifted by 90 degress.
8484
uint32_t hr90p_offset = hr_hperiod / 2;

dv/verilator/top_verilator.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ module top_verilator #(
2727
// System clock frequency.
2828
localparam int unsigned SysClkFreq = 40_000_000;
2929
// HyperRAM clock frequency.
30-
localparam int unsigned HyperRAMClkFreq = 100_000_000;
30+
localparam int unsigned HyperRAMClkFreq = 200_000_000;
3131
localparam int unsigned BaudRate = 921_600;
3232
// Number of CHERI error LEDs.
3333
localparam int unsigned CheriErrWidth = 9;

rtl/fpga/clkgen_sonata.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
module clkgen_sonata #(
66
// System Clock Frequency is parameterised, allowing it to be adjusted.
77
parameter int unsigned SysClkFreq = 50_000_000,
8-
parameter int unsigned HyperRAMClkFreq = 100_000_000,
8+
parameter int unsigned HyperRAMClkFreq = 200_000_000,
99

1010
// Frequency of IO_CLK input on the FPGA board.
1111
parameter int unsigned IOClkFreq = 25_000_000

rtl/fpga/top_sonata.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ module top_sonata
218218

219219
// System clock frequency.
220220
parameter int unsigned SysClkFreq = 40_000_000;
221-
parameter int unsigned HyperRAMClkFreq = 100_000_000;
221+
parameter int unsigned HyperRAMClkFreq = 200_000_000;
222222

223223
parameter SRAMInitFile = "";
224224

rtl/ip/hyperram/rtl/hbmc_tl_top.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ module hbmc_tl_top import tlul_pkg::*; #(
112112
into the slower clock domain, it can take 4 system clock cycles to collect the first word.
113113
*/
114114
localparam int unsigned UDataWidth = top_pkg::TL_DW;
115-
localparam int unsigned UFIFODepth = 1 << (Log2BurstLen - ABIT);
115+
localparam int unsigned UFIFODepth = 2 << (Log2BurstLen - ABIT);
116116

117117
/* The Downstream FIFO to the HyperRAM controller must be wide enough and deep enough to
118118
* accommodate all of the write data for a burst. The write coealescing logic in `hyperram_wrbuf`

rtl/system/sonata_system.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ module sonata_system
1212
parameter int unsigned CheriErrWidth = 9,
1313
parameter string SRAMInitFile = "",
1414
parameter int unsigned SysClkFreq = 30_000_000,
15-
parameter int unsigned HyperRAMClkFreq = 100_000_000
15+
parameter int unsigned HyperRAMClkFreq = 200_000_000
1616
) (
1717
// Main system clock and reset
1818
input logic clk_sys_i,

0 commit comments

Comments
 (0)