Skip to content

Commit 47854f0

Browse files
authored
Merge pull request #71 from siliconcompiler/iocut
add ring cut notion to padring
2 parents 46300ec + f432a54 commit 47854f0

File tree

2 files changed

+58
-7
lines changed

2 files changed

+58
-7
lines changed

lambdalib/iolib/rtl/la_iocut.v

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,16 @@ module la_iocut
1616
)
1717
(
1818
// ground never cut
19-
inout vss
19+
inout vss, // core ground
20+
// cut these
21+
inout vdd0, // core supply from section before
22+
inout vdd1, // core supply from next section
23+
inout vddio0, // io supply from section before
24+
inout vddio1, // io supply from next section
25+
inout vssio0, // io ground from section before
26+
inout vssio1, // io ground from next section
27+
inout [RINGW-1:0] ioring0,// generic ioring interface from section before
28+
inout [RINGW-1:0] ioring1 // generic ioring interface from next section
2029
);
2130

22-
// TODO: interface?
23-
2431
endmodule

lambdalib/padring/rtl/la_ioside.v

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -207,10 +207,54 @@ module la_ioside
207207
// LA_CUT
208208
if (CELLMAP[(i*40+16)+:8] == LA_CUT)
209209
begin : icut
210-
la_iocut #(.SIDE (SIDE),
211-
.PROP (CELLMAP[(i*40+32)+:8]),
212-
.RINGW(RINGW))
213-
i0 (.vss(vss));
210+
if (i - 1 < 0 && i + 1 == NCELLS)
211+
begin: icut_invalid
212+
end
213+
if (i - 1 < 0 && i + 1 <= NCELLS - 1)
214+
begin: icut_start
215+
la_iocut #(.SIDE(SIDE),
216+
.PROP(CELLMAP[(i*40+32)+:8]),
217+
.RINGW(RINGW))
218+
i0 (.vss(vss),
219+
.vdd0(),
220+
.vdd1(vdd[CELLMAP[((i + 1)*40+24)+:8]]),
221+
.vddio0(),
222+
.vddio1(vddio[CELLMAP[((i + 1)*40+24)+:8]]),
223+
.vssio0(),
224+
.vssio1(vssio[CELLMAP[((i + 1)*40+24)+:8]]),
225+
.ioring0(),
226+
.ioring1(ioring[CELLMAP[((i + 1)*40+24)+:8]*RINGW+:RINGW]));
227+
end
228+
if (i - 1 >= 0 && i + 1 <= NCELLS - 1)
229+
begin: icut_middle
230+
la_iocut #(.SIDE(SIDE),
231+
.PROP(CELLMAP[(i*40+32)+:8]),
232+
.RINGW(RINGW))
233+
i0 (.vss(vss),
234+
.vdd0(vdd[CELLMAP[((i - 1)*40+24)+:8]]),
235+
.vdd1(vdd[CELLMAP[((i + 1)*40+24)+:8]]),
236+
.vddio0(vddio[CELLMAP[((i - 1)*40+24)+:8]]),
237+
.vddio1(vddio[CELLMAP[((i + 1)*40+24)+:8]]),
238+
.vssio0(vssio[CELLMAP[((i - 1)*40+24)+:8]]),
239+
.vssio1(vssio[CELLMAP[((i + 1)*40+24)+:8]]),
240+
.ioring0(ioring[CELLMAP[((i - 1)*40+24)+:8]*RINGW+:RINGW]),
241+
.ioring1(ioring[CELLMAP[((i + 1)*40+24)+:8]*RINGW+:RINGW]));
242+
end
243+
if (i - 1 >= 0 && i + 1 == NCELLS)
244+
begin: icut_end
245+
la_iocut #(.SIDE(SIDE),
246+
.PROP(CELLMAP[(i*40+32)+:8]),
247+
.RINGW(RINGW))
248+
i0 (.vss(vss),
249+
.vdd0(vdd[CELLMAP[((i - 1)*40+24)+:8]]),
250+
.vdd1(),
251+
.vddio0(vddio[CELLMAP[((i - 1)*40+24)+:8]]),
252+
.vddio1(),
253+
.vssio0(vssio[CELLMAP[((i - 1)*40+24)+:8]]),
254+
.vssio1(),
255+
.ioring0(ioring[CELLMAP[((i - 1)*40+24)+:8]*RINGW+:RINGW]),
256+
.ioring1());
257+
end
214258
end
215259
// LA_VDDIO
216260
if (CELLMAP[(i*40+16)+:8] == LA_VDDIO)

0 commit comments

Comments
 (0)