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

Chipathon2024 saltychip #347

Open
wants to merge 22 commits into
base: main
Choose a base branch
from

Conversation

tsengs0
Copy link

@tsengs0 tsengs0 commented Nov 3, 2024

Current progress of the team SaltyChip

  1. transmission gate: the first version of the layout generation is completed but some modifications/improvements are needed.
  2. MIM capacitor array: the layout is still under development.

@chetanyagoyal
Copy link
Collaborator

Can you please convert this to a draft PR is work is yet to be completed?

@tsengs0 tsengs0 marked this pull request as draft November 8, 2024 12:53
@tsengs0
Copy link
Author

tsengs0 commented Nov 8, 2024

This work is not completed yet, so we converted this pull request to a draft.

…cal layout (form of parallel-gate transistors)
…f the TG's PMOS and NMOS

Next step: to add the I/O ports for the upcoming LVS work
…te's GDSII image, according to the main layout work in "transmission_gate.py" and "eval.py".
@alibillalhammoud
Copy link
Collaborator

Hey guys, thanks for the contribution please check out

def mimcap_array(pdk: MappedPDK, rows: int, columns: int, size: tuple[float,float] = (5.0,5.0), rmult: Optional[int]=1) -> Component:

    Fix the DRC error by removing the deep N-well on the NMOS of the inv cell which
    is used as the control component for the underlying transmission gate
Modify the PCell of the transmission gate composed of a basic TG cell and INV cell.
The Magis DRC per basic cell and that of the top-level block have been performed w/o error
    Modify the layout of both transmission gate and inverter
    in a interdititized fashion so as to contruct a CDAC switch

    Status: W.I.P.
:
    Complete the first prototyping layout of the transmission gate in an interdigitized fashion
    #Status:Magic DRC passed, netlist generation for the LVS is still working in progress
    #PCell status: W.I.P.
    #User manual about the PCell: W.I.P.
    #Completion date (expected): 23.Nov.2024
    Add the directory of building the layout of transmission-gate PCell
    with GDS, Magic DRC and LVS results
@tsengs0 tsengs0 marked this pull request as ready for review November 24, 2024 19:21
@tsengs0
Copy link
Author

tsengs0 commented Nov 24, 2024

We have added our working directory of the transmission gate, so we would like make a pull request for the PR draft of our work.
The description about the PCell is in the README.md under the directory transmission_gate.

Layout generated by using glayout

Three GDS of PCell layout is generated as depicted below.

  • Transmission gate with W/L=2um / 0.15um for all PMOS and NMOS
    tg_W2_L

  • Transmission gate with W/L=12um / 0.15um for all PMOS and NMOS
    tg_W12_L

  • Transmission gate with W/L=24um / 0.15um for all PMOS and NMOS

tg_W24_L

Progress

  • Magic DRC: clean without error
  • LVS: pin mismatched has not been resolved yet. We faced a difficulty in directly generating a correct netlist using the glayout and also none of us is familiar with the Netgen tool, so the netlist generation and LVS error fixing are still ongoing.

Failed LVS report (corresponded to the design of W/L=12 um / 0.15 um)

Circuit 1 cell sky130_fd_pr__pfet_01v8 and Circuit 2 cell sky130_fd_pr__pfet_01v8 are black boxes.
Warning: Equate pins:  cell sky130_fd_pr__pfet_01v8 is a placeholder, treated as a black box.
Warning: Equate pins:  cell sky130_fd_pr__pfet_01v8 is a placeholder, treated as a black box.

Subcircuit pins:
Circuit 1: sky130_fd_pr__pfet_01v8         |Circuit 2: sky130_fd_pr__pfet_01v8         
-------------------------------------------|-------------------------------------------
1                                          |1                                          
2                                          |2                                          
3                                          |3                                          
4                                          |4                                          
---------------------------------------------------------------------------------------
Cell pin lists are equivalent.
Device classes sky130_fd_pr__pfet_01v8 and sky130_fd_pr__pfet_01v8 are equivalent.

Circuit 1 cell sky130_fd_pr__nfet_01v8 and Circuit 2 cell sky130_fd_pr__nfet_01v8 are black boxes.
Warning: Equate pins:  cell sky130_fd_pr__nfet_01v8 is a placeholder, treated as a black box.
Warning: Equate pins:  cell sky130_fd_pr__nfet_01v8 is a placeholder, treated as a black box.

Subcircuit pins:
Circuit 1: sky130_fd_pr__nfet_01v8         |Circuit 2: sky130_fd_pr__nfet_01v8         
-------------------------------------------|-------------------------------------------
1                                          |1                                          
2                                          |2                                          
3                                          |3                                          
4                                          |4                                          
---------------------------------------------------------------------------------------
Cell pin lists are equivalent.
Device classes sky130_fd_pr__nfet_01v8 and sky130_fd_pr__nfet_01v8 are equivalent.

