In mpw-4/slot-001, the layout has 35 `EP_gpio_defa...
# lvs
m
In mpw-4/slot-001, the layout has 35
EP_gpio_defaults_block_0403
and 1
EP_gpio_defaults_block
while the verilog netlist has 3
gpio_defaults_block_0403
and 33
gpio_defaults_block
Are these blocks electrically equivalent or is this a non-issue for some other reason?
t
@Mitch Bailey (@Matt Venn): The block is parameterized in RTL verilog, but any parameterization applied in verilog doesn't translate to the gate level (unless that verilog is subsumed into a larger block through synthesis). So to get the user-definable defaults, every different set of parameters passed to the block in RTL verilog has to translate to a new gate-level block in verilog, and a new layout cell, each with a unique name. There is a script in caravel called
scripts/gen_gpio_defaults.py
which needs to be run when the chip top level is assembled, which reads the file
user_defines.v
(there is a default one in
caravel/verilog/rtl
, but if there is one in the user project it is preferred, which is how the user can override the power-on defaults of the GPIO blocks). The script should modify both the gate-level verilog and the layout to create multiple unique versions of the
gpio_defaults_block
for each unique configuration found in
user_defines.v
. If the script has been run correctly and has done its job correctly, then the layout and the gate level verilog should match. So from the above, it looks like the layout was converted with the script, but the gate level verilog wasn't.
m
But this only should affect defaults? So it's not a big issue. Worth opening an issue anyway?
m
Thanks for the response, Tim.
t
@Matt Venn: Yes, it would only affect defaults. But yes, it's worth opening an issue, just to figure out why the GL verilog appears to have reverted back to the original while the layout appears to be correct with respect to applying the script.
m
@Mitch Bailey would you mind? I don't really understand it
m
Ok. I'm looking at mpw-4, slot-002 now. I'll compare the results. Should the issue be on efabless/caravel repo?
m
I think so.
m
So I was using the default
caravel.v
from the caravel repo because I couldn't find that file or the other caravel verilog files in https://foss-eda-tools.googlesource.com/third_party/shuttle/mpw-four/slot-001. @jeffdi Tim says the
caravel.v
file should be automatically modified with
user_project_wrapper
integration based on the values of
USER_CONFIG_GPIO_*_INIT
. Specifically, the instances of
gpio_defaults_block
should be changed to reflect the values of
USER_CONFIG_GPIO_*_INIT
. Also won't
user_id_programming.v
be different for each design too? Are these modified versions of
caravel.v
and
user_id_programming.v
available for designs that have taped out?
I think I found the top
caravel.v
in the
slot-001
repo. Let me try that to see if the `gpio_default_block`s match.
The verilog at
jobs/tapeout/*/outputs/verilog/gl/verilog.v
almost matches the layout. The only difference is gpio 34
Copy code
<   gpio_defaults_block gpio_defaults_block_34 (  #layout
---
>   gpio_defaults_block_0403 gpio_defaults_block_34 (  #verilog
The
0403
in the verilog matches the default
user_defines.v
, but the layout is the default layout which is
0402
.
t
@Mitch Bailey: Yes, the
caravel.v
and
user_id_programming.v
are modified by the script. Note that the magic view of
user_id_programming
has a GDS_FILE property in it, so there is no specific need to touch the layout except for LVS if you don't black-box it. When you say "the only difference is gpio 34", are you referring only to
slot-001
?
@Mitch Bailey: There is a (possibly related) unresolved issue in which all of the ChipIgnite-one chips got manufactured with the default
user_id_programming
block, and so all of them report back a project ID of zero when queried through the housekeeping SPI. I looked at an example project from MPW-two and it looked like the block was modified correctly, so that might have been a one-off error with ChipIgnite-one. Still, I would like to know how it went wrong.
m
@Tim Edwards So far I've checked mpw4
slot-001
and
slot-002
. They both appear to use
gpio_defaults_block
(
0402
) for gpio 34 for some reason.
@Tim Edwards Looking at the
caravel.mag
file for
slot-001
it appears that the instance name for gpio 34 is incorrect.
Copy code
use gpio_defaults_block_0403 gpio_defaults_block_33
timestamp 1638492834
transform 1 0 8367 0 1 388400
box -38 0 6018 2224
use gpio_defaults_block  gpio_defaults_defaults_block_34
gpio 33 has been replaced, but gpio 34 has an extra
defaults_
in the instance name so it's not replaced. I don't know where to create a pull request for this, but I think fixing the instance name should remedy the problem.
@Tim Edwards Logged an issue and created a PR! (but haven't tested.)