JC
08/01/2023, 2:48 AMlef write bitfour_EESPFAL -tech
to generate the lef file in magic. Please tell me if I'm missing a step or my setup config is false. Any help is appreciated.Mitch Bailey
08/01/2023, 7:54 AMReading /openlane/designs/blackbox_test_2/runs/test/results/signoff/blackbox_test_2.gds ..
Reading /openlane/designs/blackbox_test_2/runs/test/results/signoff/blackbox_test_2.klayout.gds ..
It may be that you have saved your lef version of the magic file with a .mag
extension instead of .maglef
.JC
08/01/2023, 2:58 PMMitch Bailey
08/01/2023, 2:59 PMTim Edwards
08/01/2023, 3:00 PM.maglef
. A "maglef" file is simply an abstract view of a cell.JC
08/02/2023, 12:35 AMMitch Bailey
08/02/2023, 2:09 AMRUN_TAP_DECAP_INSERTION
See https://openlane.readthedocs.io/en/latest/reference/configuration.html
Don’t know about the size discrepancies.JC
08/03/2023, 2:57 AMMitch Bailey
08/03/2023, 4:33 AMFP_PDN_MACRO_HOOKS
needs to be set to connect macros to the power grid.
What would the reason behind the gds saved by using Magic make the size discrepancy not happen while Klayout’s gds does?@Tim Edwards any ideas?
JC
08/03/2023, 8:14 PMFP_PDN_MACRO_HOOKS
requires the vdd gnd to be in pairs. What would be the way to tell the PDN_MACRO_HOOKS to make the GPIO pins as power clock pins?Mitch Bailey
08/03/2023, 10:22 PMJC
08/04/2023, 12:31 AMMitch Bailey
08/04/2023, 2:51 AMJC
08/04/2023, 3:51 AMMitch Bailey
08/04/2023, 6:54 AMMakefile
in the caravel_user_project_analog
has targets that run the openroad flow.tcl
script. I don’t think it is necessary (or advised?) to run the flow.tcl
script directly, but I may be mistaken.
“Normal” operation is to create a directory in the caravel_user_project_analog/openlane
directory for each block that you want to synthesize with openlane. Each directory will have it’s own config.json
file with the parameters necessary for synthesis. The top level will be user_analog_project_wrapper
.
Unfortunately, it looks like the current caravel_user_project_analog/openlane
directory does not include any default blocks. Maybe reference caravel_user_project/openlane
directories for samples.
With the block directories and config.json files in place, just run make <block>
in the caravel_user_project_analog
directory to synthesize each design block with flow.tcl
. Remember, you need to start at the lower blocks and re-synthesize all the parent blocks anytime a sub block is changed.JC
08/04/2023, 10:17 PM"VDD_NETS":"VDD_Dummy",
"GND_NETS":"GND",
"FP_PDN_MACRO_HOOKS": "submodule.bitfour_EESPFAL0 VDD_Dummy GND VDD_Dummy GND",
Mitch Bailey
08/05/2023, 3:40 AMVDD_Dummy
in the top level verilog?
Since the macro does not have a connection to VDD
, you might try adding a floating VDD
pin (instead of VDD_Dummy
).
Then connect your top level VDD
to this floating pin.
FP_PDN_MACRO_HOOKS": "submodule.bitfour_EESPFAL0 VDD GND VDD GND",
JC
08/05/2023, 11:20 PMMitch Bailey
08/06/2023, 5:48 AMJC
08/06/2023, 5:38 PMMitch Bailey
08/06/2023, 11:59 PMuser_proj_example mprj (
`ifdef USE_POWER_PINS
.vccd1(vccd1), // User area 1 1.8V power
.vssd1(vssd1), // User area 1 digital ground
`endif
Since they’re not specified during synthesis, the FP_PDN_MACRO_HOOKS
is used for power routing.
Can you try something like
module blackbox_test_2(
input [BIT_SIZE-1:0] clk_top,
input [BIT_SIZE-1:0] dis_top,
input [BIT_SIZE-1:0] x_top,
input [BIT_SIZE-1:0] x_bar_top,
input [BIT_SIZE-1:0] k_top,
input [BIT_SIZE-1:0] k_bar_top,
output [BIT_SIZE-1:0] s_top,
output [BIT_SIZE-1:0] s_bar_top,
`ifdef USE_POWER_PINS
inout VDD,
inout GND
`endif
);
parameter BIT_SIZE = 4;
bitfour_EESPFAL #(BIT_SIZE) lane0(
.s(s_top[3:0]),
.s_bar(s_bar_top[3:0]),
.x(x_top[3:0]),
.x_bar(x_bar_top[3:0]),
.k(k_top[3:0]),
.k_bar(k_bar_top[3:0]),
.CLK(clk_top[3:0]),
.Dis(dis_top[3:0]),
`ifdef USE_POWER_PINS
.VDD(VDD), //Floating VDD pin to trick OpenLane
.GND(GND)
`endif
);
I’ve changed the VDD_Dummy
and GND_Dummy
nets to VDD
and GND
to match the FP_PDN_MACRO_HOOKS
settings. You want an actual GND
connection, right?JC
08/07/2023, 1:29 AMGND
connection, we want to use the GPIO pins so we can have individual external GND and not through the caravel's GND. We want to compare the instantaneous power and functionality of Adiabatic circuit against its traditional digital circuit counterpart. Please correct me if there is a better or correct way to do this.Mitch Bailey
08/07/2023, 1:53 AM81/53
) that do not connect during extraction. If you truly want to separate the psubstrate regions, normally you’d can place your macro in a deep nwell region with a nwell guard ring surrounding it. However, while this does give you an isolated pwell region, it also shorts all the nwells in the region to the same node, which is not what you want.
Would it be possible to separate the pwell regions from the nwell regions by putting only the pwell inside deep nwell? It will probably be a larger circuit than what you have now. You’d tie the deep nwell to a true VDD.JC
08/07/2023, 2:30 AMMitch Bailey
08/07/2023, 3:06 AMconfig.json
file has
"FP_PDN_MACRO_HOOKS": "submodule.bitfour_EESPFAL0 VDD GND VDD GND"
but I’m guessing the synthesized verilog has 4 individual macros named something like
lane0[0]
lane0[1]
lane0[2]
lane0[3]
If this is the case, you want this
"FP_PDN_MACRO_HOOKS": [
"lane0[0] VDD GND VDD GND,",
"lane0[1] VDD GND VDD GND,",
"lane0[2] VDD GND VDD GND,",
"lane0[3] VDD GND VDD GND,"
]
Note the “extra” ,
before the closing "
.JC
08/07/2023, 4:26 AMlane0
, getting the same error. And I've also tried with`submodule.bitfour_EESPFAL0`and getting the same error as well.Mitch Bailey
08/07/2023, 9:18 AMJC
08/07/2023, 11:47 AMMitch Bailey
08/07/2023, 1:56 PMbitfour_EESPFAL
.
Does anyone know if yosys can synthesize parameterized instances like this
parameter BIT_SIZE = 4;
bitfour_EESPFAL #(BIT_SIZE) lane0(
and if it can, what are the resulting 4 instance names.Leo Moser
08/08/2023, 6:34 AMJC
08/08/2023, 6:35 PM"FP_PDN_MACRO_HOOKS": ["lane\\\\[\\\\0\\\\]\\.bitfour_EESPFAL0 VDD GND VDD GND,","lane\\\\[\\\\1\\\\]\\.bitfour_EESPFAL0 VDD GND VDD GND,","lane\\\\[\\\\2\\\\]\\.bitfour_EESPFAL0 VDD GND VDD GND,","lane\\\\[\\\\3\\\\]\\.bitfour_EESPFAL0 VDD GND VDD GND,", "bitfour_EESPFAL0 VDD GND VDD GND"],
? I did that but still getting the same error. Openlane's saying its reading 3-initial_fp.sdc as shown in the log file but I don't get what needs to be done.
I know we want to package the blackbox circuit as is, have openlane connect to the pins defined in the blackbox model. For this we want the GND to be connected to a GPIO pin, trapezoidal wave (CLK) and Discharge (Dis) signals to be connected via gpio pins.JC
08/08/2023, 7:23 PMMitch Bailey
08/08/2023, 11:15 PMFP_PDN_MACRO_HOOKS
variables need to match the names in the synthesized verilog. Can you try this variable with this rtl which uses explicit declarations?
"FP_PDN_MACRO_HOOKS": ["lane0 VDD GND VDD GND,","lane1 VDD GND VDD GND,","lane2 VDD GND VDD GND,","lane3 VDD GND VDD GND,", "bitfour_EESPFAL0 VDD GND VDD GND"],
Verilog
module blackbox_test_2(
input [BIT_SIZE-1:0] clk_top,
input [BIT_SIZE-1:0] dis_top,
input [BIT_SIZE-1:0] x_top,
input [BIT_SIZE-1:0] x_bar_top,
input [BIT_SIZE-1:0] k_top,
input [BIT_SIZE-1:0] k_bar_top,
output [BIT_SIZE-1:0] s_top,
output [BIT_SIZE-1:0] s_bar_top,
`ifdef USE_POWER_PINS
inout VDD,
inout GND
`endif
);
bitfour_EESPFAL lane0 (
.s(s_top[3:0]),
.s_bar(s_bar_top[3:0]),
.x(x_top[3:0]),
.x_bar(x_bar_top[3:0]),
.k(k_top[3:0]),
.k_bar(k_bar_top[3:0]),
.CLK(clk_top[3:0]),
.Dis(dis_top[3:0]),
`ifdef USE_POWER_PINS
.VDD(VDD), //Floating VDD pin to trick OpenLane
.GND(GND)
`endif
);
bitfour_EESPFAL lane1 (
.s(s_top[3:0]),
.s_bar(s_bar_top[3:0]),
.x(x_top[3:0]),
.x_bar(x_bar_top[3:0]),
.k(k_top[3:0]),
.k_bar(k_bar_top[3:0]),
.CLK(clk_top[3:0]),
.Dis(dis_top[3:0]),
`ifdef USE_POWER_PINS
.VDD(VDD), //Floating VDD pin to trick OpenLane
.GND(GND)
`endif
);
bitfour_EESPFAL lane2 (
.s(s_top[3:0]),
.s_bar(s_bar_top[3:0]),
.x(x_top[3:0]),
.x_bar(x_bar_top[3:0]),
.k(k_top[3:0]),
.k_bar(k_bar_top[3:0]),
.CLK(clk_top[3:0]),
.Dis(dis_top[3:0]),
`ifdef USE_POWER_PINS
.VDD(VDD), //Floating VDD pin to trick OpenLane
.GND(GND)
`endif
);
bitfour_EESPFAL lane3 (
.s(s_top[3:0]),
.s_bar(s_bar_top[3:0]),
.x(x_top[3:0]),
.x_bar(x_bar_top[3:0]),
.k(k_top[3:0]),
.k_bar(k_bar_top[3:0]),
.CLK(clk_top[3:0]),
.Dis(dis_top[3:0]),
`ifdef USE_POWER_PINS
.VDD(VDD), //Floating VDD pin to trick OpenLane
.GND(GND)
`endif
);
JC
08/09/2023, 3:08 AMMitch Bailey
08/09/2023, 3:40 AMifdef
causes the error. Try putting it first.
module blackbox_test_2(
`ifdef USE_POWER_PINS
inout VDD,
inout GND,
`endif
input [BIT_SIZE-1:0] clk_top,
input [BIT_SIZE-1:0] dis_top,
input [BIT_SIZE-1:0] x_top,
input [BIT_SIZE-1:0] x_bar_top,
input [BIT_SIZE-1:0] k_top,
input [BIT_SIZE-1:0] k_bar_top,
output [BIT_SIZE-1:0] s_top,
output [BIT_SIZE-1:0] s_bar_top
);
bitfour_EESPFAL lane0 (
`ifdef USE_POWER_PINS
.VDD(VDD), //Floating VDD pin to trick OpenLane
.GND(GND),
`endif
.s(s_top[3:0]),
.s_bar(s_bar_top[3:0]),
.x(x_top[3:0]),
.x_bar(x_bar_top[3:0]),
.k(k_top[3:0]),
.k_bar(k_bar_top[3:0]),
.CLK(clk_top[3:0]),
.Dis(dis_top[3:0])
);
bitfour_EESPFAL lane1 (
`ifdef USE_POWER_PINS
.VDD(VDD), //Floating VDD pin to trick OpenLane
.GND(GND),
`endif
.s(s_top[3:0]),
.s_bar(s_bar_top[3:0]),
.x(x_top[3:0]),
.x_bar(x_bar_top[3:0]),
.k(k_top[3:0]),
.k_bar(k_bar_top[3:0]),
.CLK(clk_top[3:0]),
.Dis(dis_top[3:0])
);
bitfour_EESPFAL lane2 (
`ifdef USE_POWER_PINS
.VDD(VDD), //Floating VDD pin to trick OpenLane
.GND(GND),
`endif
.s(s_top[3:0]),
.s_bar(s_bar_top[3:0]),
.x(x_top[3:0]),
.x_bar(x_bar_top[3:0]),
.k(k_top[3:0]),
.k_bar(k_bar_top[3:0]),
.CLK(clk_top[3:0]),
.Dis(dis_top[3:0])
);
bitfour_EESPFAL lane3 (
`ifdef USE_POWER_PINS
.VDD(VDD), //Floating VDD pin to trick OpenLane
.GND(GND),
`endif
.s(s_top[3:0]),
.s_bar(s_bar_top[3:0]),
.x(x_top[3:0]),
.x_bar(x_bar_top[3:0]),
.k(k_top[3:0]),
.k_bar(k_bar_top[3:0]),
.CLK(clk_top[3:0]),
.Dis(dis_top[3:0])
);
Probably need to change bitfour_EESPFAL_bb.v
alsoJC
08/09/2023, 2:13 PMMitch Bailey
08/09/2023, 2:23 PMoutput
to inout
on s
and s_bar
?JC
08/09/2023, 2:43 PMMitch Bailey
08/09/2023, 4:13 PMNo regex match found for bitfour_EESPFAL0 defined in FP_PDN_MACRO_HOOKS
FP_PDN_MACRO_HOOKS
uses the instance name, ie. lane0
.
Just to avoid problems with escaping json/tcl characters, I suggest creating instance names without [
]
.JC
08/09/2023, 4:38 PM[]
and `"bitfour_EESPFAL0 VDD GND VDD GND"`out of curiosity from the config.json file. ./flow.tcl got pass the generating PDN step and ran into placement resizer design optimization error.
Edit: I made the DIE_AREA: "0 0 1000 1000"
and that got past [ERROR DPL-0044] Cell lane0 with height 78865 is taller than any row.
Currently the error is in the Global Routing Resizer Design Optimization step [ERROR GRT-0076] Net clknet_1_1__leaf_clk_top[2] not properly covered.
Mitch Bailey
08/09/2023, 5:37 PMopenroad -gui
JC
08/09/2023, 5:52 PMJC
08/09/2023, 6:18 PM[WARNING DRT-6000] Macro pin has more than 1 polygon
dump and it started with 305 violations. Is the warning something to be concerned about or this can be mitigated by specifying a smaller die area?Mitch Bailey
08/09/2023, 6:26 PMJC
08/09/2023, 6:32 PMJC
08/09/2023, 7:31 PMstep 24 Running Detailed Routing
. Now the error is relating to LVS. It looks like the floating VDD pin is not connected at all.Mitch Bailey
08/10/2023, 12:36 AMJC
08/10/2023, 2:54 PMJC
08/10/2023, 9:48 PMNet: lane0/VDD
?
Another thing is I have to update the macro_placement.cfg to 155 150 N
instead of 150 150 N
to avoid step 24 (Detailed Routing) violation. Why is this a thing? I have included the .log file for that.