I am getting a magic DRC violation(for only 1 transistor) showing "all nwells must contain metal con...
m
I am getting a magic DRC violation(for only 1 transistor) showing "all nwells must contain metal connected N+ taps" while running openlane flow for user_project_wrapper in integrating my design with caravel. How to resolve the above issue?
m
psubstrate/nwells must be connected via tap to metal. Can you share your layout?
m
layout_caravel.png,config_final.json
layout means do I need to send .gds file sir?
user_project_wrapper.gds
This is the location of magic DRC violation
m
Looks like you may have tried to tie some of the inputs either high or low at the
user_project_wrapper
level. This causes openlane to place a
conb
cell but since
"SYNTH_ELABORATE_ONLY": 1,
, it doesn’t get placed in a powered standard cell row. I think what you want to do is tie all your inputs at the
user_proj_example
level and use the default
verilog/rtl/user_project_wrapper.v
. Anyone have any other ideas?
m
I have done the same. I didn't modify user_projrct_wrapper . Could you please tell me how to tie all the inputs ate the user_pro_example level?
user_project_wrapper.v,user_proj_example.v
Please check the above files and provide me some solution sir.
m
@Manikanta Neralla Sorry for the irrelevant advice. Comparing your config to other taped out designs, I notice that you have
"CLOCK_TREE_SYNTH": 1,
where it’s normally
0
. Does that make a difference?
m
Ok sir. I will keep it 0 and try it.
Sir eventhough I kept "CLOCK_TREE_SYNTH":0, I got the same DRC error.
config.json
Screenshot from 2023-06-25 11-19-23.png
drc.tcl
Is there any other alternative to solve this problem sir?
m
Can you share your
verilog/gl/user*.v
files?
m
user_proj_example.nl.v,user_proj_example.v,user_project_wrapper.nl.v,user_project_wrapper.v
m
Looking at the gate level verilog, it looks like yosys is adding low connections to undefined inputs. See
io_in
below. You could t
Copy code
sky130_fd_sc_hd__conb_1 TIE_ZERO_zero_ (.VGND(vssd1),
    .VNB(vssd1),
    .VPB(vccd1),
    .VPWR(vccd1),
    .LO(zero_));
 user_proj_example mprj (.vccd1(vccd1),
    .vssd1(vssd1),
    .wb_clk_i(wb_clk_i),
    .wb_rst_i(wb_rst_i),
    .wbs_ack_o(wbs_ack_o),
    .wbs_cyc_i(wbs_cyc_i),
    .wbs_stb_i(wbs_stb_i),
    .wbs_we_i(wbs_we_i),
    .io_in({zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    zero_,
    io_in[37],
    io_in[36],
    io_in[35],
    io_in[34],
    io_in[33],
    io_in[32],
    io_in[31],
    io_in[30],
    io_in[7],
    io_in[6],
    io_in[5],
    io_in[4],
    io_in[3],
    io_in[2],
    io_in[1],
    io_in[0]}),
The rtl only has the lower 16 bits assigned.
Copy code
.io_in ({io_in[37:30],io_in[7:0]}),
    .io_out({io_out[37:30],io_out[7:0]}),
    .io_oeb({io_oeb[37:30],io_oeb[7:0]}),
You could try assigning the upper 22 bits to
io_in[29:8]
. Right now, the
user_proj_example.v
rtl has
Copy code
wire [0:15] inp,outp;
and
Copy code
assign inp=io_in[`MPRJ_IO_PADS-1:`MPRJ_IO_PADS-16];
 assign io_out[`MPRJ_IO_PADS-1:22]=outp;
which is
Copy code
inp [0:15] = io_in[37:22]
This looks like it reversing the bit order (may not be a problem) and using the unassigned (zero) values from the high bits of
io_in.
m
which 22 bits I need to assign to io_in[29:8]? could you please elaborate?
If possible could you please write the assign statements here sir?
m
I’m not really familiar with verilog, but what about using the default
verilog/rtl/user_project_wrapper.v
and then using these assignment statements in
verilog/rtl/user_proj_example.v
.
Copy code
assign inp={io_in[37:30],io_in[7:0]};
 assign {io_out[37:30],io_out[7:0]}=outp;
Are using the same gpio for input and output? If you are, you need to set
io_oeb
low for the bits you what to output.
m
yes sir, I am using the default user_project_wrapper. I have done assignment as above in user_proj_example.
I am using the same gpio for input and output
where I need to set it low io_oeb?
m
Ok. Sorry, my mistake. You are using the default
user_project_wrapper.v
. Your
user_proj_example
bus widths are too long. Default
user_proj_example
Copy code
input  [15:0] io_in,
    output [15:0] io_out,
    output [15:0] io_oeb,
Your
user_proj_example
Copy code
input  [`MPRJ_IO_PADS-1:0] io_in,
    output [`MPRJ_IO_PADS-1:0] io_out,
    output [`MPRJ_IO_PADS-1:0] io_oeb,
The extra bits are being set to zero which causes the conb cell to be added and creates the drc error. The io_oeb signals are set like this in the the default
user_proj_example
Copy code
assign io_oeb = {(14){rst}};
m
Ok sir. I will try the above and let you know the status.
sir how can I remove the abpve warnings. with your suggestion flow completed successfully. But two warnings are coming. How to remove these warnings?
m
Sorry, I don’t know. Anyone know how to get rid of slew and max capacitance warnings? I image it has to do with these settings in
user_proj_example/config.json
.
Copy code
"PL_RESIZER_SETUP_SLACK_MARGIN": 0.4,
    "PL_RESIZER_MAX_SLEW_MARGIN": 50,
    "GLB_RESIZER_MAX_SLEW_MARGIN": 50,
    "GLB_RESIZER_SETUP_SLACK_MARGIN": 0.2,
m
Ok sir
while running simulation using testbench after caravel flow, it is showing an error "No rule to make target". Any solution on how to resolve this error?
Screenshot from 2023-06-26 19-32-11.png
m
Can you post your
verilog/dv/DMT_testbench/Makefile
? Looks like it can’t figure out how to make
DMT_testbench.vcd
. Is that something you need to provide?
m
Makefile
m
What’s
MCW_ROOT
set to? Is there anything in the directory? Did you run
make install_mcw
?
m
no sir. MCW_ROOT set to mgmt_core_wrapper directory sir.
Do I need to run make install_mcw?
m
install_mcw
should have been done as part of
make setup
. If there is nothing in the
MCW_ROOT
directory, you should be able to run
make install_mcw
. Just be sure that
MCW_ROOT
is an absolute directory.
m
Sir, I am unable to run full chip simulation by following the procedure mentioned in the caravel documentation. Is there any other resource from where I can learn how to run full chip simulation?
m
There may have been some changes. Make sure you’re using the most recent versions of the test benches. Also ask here #caravel.