|
| 1 | +# PADRING GENERATOR |
| 2 | + |
| 3 | +## Introduction |
| 4 | + |
| 5 | +The lamdbdalib `padring` library is an automated "pure verilog" padring generator with support for cells within the [IOLIB](../../iolib/README.md) io cell library. |
| 6 | + |
| 7 | +## PARAMETERS |
| 8 | + |
| 9 | +### {NO,EA,WE,SO}NCELLS |
| 10 | +Specifies the total number of placed cells within one side of the padring, includig supply and clamp cells. |
| 11 | + |
| 12 | +### {NO,EA,WE,SO}NPINS |
| 13 | +Specifies the total number of logical device pins (pads) connected to one side of the padring, not including supply pins. The `CELLMAP` parameter specifies which one of the pins should be connected to a cell. |
| 14 | + |
| 15 | +### {NO,EA,WE,SO}NSECTIONS |
| 16 | +Specifies the total number of power sections within one side of the padring. The `CELLMAP` parameter specifies which one of the power sections should be connected to a cell. |
| 17 | + |
| 18 | +### {NO,EA,WE,SO}CELLMAP |
| 19 | +Specifies the type of cells, pin connections, properties, and power connections of all cells in the padring with the exception of filler cells. The physical placement of the cells within the padring shall be done in the order dictated by `CELLMAP`. The CELLMAP is a vector of size NCELLS * 40, with the 40bit vector split into the following fields: |
| 20 | + |
| 21 | + * CELLMAP[7:0] = pin number connected to cell |
| 22 | + * CELLMAP[15:8] = pin number for complementary pad for differential cells |
| 23 | + * CELLMAP[23:16] = cell type (see ./la_padring.vh) |
| 24 | + * SECTION[31:24] = padring power section number connected to cell |
| 25 | + * PROP[39:32] = property passed to technology specific iolib implementation |
| 26 | + |
| 27 | +### CFGW |
| 28 | +Specifies the width of the configuration bus of the io cell. For a description of uses of `CFGW`, see [IOLIB](../../iolib/README.md). |
| 29 | + |
| 30 | +#### RINGW |
| 31 | +The `RINGW` parameter specifies the number of signals within the power bus that connects all of the io cells together within the padring. |
| 32 | + |
| 33 | + |
| 34 | +## Using the Generator |
| 35 | + |
| 36 | +To use the generator, you will need to: |
| 37 | + 1. Instantiate the module in your design. |
| 38 | + 2. Pass in a set of parameters to configure the cells within the padring. |
| 39 | + |
| 40 | +The full example can be found in the `tb` module placed at the end of the [la_iopadring](rtl/la_iopadring.v) module. To run the small testbench, just execute: |
| 41 | + |
| 42 | + ```sh |
| 43 | + iverilog la_iopadring.v -DTB_LA_IOPADRING -y . -y ../../iolib/rtl |
| 44 | + ./a.out |
| 45 | + ``` |
| 46 | + |
| 47 | +The following excerpt from the testbench illustrate the use of the `CELLMAP`, `NPINS`, and `NCELLS` parameters. |
| 48 | + |
| 49 | +```verilog |
| 50 | +
|
| 51 | +
|
| 52 | + // Setting up your parameters |
| 53 | +
|
| 54 | + localparam CFGW = 8; |
| 55 | + localparam RINGW = 8; |
| 56 | + localparam NPINS = 4; |
| 57 | + localparam NCELLS = 8; |
| 58 | + localparam NSECTIONS = 1; |
| 59 | +
|
| 60 | + // pinmap |
| 61 | + localparam [7:0] PIN_IO0 = 8'h00; |
| 62 | + localparam [7:0] PIN_AN0 = 8'h01; |
| 63 | + localparam [7:0] PIN_RXP = 8'h02; |
| 64 | + localparam [7:0] PIN_RXN = 8'h03; |
| 65 | +
|
| 66 | + localparam NULL = 8'h0; |
| 67 | +
|
| 68 | + localparam CELLMAP = {{NULL, NULL, LA_VSS, NULL, NULL}, |
| 69 | + {NULL, NULL, LA_BIDIR, NULL, PIN_IO0}, |
| 70 | + {NULL, NULL, LA_ANALOG, NULL, PIN_AN0}, |
| 71 | + {NULL, NULL, LA_VDDIO, NULL, NULL}, |
| 72 | + {NULL, NULL, LA_RXDIFF, PIN_RXN, PIN_RXP}, |
| 73 | + {NULL, NULL, LA_VSS, NULL, NULL}, |
| 74 | + {NULL, NULL, LA_VSS, NULL, NULL}, |
| 75 | + {NULL, NULL, LA_VSS, NULL, NULL}}; |
| 76 | +
|
| 77 | +// Instantiating the padring in your design |
| 78 | +la_iopadring #(.CFGW(CFGW), |
| 79 | + .RINGW(RINGW), |
| 80 | + .NO_NPINS(NPINS), |
| 81 | + .EA_NPINS(NPINS), |
| 82 | + .WE_NPINS(NPINS), |
| 83 | + .SO_NPINS(NPINS), |
| 84 | + .NO_NCELLS(NCELLS), |
| 85 | + .EA_NCELLS(NCELLS), |
| 86 | + .WE_NCELLS(NCELLS), |
| 87 | + .SO_NCELLS(NCELLS), |
| 88 | + .NO_CELLMAP(CELLMAP), |
| 89 | + .EA_CELLMAP(CELLMAP), |
| 90 | + .WE_CELLMAP(CELLMAP), |
| 91 | + .SO_CELLMAP(CELLMAP)) |
| 92 | +la_iopadring(...) |
| 93 | +
|
| 94 | +
|
| 95 | +
|
| 96 | +``` |
| 97 | + |
0 commit comments