From 8d7ad20ac50a1a7075dcd22d9218dea4e37c29e6 Mon Sep 17 00:00:00 2001 From: Romain Dolbeau Date: Wed, 25 Mar 2026 22:59:33 +0100 Subject: [PATCH] DDR2 support in HW init --- sdram_init.py | 219 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 172 insertions(+), 47 deletions(-) diff --git a/sdram_init.py b/sdram_init.py index 912174c..f67db82 100644 --- a/sdram_init.py +++ b/sdram_init.py @@ -1,4 +1,7 @@ #!/usr/bin/env python3 + +#https://gist.github.com/enjoy-digital/529a4d9994f0cc95e45382e4eb253b09 + from migen import * from VintageBusFPGA_Common.wb_master import * @@ -16,10 +19,65 @@ dfii_command_ras = 0x08 dfii_command_wrdata = 0x10 dfii_command_rddata = 0x20 +# bitslips and delays +# +# IIsiA7 Mini | bs | dl +# module 0 | 3 | 15 +# module 1 | 3 | 14 + + def period_to_cycles(sys_clk_freq, period): return int(period*sys_clk_freq) -class DDR3Addr(WishboneMaster): +class DDR_Addr(WishboneMaster): + def __init__(self, sdram_dfii_base, ddrphy_base): + # /!\ keep up to date with csr /!\ + self.sdram_dfii_base = sdram_dfii_base + self.sdram_dfii_control = self.sdram_dfii_base + 0x000 + self.sdram_dfii_pi0_command = self.sdram_dfii_base + 0x004 + self.sdram_dfii_pi0_command_issue = self.sdram_dfii_base + 0x008 + self.sdram_dfii_pi0_address = self.sdram_dfii_base + 0x00c + self.sdram_dfii_pi0_baddress = self.sdram_dfii_base + 0x010 + + # /!\ keep up to date with csr /!\ + self.ddrphy_base = ddrphy_base + self.ddrphy_rst = self.ddrphy_base + 0x000 + self.ddrphy_dly_sel = self.ddrphy_base + 0x004 + self.ddrphy_rdly_dq_rst = self.ddrphy_base + 0x014 + self.ddrphy_rdly_dq_inc = self.ddrphy_base + 0x018 + self.ddrphy_rdly_dq_bitslip_rst = self.ddrphy_base + 0x01c + self.ddrphy_rdly_dq_bitslip = self.ddrphy_base + 0x020 + self.ddrphy_wdly_dq_bitslip_rst = self.ddrphy_base + 0x024 + self.ddrphy_wdly_dq_bitslip = self.ddrphy_base + 0x028 + self.ddrphy_rdphase = self.ddrphy_base + 0x02c + self.ddrphy_wdphase = self.ddrphy_base + 0x030 + + def startfb(self): + r = [] + r += [_WRITE_CMD, 0xf0900008, 0x01000000] # FIXME: hardwired for now + return r + + def ddr_config_instructions(self, bitslip, delay): + r = [] + for module in range(2): + r += [_WRITE_CMD, self.ddrphy_dly_sel, 1<