Skip to content

Commit

Permalink
add ring cut notion to padring
Browse files Browse the repository at this point in the history
  • Loading branch information
gadfort committed Aug 15, 2024
1 parent 995d7ef commit 86c57ed
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 7 deletions.
13 changes: 10 additions & 3 deletions lambdalib/iolib/rtl/la_iocut.v
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,16 @@ module la_iocut
)
(
// ground never cut
inout vss
inout vss, // core ground
// cut these
inout vdd0, // core supply from section before
inout vdd1, // core supply from next section
inout vddio0, // io supply from section before
inout vddio1, // io supply from next section
inout vssio0, // io ground from section before
inout vssio1, // io ground from next section
inout [RINGW-1:0] ioring0,// generic ioring interface from section before
inout [RINGW-1:0] ioring1 // generic ioring interface from next section
);

// TODO: interface?

endmodule
56 changes: 52 additions & 4 deletions lambdalib/padring/rtl/la_ioside.v
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ module la_ioside
`include "la_iopadring.vh"

genvar i;
integer next;
integer last;

for (i = 0; i < NCELLS; i = i + 1)
begin : ipad
Expand Down Expand Up @@ -207,10 +209,56 @@ module la_ioside
// LA_CUT
if (CELLMAP[(i*40+16)+:8] == LA_CUT)
begin : icut
la_iocut #(.SIDE (SIDE),
.PROP (CELLMAP[(i*40+32)+:8]),
.RINGW(RINGW))
i0 (.vss(vss));
last = i - 1;
next = i + 1;
if (last < 0 && next == NCELLS)
begin: icut_invalid
end
if (last < 0 && next <= NCELLS - 1)
begin: icut_start
la_iocut #(.SIDE(SIDE),
.PROP(CELLMAP[(i*40+32)+:8]),
.RINGW(RINGW))
i0 (.vss(vss),
.vdd0(),
.vdd1(vdd[CELLMAP[(next*40+24)+:8]]),
.vddio0(),
.vddio1(vddio[CELLMAP[(next*40+24)+:8]]),
.vssio0(),
.vssio1(vssio[CELLMAP[(next*40+24)+:8]]),
.ioring0(),
.ioring1(ioring[CELLMAP[(next*40+24)+:8]*RINGW+:RINGW]));
end
if (last >= 0 && next <= NCELLS - 1)
begin: icut_middle
la_iocut #(.SIDE(SIDE),
.PROP(CELLMAP[(i*40+32)+:8]),
.RINGW(RINGW))
i0 (.vss(vss),
.vdd0(vdd[CELLMAP[(last*40+24)+:8]]),
.vdd1(vdd[CELLMAP[(next*40+24)+:8]]),
.vddio0(vddio[CELLMAP[(last*40+24)+:8]]),
.vddio1(vddio[CELLMAP[(next*40+24)+:8]]),
.vssio0(vssio[CELLMAP[(last*40+24)+:8]]),
.vssio1(vssio[CELLMAP[(next*40+24)+:8]]),
.ioring0(ioring[CELLMAP[(last*40+24)+:8]*RINGW+:RINGW]),
.ioring1(ioring[CELLMAP[(next*40+24)+:8]*RINGW+:RINGW]));
end
if (last >= 0 && next == NCELLS)
begin: icut_end
la_iocut #(.SIDE(SIDE),
.PROP(CELLMAP[(i*40+32)+:8]),
.RINGW(RINGW))
i0 (.vss(vss),
.vdd0(vdd[CELLMAP[(last*40+24)+:8]]),
.vdd1(),
.vddio0(vddio[CELLMAP[(last*40+24)+:8]]),
.vddio1(),
.vssio0(vssio[CELLMAP[(last*40+24)+:8]]),
.vssio1(),
.ioring0(ioring[CELLMAP[(last*40+24)+:8]*RINGW+:RINGW]),
.ioring1());
end
end
// LA_VDDIO
if (CELLMAP[(i*40+16)+:8] == LA_VDDIO)
Expand Down

0 comments on commit 86c57ed

Please sign in to comment.