Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Padring generator upgrade #63

Merged
merged 14 commits into from
Jul 29, 2024
2 changes: 1 addition & 1 deletion lambdalib/iolib/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
## PARAMETERS

### CFGW
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 `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.

For la_bidir, the first 8 bits of the configuration bus are reserved for the functionality shown in the table below.

Expand Down
33 changes: 0 additions & 33 deletions lambdalib/iolib/rtl/la_ioshort.v

This file was deleted.

11 changes: 0 additions & 11 deletions lambdalib/iolib/rtl/la_pt.v

This file was deleted.

8 changes: 4 additions & 4 deletions lambdalib/padring/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# PADRING GENERATOR
q# PADRING GENERATOR
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

stray q


## Introduction

Expand All @@ -18,8 +18,8 @@ Specifies the total number of power sections within one side of the padring. The
### {NO,EA,WE,SO}CELLMAP
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:

* PIN[7:0] = CELLMAP[7:0] = pin number connected to cell
* COMP[7:0] = CELLMAP[15:8] = pin number for complementary pad for differential cells
* PIN[7:0] = CELLMAP[7:0] = pin number connected to cell. Positive signal in case of differential pairs.
* COMP[7:0] = CELLMAP[15:8] = pin number of complementary (negative) pad to `PIN`. Used for differential IO cells.
* TYPE[7:0] = CELLMAP[23:16] = cell type (see ./la_padring.vh)
* SECTION[7:0] = CELLMAP[31:24] = padring power section number connected to cell
* PROP[7:0] = CELLMAP[39:32] = property passed to technology specific iolib implementation
Expand All @@ -30,7 +30,7 @@ The header file [la_iopadring.vh](./rtl/la_iopadring.vh) enumerates the cells re
Specifies the width of the configuration bus of the io cell. For a description of uses of `CFGW`, see [IOLIB](../../iolib/README.md).

#### RINGW
The `RINGW` parameter specifies the number of signals within the power bus that connects all of the io cells together within the padring.
The `RINGW` parameter specifies the number of signals within the power bus that connects all of the io cells together within the padring. For a description of uses of `RINGW`, see [IOLIB](../../iolib/README.md).


## Using the Generator
Expand Down
25 changes: 25 additions & 0 deletions lambdalib/padring/rtl/la_ioalias.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

/**************************************************************************
* Function: IO Alias Utility Module
* Copyright: Lambda Project Authors. All rights Reserved.
* License: MIT (see LICENSE file in Lambda repository)
*
* Docs:
*
* Signal renaming and concatenation of wires doesn't work for
* directly connected I/O ports. One solution is to hard code the
* connections in the design. Another option is to pass through the
* name translation module shown below.
*
* WARNING: The port list alias features is in the verilog standard,
* but not well supported by open source tools. Not recommended for
* portable designs.
*
*************************************************************************/

module la_ioalias (.io1(a),
.io2(a));

inout wire a;

endmodule
31 changes: 31 additions & 0 deletions lambdalib/padring/rtl/la_ioshort.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/**************************************************************************
* Function: Simulation Friendly IO Alias Module
* Copyright: Lambda Project Authors. All rights Reserved.
* License: MIT (see LICENSE file in Lambda repository)
*
* Docs:
*
* Instantiates the la_ioalias inout alias module and adds a loop breaking
* logic for some tools that don's support tran, alias,and port aliasing.
*
* WARNING: The port list alias features is in the verilog standard,
* but not well supported by open source tools. Not recommended for
* portable designs.
*
*************************************************************************/
module la_ioshort (inout a,
inout b,
input a2b
);

`ifdef VERILATOR
// Using direction to break the loop
assign a = ~a2b ? b : 1'bz;
assign b = a2b ? a : 1'bz;
`else
// verilog_lint: waive-start module-port
la_pt la_ioalias (a,b);
// verilog_lint: waive-end module-port
`endif

endmodule