Skip to content

Commit 6232460

Browse files
authored
Merge pull request #63 from siliconcompiler/diff_io
Padring generator upgrade
2 parents 2643959 + 8a5ea17 commit 6232460

27 files changed

+1148
-1017
lines changed

lambdalib/iolib/README.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# IOLIB
2+
3+
## Cell Listing
4+
5+
| Cell | Type | Description |
6+
| ---------------------------------|---------|-----------------------------|
7+
[[la_iobidir](./rtl/la_iobidir.v) | Digital | Bidirectional
8+
[la_ioinput](./rtl/la_ioinput.v) | Digital | Input
9+
[la_ioxtal](./rtl/la_ioxtal.v) | Digital | Xtal tranceiver
10+
[la_iorxdiff](./rtl/la_iorxdiff.v) | Digital | Differential input
11+
[la_iotxdiff](./rtl/la_iotxdiff.v) | Digital | Differential output
12+
[la_ioanalog](./rtl/la_ioanalog.v) | Analog | Pass through ESD protection
13+
[la_iovdd](./rtl/la_iovdd.v) | Supply | Core power
14+
[la_iovss](./rtl/la_iovss.v) | Supply | Core ground
15+
[la_iovddio](./rtl/la_iovddio.v) | Supply | IO power
16+
[la_iovssio](./rtl/la_iovssio.v) | Supply | IO ground
17+
[la_iovdda](./rtl/la_iovdda.v) | Supply | Analog power
18+
[la_iovssa](./rtl/la_iovssa.v) | Supply | Analog ground
19+
[la_iopoc](./rtl/la_iopoc.v) | Supply | Power on control
20+
[la_iocorner](./rtl/la_iocorner.v) | Supply | Corner connector
21+
[la_ioclamp](./rtl/la_ioclamp.v) | Supply | ESD clamp
22+
[la_iocut](./rtl/la_iocut.v) | Supply | Power ring cutter
23+
24+
## PARAMETERS
25+
26+
### CFGW
27+
The `CFGW` parameter defines the width of the configuration bus of the io cell. IO cells generally include a set of configuration inputs for things like drive strength and operating modes. Setting `CFGW` to a large value (eg. 16/32) should have zero impact on the design as the extra bus bits get optimized away during implementation. The connection between the generic `CFG` bus and the technology specific IO cell is done within the techology specific cell wrapper library.
28+
29+
For la_bidir, the first 8 bits of the configuration bus are reserved for the functionality shown in the table below.
30+
31+
| Bit | Description |
32+
|-----------|-------------------------------------------------|
33+
CFG[0] | slew rate control (0=fast, 1 =slow) |
34+
CFG[1] | schmitt trigger select (0=CMOS, 1=schmitt) |
35+
CFG[2] | pull enable (0=no pull, 1=enables weak pull) |
36+
CFG[3] | pull select (1=pull up, 0=pull down) |
37+
CFG[7:4] | drive strength |
38+
39+
#### RINGW
40+
The `RINGW` parameter specifies the number of signals within the power bus that connects all of the io cells together within the padring.
41+
42+
### SIDE
43+
The `SIDE` parameter indicates the placement of a cell instances within a padring.Legal values for `SIDE` are: "NO" (north/top), "EA" (east/right), "WE" (west/left), "SO" (south/bottom). The parameter can be used by the technology specific implementation of `iolib` to selec the native orientation of the cell. Modern process nodes place restrictions on the orientation of transistors and include vertical and horizontal version of all active io cells.
44+
45+
### PROP
46+
The `PROP` parameter can be used by the technology specific `iolib` implementation to select between different variants of the `iolib` cell type. The `PROP` parameter is library specific and should only be used when absolutely necessary. Using this parameter means technology/ip information permeates up through the design (nullifying the benefits of lambdalib).
47+
48+
## Cell Description
49+
50+
## la_iobidir
51+
52+
## la_ioinput
53+
54+
## la_ioxtal
55+
56+
## la_iorxdif
57+
58+
## la_iotxdiff
59+
60+
## la_ioanalog
61+
62+
## la_iovdd
63+
64+
## la_iovss
65+
66+
## la_iovddio
67+
68+
## la_iovssio
69+
70+
## la_iovdda
71+
72+
## la_iovssa
73+
74+
## la_iopoc
75+
76+
## la_iocorner
77+
78+
## la_ioclamp
79+
80+
## la_iocut

lambdalib/iolib/rtl/la_ioanalog.v

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,36 @@
11
/*****************************************************************************
2-
* Function: IO analog pass-through cell
2+
* Function: Analog Passthrough IO cell
33
* Copyright: Lambda Project Authors. All rights Reserved.
44
* License: MIT (see LICENSE file in Lambda repository)
55
*
66
* Docs:
77
*
8+
* ../README.md
9+
*
810
* aio[0] = pass through from pad (with esd clamp)
911
* aio[1] = small series resistance
1012
* aio[2] = big series resistance
1113
*
1214
****************************************************************************/
13-
module la_ioanalog #(
14-
parameter TYPE = "DEFAULT", // cell type
15-
parameter SIDE = "NO", // "NO", "SO", "EA", "WE"
16-
parameter RINGW = 8 // width of io ring
17-
) ( // io pad signals
18-
inout pad, // bidirectional pad signal
19-
inout vdd, // core supply
20-
inout vss, // core ground
21-
inout vddio, // io supply
22-
inout vssio, // io ground
23-
inout [RINGW-1:0] ioring, // generic io-ring interface
15+
module la_ioanalog
16+
#(
17+
parameter PROP = "DEFAULT", // cell property
18+
parameter SIDE = "NO", // "NO", "SO", "EA", "WE"
19+
parameter RINGW = 8 // width of io ring
20+
)
21+
(// io pad signals
22+
inout pad, // bidirectional pad signal
23+
inout vdd, // core supply
24+
inout vss, // core ground
25+
inout vddio, // io supply
26+
inout vssio, // io ground
27+
inout [RINGW-1:0] ioring, // generic ioring
2428
// core interface
25-
inout [ 2:0] aio // analog core signal
26-
);
27-
29+
inout [2:0] aio // analog core signals
30+
);
2831

