Advertisement
Guest User

misoc efc patch

a guest
Nov 26th, 2024
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.62 KB | None | 0 0
  1. diff --git a/misoc/targets/efc.py b/misoc/targets/efc.py
  2. index abf4872d..11609737 100644
  3. --- a/misoc/targets/efc.py
  4. +++ b/misoc/targets/efc.py
  5. @@ -35,22 +35,23 @@ class AsyncResetSynchronizerBUFG(Module):
  6.  
  7.  
  8. class _RtioSysCRG(Module, AutoCSR):
  9. - def __init__(self, platform):
  10. + def __init__(self, platform, sys_freq=125e6):
  11. self.clock_domains.cd_sys = ClockDomain()
  12. self.clock_domains.cd_sys4x = ClockDomain(reset_less=True)
  13. self.clock_domains.cd_sys4x_dqs = ClockDomain(reset_less=True)
  14. self.clock_domains.cd_sys5x = ClockDomain(reset_less=True)
  15. self.clock_domains.cd_clk200 = ClockDomain()
  16.  
  17. - clk125 = platform.request("gtp_clk")
  18. - platform.add_period_constraint(clk125, 8.)
  19. - self.clk125_buf = Signal()
  20. - self.clk125_div2 = Signal()
  21. + gtp_clk = platform.request("gtp_clk")
  22. + gtp_clk_period = 1e9/sys_freq
  23. + platform.add_period_constraint(gtp_clk, gtp_clk_period)
  24. + self.gtp_clk_buf = Signal()
  25. + self.gtp_clk_div2 = Signal()
  26. self.specials += Instance("IBUFDS_GTE2",
  27. i_CEB=0,
  28. - i_I=clk125.p, i_IB=clk125.n,
  29. - o_O=self.clk125_buf,
  30. - o_ODIV2=self.clk125_div2,
  31. + i_I=gtp_clk.p, i_IB=gtp_clk.n,
  32. + o_O=self.gtp_clk_buf,
  33. + o_ODIV2=self.gtp_clk_div2,
  34. p_CLKCM_CFG="TRUE",
  35. p_CLKRCV_TRST="TRUE",
  36. p_CLKSWING_CFG=3)
  37. @@ -58,10 +59,12 @@ class _RtioSysCRG(Module, AutoCSR):
  38. pll_clk200 = Signal()
  39. pll_fb = Signal()
  40. self.pll_locked = Signal()
  41. +
  42. + clk_200_div_ratio = round(sys_freq/2.0*16/200e6)
  43. self.specials += [
  44. Instance("PLLE2_BASE",
  45. - p_CLKIN1_PERIOD=16.0,
  46. - i_CLKIN1=self.clk125_div2,
  47. + p_CLKIN1_PERIOD=gtp_clk_period*2.,
  48. + i_CLKIN1=self.gtp_clk_div2,
  49.  
  50. i_CLKFBIN=pll_fb,
  51. o_CLKFBOUT=pll_fb,
  52. @@ -74,7 +77,7 @@ class _RtioSysCRG(Module, AutoCSR):
  53. # The OOB reset mechanism only resets the MMCM that generates the sysclk,
  54. # clk200 is generated by a PLL parallel to that MMCM, hence not affected
  55. # by the reset.
  56. - p_CLKOUT0_DIVIDE=5, p_CLKOUT0_PHASE=0.0, o_CLKOUT0=pll_clk200,
  57. + p_CLKOUT0_DIVIDE=clk_200_div_ratio, p_CLKOUT0_PHASE=0.0, o_CLKOUT0=pll_clk200,
  58. ),
  59. Instance("BUFG", i_I=pll_clk200, o_O=self.cd_clk200.clk),
  60. AsyncResetSynchronizer(self.cd_clk200, ~self.pll_locked),
  61. @@ -102,8 +105,8 @@ class _RtioSysCRG(Module, AutoCSR):
  62. self.reset = Signal()
  63. self.specials += [
  64. Instance("MMCME2_BASE",
  65. - p_CLKIN1_PERIOD=16.0,
  66. - i_CLKIN1=self.clk125_div2,
  67. + p_CLKIN1_PERIOD=gtp_clk_period*2.,
  68. + i_CLKIN1=self.gtp_clk_div2,
  69.  
  70. i_RST=self.reset,
  71.  
  72. @@ -129,7 +132,7 @@ class _RtioSysCRG(Module, AutoCSR):
  73. Instance("BUFG", i_I=mmcm_fb_out, o_O=mmcm_fb_in),
  74.  
  75. Instance("MMCME2_BASE",
  76. - p_CLKIN1_PERIOD=2.0,
  77. + p_CLKIN1_PERIOD=gtp_clk_period/4.,
  78. i_CLKIN1=self.cd_sys4x.clk,
  79.  
  80. i_RST=~mmcm_locked,
  81. @@ -161,7 +164,7 @@ class BaseSoC(SoCSDRAM):
  82.  
  83. self.config["HW_REV"] = hw_rev
  84.  
  85. - self.submodules.crg = _RtioSysCRG(platform)
  86. + self.submodules.crg = _RtioSysCRG(platform, clk_freq)
  87. self.csr_devices.append("crg")
  88.  
  89. self.platform.add_period_constraint(self.crg.cd_sys.clk, 1e9/self.clk_freq)
  90.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement