Skip to main content

Integration: OpenROAD

These steps add an SRAM22 macro to an existing SKY130 flow, including OpenROAD-flow-scripts (ORFS). Supply your flow's technology setup, clocks, floorplan, power connections, and signoff checks.

1. Obtain matching macro views​

The published catalog supplies characterized macros. Download all views from the same macro directory and decompress its GDS:

gzip -d sram22_64x32m4w8.gds.gz

The relevant files at the TT corner are:

  • sram22_64x32m4w8.gdslayout, after decompression
  • sram22_64x32m4w8.lefphysical abstract
  • sram22_64x32m4w8.vbehavioral simulation model
  • sram22_64x32m4w8_tt_025C_1v80.libTT timing

Alternatively, generate the macro. SRAM22 emits GDS/LEF/SPICE/Verilog and interpolated TT/SS/FF Liberty files. Its BWRC --liberate option runs Liberate MX characterization instead. Use timing libraries appropriate for the generated macro's geometry and your flow's verification requirements.

2. Instantiate a library macro​

Reference the macro module in the top-level RTL:

sram22_64x32m4w8 u_mem (
.clk(clk), .rstb(rstb), .ce(ce), .we(we),
.wmask(wmask), // [3:0]
.addr(addr), // [5:0]
.din(din), // [31:0]
.dout(dout) // [31:0]
);

Use the behavioral .v in simulation. In synthesis, use your flow's Liberty library-cell/black-box binding so the SRAM remains a hard macro; do not synthesize its behavioral memory implementation. Inspect the synthesized netlist for the u_mem instance and its correct library-cell type. Connect physical power pins using the flow's global-connect and power-grid setup. See the pin interface for signal widths and behavior.

3. Register the views​

In an ORFS design configuration, with these files under its macro directory:

export ADDITIONAL_LEFS += $(DESIGN_HOME)/macros/sram22_64x32m4w8.lef
export ADDITIONAL_LIBS += $(DESIGN_HOME)/macros/sram22_64x32m4w8_tt_025C_1v80.lib
export ADDITIONAL_GDS += $(DESIGN_HOME)/macros/sram22_64x32m4w8.gds

For a custom OpenROAD Tcl flow, load the technology LEF, standard-cell LEF and Liberty, and SRAM LEF and Liberty before linking the synthesized netlist. The following assumes TECH_LEF, SC_LEF, and SC_LIB were set by your flow:

read_lef $::env(TECH_LEF)
read_lef $::env(SC_LEF)
read_lef ./macros/sram22_64x32m4w8.lef
read_liberty $::env(SC_LIB)
read_liberty ./macros/sram22_64x32m4w8_tt_025C_1v80.lib
read_verilog ./results/synth.v
link_design top

Load corresponding standard-cell and macro corners together for multi-corner STA. Provide clock and I/O constraints for the design.

4. Place and connect the macro​

After creating the floorplan, place the macro:

place_inst -name u_mem -origin {120.0 80.0} -orientation R90 -status FIRM

Coordinates are microns and must fit your actual floorplan. The project supports R90, R270, and their mirrored variants. Explicitly enforce this restriction; SYMMETRY X Y R90 in the LEF permits more orientations. See Orientations and your version's OpenROAD API.

Connect vdd/vss and design the PDN for their rotated met2 geometry. Verify power connectivity, routing access, placement status, and orientation in the database before standard-cell placement, CTS, and routing.

5. Verify the integrated design​

Check STA using all required corners, merge the macro GDS into the streamed layout, and run the flow's DRC/LVS and connectivity checks. ORFS can use ADDITIONAL_GDS during its merge; a custom flow must arrange its own merge.