2932
`ifdef VERILATOR
30-
// TODO!: input only for verilator bases simulation
33+
// TODO!: input only for verilator based simulation
3134
assign aio[0] = pad;
3235
assign aio[1] = pad;
3336
assign aio[2] = pad;

lambdalib/iolib/rtl/la_iobidir.v

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,36 @@
1-
/*****************************************************************************
2-
* Function: IO bi-directional buffer
1+
/**************************************************************************
2+
* Function: Digital Bidirectional IO Buffer
33
* Copyright: Lambda Project Authors. All rights Reserved.
44
* License: MIT (see LICENSE file in Lambda repository)
55
*
66
* Docs:
77
*
8-
* This is a generic cell that defines the standard interface of the lambda
9-
* bidrectional buffer cell. It is only suitable for FPGA synthesis.
8+
* ../README.md
109
*
11-
* ASIC specific libraries will need to use the TYPE field to select an
12-
* appropriate hardcoded physical cell based on the the process constraints
13-
* and library composition. For example, modern nodes will usually have
14-
* different IP cells for the placing cells vvertically or horizontally.
15-
*
16-
****************************************************************************/
17-
module la_iobidir #(
18-
parameter TYPE = "DEFAULT", // cell type
19-
parameter SIDE = "NO", // "NO", "SO", "EA", "WE"
20-
parameter CFGW = 16, // width of core config bus
21-
parameter RINGW = 8 // width of io ring
22-
) ( // io pad signals
23-
inout pad, // bidirectional pad signal
24-
inout vdd, // core supply
25-
inout vss, // core ground
26-
inout vddio, // io supply
27-
inout vssio, // io ground
10+
*************************************************************************/
11+
module la_iobidir
12+
#(
13+
parameter PROP = "DEFAULT", // cell property
14+
parameter SIDE = "NO", // "NO", "SO", "EA", "WE"
15+
parameter CFGW = 16, // width of core config bus
16+
parameter RINGW = 8 // width of io ring
17+
)
18+
(// io pad signals
19+
inout pad, // bidirectional pad signal
20+
inout vdd, // core supply
21+
inout vss, // core ground
22+
inout vddio, // io supply
23+
inout vssio, // io ground
2824
// core facing signals
29-
input a, // input from core
30-
output z, // output to core
31-
input ie, // input enable, 1 = active
32-
input oe, // output enable, 1 = active
33-
inout [RINGW-1:0] ioring, // generic io-ring interface
34-
input [ CFGW-1:0] cfg // generic config interface
35-
);
25+
input a, // input from core
26+
output z, // output to core
27+
input ie, // input enable, 1 = active
28+
input oe, // output enable, 1 = active
29+
inout [RINGW-1:0] ioring, // generic io ring
30+
input [CFGW-1:0] cfg // generic config interface
31+
);
3632

37-
// to core
33+
// to core
3834
assign z = ie ? pad : 1'b0;
3935

4036
// to pad

lambdalib/iolib/rtl/la_ioclamp.v

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,25 @@
11
/*****************************************************************************
2-
* Function: IO ESD clamp cell
2+
* Function: ESD Clamp IO cell
33
* Copyright: Lambda Project Authors. All rights Reserved.
44
* License: MIT (see LICENSE file in Lambda repository)
55
*
66
* Docs:
77
*
8+
* ../README.md
9+
*
810
****************************************************************************/
9-
module la_ioclamp #(
10-
parameter TYPE = "DEFAULT", // cell type
11-
parameter SIDE = "NO", // "NO", "SO", "EA", "WE"
12-
parameter RINGW = 8 // width of io ring
13-
) ( // io pad signals
14-
inout vdd, // core supply
15-
inout vss, // core ground
16-
inout vddio, // io supply
17-
inout vssio, // io ground
18-
inout [RINGW-1:0] ioring // generic io-ring interface
19-
);
11+
module la_ioclamp
12+
#(
13+
parameter PROP = "DEFAULT", // cell property
14+
parameter SIDE = "NO", // "NO", "SO", "EA", "WE"
15+
parameter RINGW = 8 // width of io ring
16+
)
17+
(// io pad signals
18+
inout vdd, // core supply
19+
inout vss, // core ground
20+
inout vddio, // io supply
21+
inout vssio, // io ground
22+
inout [RINGW-1:0] ioring // generic io ring interface
23+
);
2024

2125
endmodule

lambdalib/iolib/rtl/la_iocorner.v

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
11
/*****************************************************************************
2-
* Function: IO corner cell
2+
* Function: Corner IO Cell
33
* Copyright: Lambda Project Authors. All rights Reserved.
44
* License: MIT (see LICENSE file in Lambda repository)
55
*
66
* Docs:
77
*
8+
* ../README.md
89
*
910
****************************************************************************/
10-
module la_iocorner #(
11-
parameter TYPE = "DEFAULT", // cell type
12-
parameter SIDE = "NO", // "NO", "SO", "EA", "WE"
13-
parameter RINGW = 8 // width of io ring
14-
) (
15-
inout vdd, // core supply
16-
inout vss, // core ground
17-
inout vddio, // io supply
18-
inout vssio, // io ground
19-
inout [RINGW-1:0] ioring // generic io-ring interface
20-
);
11+
module la_iocorner
12+
#(
13+
parameter PROP = "DEFAULT", // cell property
14+
parameter SIDE = "NO", // "NO", "SO", "EA", "WE"
15+
parameter RINGW = 8 // width of io ring
16+
)
17+
(
18+
inout vdd, // core supply
19+
inout vss, // core ground
20+
inout vddio, // io supply
21+
inout vssio, // io ground
22+
inout [RINGW-1:0] ioring // generic ioring interface
23+
);
2124

2225
endmodule

lambdalib/iolib/rtl/la_iocut.v

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
11
/*****************************************************************************
2-
* Function: IO cut cell
2+
* Function: Supply Ring Cut IO Cell
33
* Copyright: Lambda Project Authors. All rights Reserved.
44
* License: MIT (see LICENSE file in Lambda repository)
55
*
66
* Docs:
77
*
8+
* ../README.md
89
*
910
****************************************************************************/
10-
module la_iocut #(
11-
parameter TYPE = "DEFAULT", // cell type
12-
parameter SIDE = "NO", // "NO", "SO", "EA", "WE"
13-
parameter RINGW = 8 // width of io ring
14-
) (
11+
module la_iocut
12+
#(
13+
parameter PROP = "DEFAULT", // cell property
14+
parameter SIDE = "NO", // "NO", "SO", "EA", "WE"
15+
parameter RINGW = 8 // width of io ring
16+
)
17+
(
1518
// ground never cut
1619
inout vss
17-
);
20+
);
21+
22+
// TODO: interface?
1823

1924
endmodule

lambdalib/iolib/rtl/la_ioinput.v

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,34 @@
1-
/*****************************************************************************
2-
* Function: IO bi-directional buffer
1+
/**************************************************************************
2+
* Function: Digital Input IO Cell
33
* Copyright: Lambda Project Authors. All rights Reserved.
44
* License: MIT (see LICENSE file in Lambda repository)
55
*
66
* Docs:
77
*
8-
* This is a generic cell that defines the standard interface of the lambda
9-
* bidrectional buffer cell. It is only suitable for FPGA synthesis.
8+
* ../README.md
109
*
11-
* ASIC specific libraries will need to use the TYPE field to select an
12-
* appropriate hardcoded physical cell based on the the process constraints
13-
* and library composition. For example, modern nodes will usually have
14-
* different IP cells for the placing cells vvertically or horizontally.
15-
*
16-
****************************************************************************/
17-
module la_ioinput #(
18-
parameter TYPE = "DEFAULT", // cell type
19-
parameter SIDE = "NO", // "NO", "SO", "EA", "WE"
20-
parameter CFGW = 16, // width of core config bus
21-
parameter RINGW = 8 // width of io ring
22-
) ( // io pad signals
23-
inout pad, // bidirectional pad signal
24-
inout vdd, // core supply
25-
inout vss, // core ground
26-
inout vddio, // io supply
27-
inout vssio, // io ground
10+
*************************************************************************/
11+
module la_ioinput
12+
#(
13+
parameter PROP = "DEFAULT", // cell property
14+
parameter SIDE = "NO", // "NO", "SO", "EA", "WE"
15+
parameter CFGW = 16, // width of core config bus
16+
parameter RINGW = 8 // width of io ring
17+
)
18+
(// io pad signals
19+
inout pad, // input pad
20+
inout vdd, // core supply
21+
inout vss, // core ground
22+
inout vddio, // io supply
23+
inout vssio, // io ground
2824
// core facing signals
29-
output z, // output to core
30-
input ie, // input enable, 1 = active
31-
inout [RINGW-1:0] ioring, // generic io-ring interface
32-
input [ CFGW-1:0] cfg // generic config interface
33-
);
25+
output z, // output to core
26+
input ie, // input enable, 1 = active
27+
inout [RINGW-1:0] ioring, // generic ioring interface
28+
input [CFGW-1:0] cfg // generic config interface
29+
);
3430

35-
// to core
36-
assign z = ie ? pad : 1'b0;
31+
// to core
32+
assign z = ie ? pad : 1'b0;
3733

3834
endmodule

0 commit comments

Comments
 (0)