Class tg_cell_471429cf (0):  Merged 6 parallel devices.
Subcircuit summary:
Circuit 1: tg_cell_471429cf                |Circuit 2: tg_cell_471429cf                
-------------------------------------------|-------------------------------------------
sky130_fd_pr__pfet_01v8 (6->3)             |sky130_fd_pr__pfet_01v8 (4->1) **Mismatch* 
sky130_fd_pr__nfet_01v8 (6->3)             |sky130_fd_pr__nfet_01v8 (4->1) **Mismatch* 
Number of devices: 6 **Mismatch**          |Number of devices: 2 **Mismatch**          
Number of nets: 10 **Mismatch**            |Number of nets: 6 **Mismatch**             
---------------------------------------------------------------------------------------
NET mismatches: Class fragments follow (with fanout counts):
Circuit 1: tg_cell_471429cf                |Circuit 2: tg_cell_471429cf                

---------------------------------------------------------------------------------------
Net: w_n715_603#                           |Net: VDD                                   
  sky130_fd_pr__pfet_01v8/4 = 3            |  sky130_fd_pr__pfet_01v8/4 = 1            
                                           |                                           
Net: a_n877_n684#                          |Net: VSS                                   
  sky130_fd_pr__nfet_01v8/4 = 3            |  sky130_fd_pr__nfet_01v8/4 = 1            
---------------------------------------------------------------------------------------
Netlists do not match.

Subcircuit pins:
Circuit 1: tg_cell_471429cf                |Circuit 2: tg_cell_471429cf                
-------------------------------------------|-------------------------------------------
Cell pin lists are equivalent.
Device classes tg_cell_471429cf and tg_cell_471429cf are equivalent.

Final result: Netlists do not match.

Copy link
Collaborator

@alibillalhammoud alibillalhammoud left a comment

Choose a reason for hiding this comment

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

thanks for the PR. LGTM

Copy link
Collaborator

@alibillalhammoud alibillalhammoud left a comment

Choose a reason for hiding this comment

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

thanks for the PR. LGTM

model_pmos = pdk.models['pfet']
model_nmos = pdk.models['nfet']
print(f"model_pmos: {model_pmos}")
source_netlist = """.subckt {circuit_name} {nodes} """ + f'l={length} w={width} m={mtop} ' + """
Copy link
Collaborator

Choose a reason for hiding this comment

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

You do not need to write the spice for the netlist. It can be constructed using the spice of the sub-devices (FETs). Refer to

def opamp_output_stage_netlist(pdk: MappedPDK, output_amp_fet_ref: ComponentReference, biasParams: list) -> Netlist:

Copy link
Author

Choose a reason for hiding this comment

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

We have rewritten the function to generate the SPICE netlist and got LVS passed for the transmission gate Pcell. The revision is shown on the commit: d9c2346

@harshkhandeparkar
Copy link
Collaborator

harshkhandeparkar commented Jan 21, 2025

@tsengs0 did you make the changes requested in the previous review? It was marked as resolved but no commit was pushed.

@tsengs0
Copy link
Author

tsengs0 commented Jan 29, 2025

@tsengs0 did you make the changes requested in the previous review? It was marked as resolved but no commit was pushed.

Sorry, I forgot to request a change. I will commit and push our latest revision by this week.

    1) Modify the transmission gate Pcell and its netlist generation for DRC free and LVS free
    2) Create the Pcell layout of the 1-bit CDAC switch and 6-bit
    3) Create the Pcell layout of the MIM capacitor array (not programmable/parameterisable yet)

    Status:
        1) Transmission gate Pcell: DRC free, LVS free
            1.a) DRC free
            1.b) LVS free
            1.c) Testbench for post-layout simulation: W.I.P.
        2) 1-bit CDAC switch Pcell
            2.a) DRC free
            2.b) LVS free
            2.c) Testbench for post-layout simulation: W.I.P.
        3) MIM capacitor array
            3.a) DRC free
            3.b) LVS: W.I.P.
        4) 6-bit capacitive DAC: T.B.D.
@tsengs0 tsengs0 marked this pull request as draft February 28, 2025 15:07
@tsengs0
Copy link
Author

tsengs0 commented Feb 28, 2025

Really sorry for late update since we were struggling with the LVS error for a long time. But now we can successfully pass LVS

In our latest update, we separate our work into two directries:

  1. glayout/flow/blocks/elementary/transmission_gate
  2. glayout/flow/blocks/composite/cdac

The first folder contributes the transmission gate Pcell where both DRC and LVS check are passed, and we are going to build the testbech for the post-layout simulation. On the other hand, the second folder is to generate the layout of the 1-bit CDAC switch, MIM capacitor array and 6-bit capacitive DAC (as the top level of our team's final output). So far, we only complete the layout of 1-bit CDAC switch with DRC and LVS free.

@tsengs0 tsengs0 marked this pull request as ready for review February 28, 2025 15:22
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