-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Gate level verilog modules are horribly broken and unusable #24
Comments
What are some concrete steps we could take to make the GLS modules more usable in order of importance? |
@RTimothyEdwards I don't remember that we worked on the gate level verilog as a deliverable. We could work on this. Will take a look and get back to you. |
@atorkmabrains : I added you because I wasn't sure if you were involved with the standard cell deliverables or not. |
@mkkassem - Can you please look at this with high priority and figure out the pathway forward? |
@RTimothyEdwards @mithro I'll take a look at that and get back to you in the next few hours. |
@QuantamHD , @atorkmabrains : Ideally these should be done in (more or less) the same way as sky130, with a single verilog file for each strength variant and a single verilog file for the base module that is used by all strength variants. e.g., in sky130_fd_sc_hd, file "sky130_fd_sc_hd__and2_1.v" defines module "sky130_fd_sc_hd__and2_1" but includes file "sky130_fd_sc_hd__and2.v" which defines the base module "sky130_fd_sc_hd__and2". Then "sky130_fd_sc_hd__and2.v" includes the functional or behavioral with or without power pins based on ifdefs (FUNCTIONAL and USE_POWER_PINS), and also defines SKY130_FD_SC_HD__AND2_V so that it won't get processed more than once if it is included multiple times. One thing that was done wrong in the sky130 libraries was that the specify blocks were not handled correctly. There is clearly some confusion caused by the terms "functional" and "behavioral". Normally the distinction in verilog is made between "structural" and "behavioral". Generally speaking, if a verilog design has standard cells, then it's not behavioral; the idea of standard cell verilog being called "behavioral" is a bit weird. The general idea here, both for Sky130 and GF180MCU, is that "FUNCTIONAL" means simulation without parasitics, and "not(FUNCTIONAL)" means fully annotated simulation with parasitics (implying that the standard cell has a "specify" section). |
Ideally, all open PDK standard cell libraries (both GF and SkyWater) should have verilog files that look like the following (example using the 2-input AND gate): There is a single file called |
@RTimothyEdwards - that sounds good to me! |
I've previously tried to describe some of this in the doc at https://bit.ly/open-source-pdks-naming (specifically the Recommended Verilog Include Structure section). |
@RTimothyEdwards and @mkkassem I reviewed all requests with regards to this work. I don't believe that was something requested from us to do. I'm just confirming that now. We could update those files. But I believe it could take some time from our end. Please confirm if you would like us to do that. |
I'm also affected by this - trying to run gate level simulation, but getting a bunch of errors about missing |
@RTimothyEdwards looking at your example in #24 (comment) couldn't the "not(FUNCTIONAL)"
Additionally, maybe it would be more readable to have the
|
Would #26 be an acceptable workaround while @RTimothyEdwards suggestions get implemented consistently across all repositories ? It only address the missing |
@proppy : Possibly the |
@RTimothyEdwards Is that still true or we can close this issue? |
If the intent was to follow the standard used by the sky130 PDK, then this is an epic fail. It needs correcting on multiple fronts.
For starters, the standard cell verilog modules make references to modules with a
_func
suffix but do not define such modules anywhere.Unlike the sky130 PDK, the modules are not broken up into base modules (functional and behavioral) plus a single module for each gate strength variant that calls the base modules based on
#ifdef
blocks forFUNCTIONAL
,BEHAVIORAL
, andUSE_POWER_PINS
. The functional module is identical (and therefore redundant) for every gate strength. The functional modules are only unique between strength variants because the wires have been unnecessarily renamed to add the entire verilog module name as a prefix.Each module does not have a surrounding
#ifdef
to prevent it from being defined multiple times if included multiple times.There is an
#ifdef FUNCTIONAL
inside the behavioral verilog module (and not in the functional verilog module!).The text was updated successfully, but these errors were encountered: