I try to design a mixed signal SoC. Now i want P&a...
# analog-design
f
I try to design a mixed signal SoC. Now i want P&R analog ip (PLL) inside my digital caravel project. I made the blackbox and I add it with gds and lef file pointer to config file. When I run the flow I have this error during macro placement, why?
m
Can you share your
macro.cfg
?
m
afair. I saw this error after renaming macro
lef
and
gds
files, as a result of mismatching
gds
file-name and macro-name. I guess a file with the name
PLL_.gds
has been expected
EDIT: Nope, doesn't matter
m
So it’s working now?
👎 1
f
I change the name of gds and lef file in PLL_.gds and PLL_.lef but it doesnt't work
This is my macro file. @Mitch Bailey
m
Can you push the relevant files to your repo and share it? I’ll see if I can duplicate the problem.
f
This is my working folder: @Mitch Bailey
m
Don’t know if this is the reason or not but your logs have
Copy code
[WARNING ODB-0186] macro PLL_ references unknown site unithddb1
I’m guessing that this is a typo and what you intended was
unitdbdbl
? However, the macro size appears to be bigger than a double height row and since you’re specific placement in
macro.cfg
, maybe the SITE line is not necessary. Your
openlane/wrapper_pll/runs/mixed_sig/logs/synthesis/1-synthesis.log
has
Copy code
8.5. Executing OPT_CLEAN pass (remove unused cells and wires).
Finding unused cells or wires in module \wrapped_pll..
Removed 1 unused cells and 1 unused wires.
<suppressed ~2 debug messages>
Maybe your
PLL_
macro is being optimized out here. The
PLL_
instance is connected to inputs, but the only output is an otherwise unconnected wire
clock_out
. Maybe try
assign io_out[0] clout_out;
before
endmodule
.
f
Okay thank you, I add clock_out to the output and now place the macro correctly. But I have problems during resizer design .... why overlap?
m
The standard cells overlap the macro. I've noticed in your lef files that
CLASS BLOCK
has been changed to
CLASS CORE
inside the zip file. Undo this change,
BLOCK
is the correct one for macros
👍 1
f
Okay thank you, exist an online detailed flow guide to perform mixed-signal IP? I can't find it ..
f
I have a last error in lvs, how can i correct?
m
Is this the output of
flow.tcl
or are you running LVS separately?
f
The output of flow.tcl (STEP 35)
m
Is there a
openlane/wrapped_pll/runs/mixed_sig/results/final/verilog/gl/wrapped_pll.v
file? Can you post it?
f
m
Can you also post your most recent
verilog/rtl/wrapped_pll.v
?
f
wrapped_pll.v
m
Your synthesized
wrapped_pll
has
Copy code
module wrapped_pll (wb_clk_i,
    wb_rst_i,
    vccd1,
    vssd1,
    io_in,
    io_oeb,
    io_out,
    la_data_in,
    la_data_out);
 input wb_clk_i;
 input wb_rst_i;
 input vccd1;
 input vssd1;
 input [37:0] io_in;
 output [37:0] io_oeb;
 output [37:0] io_out;
 input [63:0] la_data_in;
 output [63:0] la_data_out;
while your rtl has
Copy code
module wrapped_pll (
    
`ifdef USE_POWER_PINS
    inout vccd1,	// User area 1 1.8V supply
    inout vssd1,	// User area 1 digital ground
`endif

    input wb_clk_i,
    input wb_rst_i,

    input  [`MPRJ_IO_PADS-1:0] io_in,
    output [`MPRJ_IO_PADS-1:0] io_out,
    output [`MPRJ_IO_PADS-1:0] io_oeb,

    input  [63:0] la_data_in,
    output [63:0] la_data_out,

);
Since the vccd1 and vssd1 signal types and order are different, I’m thinking that something is not matching. Do you want to upload another zip file?
f
I change a little bit the
wrapped_pll
adding a counter that use the output clock of the PLL, but the error during physical design is the same.
m
Can you try adding
"FP_PDN_MACRO_HOOKS": ["pll1 vccd1 vssd1 VDD GND"],
to your
config.json
file?
f
Yeah, but I think that the correct way is
"FP_PDN_MACRO_HOOKS": ["pll1", "vccd1", "vssd1", "VDD", "GND"],
with comma separated values, right?
m
I don’t think the individual values are comma separated but I’m not that familiar with the json syntax. It may yield the same result.
f
I try but the problem persist.
m
The
FP_PDN_MACRO_HOOK
logic does not do much error checking. Did you try both
Copy code
"FP_PDN_MACRO_HOOKS": ["pll1 vccd1 vssd1 VDD GND"],
and
Copy code
"FP_PDN_MACRO_HOOKS": ["pll1", "vccd1", "vssd1", "VDD", "GND"],
?
f
Yes I try both and anyone work.
m
It seems that the gate level powered verilog used for lvs is generated from the synthesized def file. If the powered connections to the PLL macro are missing from the def file, I don’t think they’ll show up in the verilog. Any error messages about power definitions in your logs?
f
This is my run folder after flow.
m
Your powered netlist is now correct.
Copy code
PLL_ pll1 (.VDD(vccd1),
    .GND(vssd1),
    .ENb_VCO(net2),
    .ENb_CP(net3),
    .REF(net1),
    .CLK(\counter.clk ),
    .VCO_IN(wb_clk_i));
However, your macro is not being connected to power. This depends a lot on how you’ve defined your layout. Let me look.
f
This is my magic layout file
m
I looked at the gds. My understanding is that the macros should have a power mesh up to one less than the top metal layer of the layout (metal4 probably). Your macro has multiple VDD and GND wires that aren’t connected on metal1. The metal4 trunks should run vertical so that the metal5 power grid will connect. But you might want to start a new thread because I probably can’t give much more advice.
f
Okay thank you very much
@Mitch Bailey If you see this file
mcu/openlane/wrapped_pll/runs/mixed_sig/logs/signoff/35-wrapped_pll.lef.lvs.log
, at row 2143 there are some mismatch why?
m
I’ve seen these types of mismatches on similar topologically equivalent nets. If the designs are entirely topologically equivalent, then netgen will rematch nets based on port names. Your design has unconnected power in the PLL macro, and thus is not topologically equivalent and netgen has not done rematching. So ignore the mismatches between topologically equivalent nets.
👍 1
f
If I add VDD and GND in VDD_NETS and GND_NETS in config.json file I encountered a new issue.
Not a floating-point value: PIN (line=8917, cell=, file=wrapped_pll.def) in Layout.read
What is?
wrapped_pll.def
m
Sorry, I have no clue. My suggestion is to find a mixed-signal design and see how they solved the problem.
f
Have you any git hub link project suggestion for this purpose?
m