Skip to content
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

Added draft PR of generator for strongARM comparator #338

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

utkarsh5086
Copy link

@utkarsh5086 utkarsh5086 commented Sep 19, 2024

A single python file with complete strongARM layout. Four subcells in total: diff_pair, cross_coupled pair and nmos, pmos reset switches. Plan to pick diff_pair and X_coupled pair from the repo in the future. Currently having errors in LVS and trying to debug it.
I will add testbench and automation setup to complete the analog generator.

@utkarsh5086 utkarsh5086 changed the title Create strongARM.py Added draft PR of generator for strongARM comparator Sep 19, 2024
@utkarsh5086
Copy link
Author

Screenshot 2024-09-18 at 9 43 20 PM

@msaligane
Copy link
Member

Can you please describe your design and provide more details in general?

@utkarsh5086 utkarsh5086 marked this pull request as draft September 20, 2024 03:26
@chetanyagoyal
Copy link
Collaborator

I would advise against using smart route for these generators as it not as parameterizable as the "dumb" routes, and parameterization is what we're looking for here. Furthermore please look at routing widths to account for the routes through which more current would flow if the circuit was used


#cross_coupled_load(gf180_mapped_pdk,2,0.5).show()

def mystrongARM(pdk: MappedPDK, diffp_w, diffp_l, ccinv_col, clk_fing, reset_w, reset_l):
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add more parameterization here, for the diffpair transistors' length, width,etc.
also add options for taprings, welltaps and such

lvs_result = sky130_mapped_pdk.lvs_netgen(diffPair,'diffPair')
return diffPair

diffPair(sky130_mapped_pdk,2,0.4).show()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove this line once the PR is ready

Comment on lines +137 to +141
mystrongARM.add_ports(diffp_ref.get_ports_list(), prefix="strongARM_")
mystrongARM.add_ports(cross_couple_ref.get_ports_list(), prefix="strongARM_")
mystrongARM.add_ports(clk_nmos_ref.get_ports_list(), prefix="strongARM_clk_nmos_")
mystrongARM.add_ports(reset_pmos_ref1.get_ports_list(), prefix="strongARM_clk_reset_pmos_r_")
mystrongARM.add_ports(reset_pmos_ref2.get_ports_list(), prefix="strongARM_clk_reset_pmos_l_")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add ports after all the routing has been done, it is beneficial to include the routes' ports as well

mystrongARM.add(cross_couple_ref)


clk_nmos = nmos(pdk, width=4, fingers=clk_fing, rmult=1, with_substrate_tap=False, with_dnwell=False)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why did you decide default width to be 4 micron?

@utkarsh5086
Copy link
Author

utkarsh5086 commented Oct 3, 2024

Tried to clean lvs on diffPair subblock, lvs fails pin matching
LVS Error:
Screenshot 2024-10-02 at 10 10 14 PM

@msaligane
Copy link
Member

@utkarsh5086 Are you still stuck here?

@utkarsh5086
Copy link
Author

I cleared the symmetry errors in LVS. I also passed LVS manually editing the netlist. I will make some changes to the LVS script and add them here.

@chetanyagoyal
Copy link
Collaborator

any updates on this @utkarsh5086?

)
return diffPair_netlist

def diffPair(pdk: MappedPDK, width, length):
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can the existing diff pair component be used for this? Or alternatively, modify it slightly to make it more customizable to work with this?


#cross_coupled_load(gf180_mapped_pdk,2,0.5).show()

def mystrongARM(pdk: MappedPDK, diffp_w, diffp_l, ccinv_col, clk_fing, reset_w, reset_l):
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does the strongarm latch have a netlist?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants