@@ -10,10 +10,9 @@ import spinal.lib._
1010import spinal .lib .bus .bmb ._
1111
1212import nafarr .system .reset ._
13- import nafarr .system .reset .ResetControllerCtrl ._
1413import nafarr .system .clock ._
15- import nafarr .system .clock .ClockControllerCtrl ._
1614import nafarr .blackboxes .ihp .sg13g2 ._
15+ import nafarr .blackboxes .ihp .common ._
1716import nafarr .memory .ocram .ihp .sg13g2 .BmbIhpOnChipRam
1817
1918import zibal .misc ._
@@ -83,9 +82,10 @@ case class SG13G2Top() extends Component {
8382 ResetParameter (" system" , 128 ),
8483 ResetParameter (" debug" , 128 )
8584 )
85+ val inputClock = ClockParameter (" input" , 50 MHz , " input" )
8686 val clocks = List [ClockParameter ](
8787 ClockParameter (" system" , 50 MHz , " system" ),
88- ClockParameter (" debug" , 10 MHz , " debug" , synchronousWith = " system" )
88+ ClockParameter (" debug" , 12.5 MHz , " debug" , synchronousWith = " system" )
8989 )
9090 val kitParameter = KitParameter (resets, clocks)
9191 val boardParameter = ElemRVBoard .Parameter (kitParameter)
@@ -94,11 +94,20 @@ case class SG13G2Top() extends Component {
9494 socParameter,
9595 8 kB,
9696 8 MB ,
97- (resetCtrl : ResetControllerCtrl , reset : Bool , _) => {
98- resetCtrl.buildDummy(reset)
97+ (parameter : ResetControllerCtrl .Parameter ) => {
98+ val resetCtrl = new ResetControllerCtrl .DummyResetController (parameter)
99+ resetCtrl
99100 },
100- (clockCtrl : ClockControllerCtrl , resetCtrl : ResetControllerCtrl , clock : Bool ) => {
101- clockCtrl.buildDummy(clock, resetCtrl)
101+ (
102+ parameter : ClockControllerCtrl .Parameter ,
103+ resetCtrl : ResetControllerCtrl .ResetControllerBase
104+ ) => {
105+ val clockCtrl = new ClockControllerCtrl .ClockDividerController (
106+ parameter,
107+ inputClock,
108+ List (" system" , " debug" )
109+ )
110+ clockCtrl
102111 },
103112 (parameter : BmbParameter , ramSize : BigInt ) => {
104113 val ram = BmbIhpOnChipRam .OnePort1Macro (parameter, ramSize.toInt)
@@ -107,39 +116,39 @@ case class SG13G2Top() extends Component {
107116 )
108117
109118 val io = new Bundle {
110- val clock = IhpCmosIo (" south " , 5 )
111- val reset = IhpCmosIo (" south " , 4 , " clk_main" )
119+ val clock = IhpCmosIo (Edge . South , 5 )
120+ val reset = IhpCmosIo (Edge . South , 4 , " clk_main" )
112121 val jtag = new Bundle {
113- val tms = IhpCmosIo (" south " , 0 , " clk_jtag" )
114- val tdi = IhpCmosIo (" south " , 1 , " clk_jtag" )
115- val tdo = IhpCmosIo (" south " , 2 , " clk_jtag" )
116- val tck = IhpCmosIo (" south " , 3 , " clk_jtag " )
122+ val tms = IhpCmosIo (Edge . South , 0 , " clk_jtag" )
123+ val tdi = IhpCmosIo (Edge . South , 1 , " clk_jtag" )
124+ val tdo = IhpCmosIo (Edge . South , 2 , " clk_jtag" )
125+ val tck = IhpCmosIo (Edge . South , 3 )
117126 }
118127 val spi = new Bundle {
119128 val cs = Vec (
120- IhpCmosIo (" east " , 0 , " clk_main" )
129+ IhpCmosIo (Edge . East , 0 , " clk_main" )
121130 )
122- val sck = IhpCmosIo (" east " , 1 , " clk_main" )
131+ val sck = IhpCmosIo (Edge . East , 1 , " clk_main" )
123132 val dq = Vec (
124- IhpCmosIo (" east " , 5 , " clk_main" ),
125- IhpCmosIo (" east " , 4 , " clk_main" ),
126- IhpCmosIo (" east " , 3 , " clk_main" ),
127- IhpCmosIo (" east " , 2 , " clk_main" )
133+ IhpCmosIo (Edge . East , 5 , " clk_main" ),
134+ IhpCmosIo (Edge . East , 4 , " clk_main" ),
135+ IhpCmosIo (Edge . East , 3 , " clk_main" ),
136+ IhpCmosIo (Edge . East , 2 , " clk_main" )
128137 )
129138 }
130139 val pins = Vec (
131- IhpCmosIo (" west " , 2 , " clk_main" ),
132- IhpCmosIo (" west " , 3 , " clk_main" ),
133- IhpCmosIo (" west " , 4 , " clk_main" ),
134- IhpCmosIo (" west " , 5 , " clk_main" ),
135- IhpCmosIo (" west " , 6 , " clk_main" ),
136- IhpCmosIo (" west " , 7 , " clk_main" ),
137- IhpCmosIo (" north " , 2 , " clk_main" ),
138- IhpCmosIo (" north " , 3 , " clk_main" ),
139- IhpCmosIo (" north " , 4 , " clk_main" ),
140- IhpCmosIo (" north " , 5 , " clk_main" ),
141- IhpCmosIo (" north " , 6 , " clk_main" ),
142- IhpCmosIo (" north " , 7 , " clk_main" )
140+ IhpCmosIo (Edge . West , 2 , " clk_main" ),
141+ IhpCmosIo (Edge . West , 3 , " clk_main" ),
142+ IhpCmosIo (Edge . West , 4 , " clk_main" ),
143+ IhpCmosIo (Edge . West , 5 , " clk_main" ),
144+ IhpCmosIo (Edge . West , 6 , " clk_main" ),
145+ IhpCmosIo (Edge . West , 7 , " clk_main" ),
146+ IhpCmosIo (Edge . North , 2 , " clk_main" ),
147+ IhpCmosIo (Edge . North , 3 , " clk_main" ),
148+ IhpCmosIo (Edge . North , 4 , " clk_main" ),
149+ IhpCmosIo (Edge . North , 5 , " clk_main" ),
150+ IhpCmosIo (Edge . North , 6 , " clk_main" ),
151+ IhpCmosIo (Edge . North , 7 , " clk_main" )
143152 )
144153 }
145154
@@ -165,10 +174,16 @@ case class SG13G2Top() extends Component {
165174 io.pins(index) <> IOPadInOut4mA (soc.io.pins.pins(index))
166175 }
167176
168- for (index <- 0 until 2 ) { IOPadIOVdd () }
169- for (index <- 0 until 2 ) { IOPadIOVss () }
170- for (index <- 0 until 2 ) { IOPadVdd () }
171- for (index <- 0 until 2 ) { IOPadVss () }
177+ val power = Seq (
178+ IhpPowerIo (Edge .South , 6 , IhpPowerIoCell .SG13G2 .Vss ),
179+ IhpPowerIo (Edge .South , 7 , IhpPowerIoCell .SG13G2 .Vdd ),
180+ IhpPowerIo (Edge .East , 6 , IhpPowerIoCell .SG13G2 .IOVdd ),
181+ IhpPowerIo (Edge .East , 7 , IhpPowerIoCell .SG13G2 .IOVss ),
182+ IhpPowerIo (Edge .North , 0 , IhpPowerIoCell .SG13G2 .Vss ),
183+ IhpPowerIo (Edge .North , 1 , IhpPowerIoCell .SG13G2 .Vdd ),
184+ IhpPowerIo (Edge .West , 0 , IhpPowerIoCell .SG13G2 .IOVdd ),
185+ IhpPowerIo (Edge .West , 1 , IhpPowerIoCell .SG13G2 .IOVss )
186+ )
172187}
173188
174189object SG13G2Generate extends ElementsApp {
@@ -181,30 +196,33 @@ object SG13G2Generate extends ElementsApp {
181196 }
182197
183198 val chip = OpenROADTools .IHP .Config (elementsConfig, OpenROADTools .PDKs .IHP .sg13g2)
184- chip.dieArea = (0 , 0 , 1881.6 , 1882.44 )
185- chip.coreArea = (394.08 , 396.9 , 1484.64 , 1485.54 )
199+ chip.dieArea = (0 , 0 , 2081.28 , 2079 )
200+ chip.coreArea = (394.08 , 396.9 , 1684.32 , 1682.1 )
186201 chip.hasIoRing = true
187202 chip.addMacro(
188203 report.toplevel.soc.system.onChipRam.ctrl.asInstanceOf [BmbIhpOnChipRam .OnePort1Macro ].ram,
189204 444.96 ,
190205 448.35 ,
191- " MX"
206+ " MX" ,
207+ depth = 3
192208 )
193-
194209 chip.addClock(report.toplevel.io.clock.PAD , 50 MHz , " clk_main" )
195210 chip.addClock(report.toplevel.io.jtag.tck.PAD , 10 MHz , " clk_jtag" )
211+ chip.addGeneratedClock(
212+ report.toplevel.io.clock.PAD ,
213+ report.toplevel.inputClock.frequency,
214+ " clk_debug" ,
215+ report.toplevel.soc.clockCtrl.io.clocks,
216+ report.toplevel.soc.clockCtrl.getPortIndexByName(" debug" ),
217+ report.toplevel.soc.clockCtrl.getClockDomainByName(" debug" ).frequency.getValue
218+ )
219+ chip.addReset(report.toplevel.io.reset.PAD )
196220 chip.setFalsePath(" clk_main" , " clk_jtag" )
221+ chip.setFalsePath(" clk_system" , " clk_jtag" )
197222 chip.io = Some (report.toplevel.io)
223+ chip.ioPower = Some (report.toplevel.power)
198224 chip.pdnRingWidth = 30.0
199225 chip.pdnRingSpace = 5.0
200- chip.addPad(" south" , 6 , " sg13g2_IOPadVss" )
201- chip.addPad(" south" , 7 , " sg13g2_IOPadVdd" )
202- chip.addPad(" east" , 6 , " sg13g2_IOPadIOVdd" )
203- chip.addPad(" east" , 7 , " sg13g2_IOPadIOVss" )
204- chip.addPad(" north" , 0 , " sg13g2_IOPadVss" )
205- chip.addPad(" north" , 1 , " sg13g2_IOPadVdd" )
206- chip.addPad(" west" , 0 , " sg13g2_IOPadIOVdd" )
207- chip.addPad(" west" , 1 , " sg13g2_IOPadIOVss" )
208226 chip.generate
209227}
210228
0 commit comments