Good morning, I have a question about the generati...
# caravel
l
Good morning, I have a question about the generation of the PDN. How can I be sure that the macros have been properly connected to the power supply? The flow completes successfully, but if I look at the PDN log file, it seems that they haven't been connected.
Moreover, this result was obtained using the caravel_user_project, and I tried a similar experiment using OpenLane, but the result is different. How is this possible?
m
I’m not sure what you mean by
caravel_user_project
vs
OpenLane
. By OpenLane do you mean
flow.tcl
? With
caravel_user_project
, you execute
make <cellname>
, and this runs a version of openlane specified in the
Makefile
. If this version of openlane is different from the version of openlane that you’re running
flow.tcl
, then you might get different results. It looks like you’re using the proprietary sram macros. Are you following the instructions here?
l
Yes, I followed those instructions, and I also had to make some modifications because following the basic tutorial step by step did not work. Then I adapted it to my design.
Yes I mean flow.tcl
The pdn.tcl is the same for both, so I don't understand why I'm obtaining different results
Then I see that checks are often disabled. How can I know if the final output of my design will actually be manufacturable or not, and if it will work?
m
@Luca Martis I have not run any LVS on designs with abstracted memory. @Marwan Abbas Do you know who would be able to respond to this?
m
@Luca Martis what are the modifications you needed to make? @Mitch Bailey We'll need to discuss the LVS more, I'm not sure how it's planned to run.
👍 1
l
For example I don't want to communicate through the Wishbone bus.
But my main question is, how is it possible for the system to work if there are errors in the LVS? In the config file, it is disabled, but looking at the log, errors are present.
m
Okay, that shouldn't be a problem, the wishbone controller is just there as an example, it is also soft, so you don't have to use it.
The LVS issue we'll have to get back to you about it.
l
But then, can these memories be used or not?
These errors are present without having made any modifications.
m
Yes, your issue is there because the memories are abstracted, we run LVS after the final integration of the actual commercial SRAM (in the tapeout flow). What I'm checking is the ability to run with the macro abstracted. But you should be fine and if we catch anything after integration you will be notified, our team is dedicated to make sure that the integration is correct and that your design doesn't have issues with the integration. Ofcourse I know you'd like to run LVS yourself and that's what I'm checking, I'll get back to you ASAP.
l
So, if I wanted to implement this module, for example, where four memories are used together, is there no way to know if it will work or not?
config.json
macro.cfg
m
Do you have this on an efabless repo? can you give me access to it if you have the generated files uploaded it would be easier to assist you
Also, looping in @Anton Maurovic (efabless support) for further support.
l
@Marwan Abbas I just created it.
m
Can you please send us the URL?
m
@Anton Maurovic (efabless support) @Mitch Bailey we need to take a look at this please
Hey @Luca Martis Can you please try to do this in your openlane config file:
Copy code
"MAGIC_EXT_USE_GDS": false,
"QUIT_ON_ILLEGAL_OVERLAPS": false,
l
Yes
What change ?
m
This will make the LVS extract the lef file instead of the GDS, the SRAM GDS is actually empty because it's an abstract macro (because it's closed source) so when it tried to extract it, it doesn't find any cells, so it fails LVS.
l
Ok, and then what I expect to see ?
No mismatch in LVS log ?
m
Yes, I just tried it on our example design and it passed LVS
l
Perfect, so the macro generated can be produced ?
m
Yes, in tapeout the SRAM that you see without cells now in your design will be replaced with the actual closed source SRAM macro before sending your design to the foundry
l
Perfect, thank you very much. Sorry for all the questions, but I have more. Were the coordinates I used for generating the obstructions correct?
m
No worries, you can ask as much as you want 🙂 I'm not sure about that one, but we can setup a call and review, I'll probably need to see a gds/lef file to be able to review that.
Would you like to setup a review call?
l
Of course, gladly. Would it be possible next week?
m
Sure thing! I'll send you a link to book a slot shortly.
👀 1
Please let me know if you tried the updated config file, and if it worked.
l
Yes, of course. Right now, another design's flow is finishing. As soon as it's done, I'll send the one with the updated config file.
The flow with the updated config is running. One question that haunts me: if the memories have a maximum frequency of 100MHz, how is it possible that when I run a flow with the memories, I can get values higher than 100MHz?
In the tutorial case, I obtain a max frequency of 1.1 GHz
m
l
It seems that it didn't work.
m
@Luca Martis Can you share your full
lvs.report
file and the
lvs_config.json
file?
l
40-weights_mem.lvs.rpt
lvs_config.json
I didn't find it
m
@Luca Martis thanks. The
lvs_config.json
file may be created when you run precheck. Looks like your results are from openlane’s LVS. The
lvs.rpt
file is just a summary. Can you share the full
39-SRAM_SRAM_1024x32_wb_wrapper.gds.lvs.log
file?
l
40-weights_mem.lef.lvs.log
With the last suggested setting, it changed from gds.lvs to lef.lvs.
m
@Luca Martis One thing I see is a layout port that does not exist in the verilog.
Copy code
Subcircuit pins:
Circuit 1: EF_SRAM_1024x32                 |Circuit 2: EF_SRAM_1024x32                 
-------------------------------------------|-------------------------------------------
...
ScanOutCC                                  |(no matching pin)
Can you verify this on your side? Maybe check the
EF_SRAM_1024x32
lef versus the verilog stub. The sram power does not appear to be connected either.
Copy code
Net: mem0/vnb                                                   
  EF_SRAM_1024x32/vnb = 1 
...
Can you share your
config.json
file?
l
Yes