Menu

why NGSPICE cant simulate more than 2 pulse voltage source with Xschem?

Help
2024-05-23
2024-05-23
  • Balakrishna

    Balakrishna - 2024-05-23

    i am bud to NGSPICE and Xschem. i created a CMOS full adder symbol using xcshem which works fine two input given as pulse voltage source but when change the third input from const. Voltahe value to pulse. it says "cant find model".

    my netlist:

    ** sch_path: /home/krishna_rk/full_adder/fa_tb.sch
    .subckt fa_tb
    VDD vdd GND 1.8
    Cin cin GND PULSE(1.8 0 0 .1n .1n 10n 20n 8)
    Va a GND PULSE(1.8 0 0 .1n .1n 40n 80n 2)
    Vb b GND PULSE(1.8 0 0 .1n .1n 20n 40n 4)
    x1 sum cout vdd GND cin a b full_adder
    ** begin user architecture code

    .lib /usr/local/share/pdk/sky130A/libs.tech/ngspice/sky130.lib.spice tt
    .tran .02n 40n
    .save all
    .end

    ** end user architecture code
    .ends

    • expanding symbol: full_adder.sym # of pins=7
      ** sym_path: /home/krishna_rk/full_adder/full_adder.sym
      ** sch_path: /home/krishna_rk/full_adder/full_adder.sch
      .subckt full_adder sum cout vdd gnd cin a b
      .ipin a
      .ipin b
      .ipin cin
      .opin cout
      .opin sum
      .ipin vdd
      .ipin gnd
      XM1 net5 b net8 gnd sky130_fd_pr__nfet_01v8 L=0.15 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM2 net6 a net4 vdd sky130_fd_pr__pfet_01v8 L=0.15 W=6 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM3 net5 cin net4 vdd sky130_fd_pr__pfet_01v8 L=0.15 W=4 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM6 net5 b net6 vdd sky130_fd_pr__pfet_01v8 L=0.15 W=6 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM7 net4 b vdd vdd sky130_fd_pr__pfet_01v8 L=0.15 W=4 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM8 net4 a vdd vdd sky130_fd_pr__pfet_01v8 L=0.15 W=6 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM4 net8 a gnd gnd sky130_fd_pr__nfet_01v8 L=0.15 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM5 net7 b gnd gnd sky130_fd_pr__nfet_01v8 L=0.15 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM9 net7 a gnd gnd sky130_fd_pr__nfet_01v8 L=0.15 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM10 net5 cin net7 gnd sky130_fd_pr__nfet_01v8 L=0.15 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM13 net9 a vdd vdd sky130_fd_pr__pfet_01v8 L=0.15 W=4 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM14 net9 b vdd vdd sky130_fd_pr__pfet_01v8 L=0.15 W=4 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM15 net9 cin vdd vdd sky130_fd_pr__pfet_01v8 L=0.15 W=8 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM16 net3 net5 net9 vdd sky130_fd_pr__pfet_01v8 L=0.15 W=4 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM17 net10 a net9 vdd sky130_fd_pr__pfet_01v8 L=0.15 W=8 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM18 net11 b net10 vdd sky130_fd_pr__pfet_01v8 L=0.15 W=8 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM19 net3 cin net11 vdd sky130_fd_pr__pfet_01v8 L=0.15 W=8 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM20 net12 b gnd gnd sky130_fd_pr__nfet_01v8 L=0.15 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM21 net3 net5 net12 gnd sky130_fd_pr__nfet_01v8 L=0.15 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29'
    • pd='2int((nf+1)/2) * (W/nf + 0.29)' ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM22 net12 a gnd gnd sky130_fd_pr__nfet_01v8 L=0.15 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM23 net12 cin gnd gnd sky130_fd_pr__nfet_01v8 L=0.15 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM24 net2 cin gnd gnd sky130_fd_pr__nfet_01v8 L=0.15 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM25 net1 b net2 gnd sky130_fd_pr__nfet_01v8 L=0.15 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM26 net3 a net1 gnd sky130_fd_pr__nfet_01v8 L=0.15 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM27 sum net3 vdd vdd sky130_fd_pr__pfet_01v8 L=0.15 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM28 sum net3 gnd gnd sky130_fd_pr__nfet_01v8 L=0.15 W=1 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM11 cout net5 vdd vdd sky130_fd_pr__pfet_01v8 L=0.15 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      XM12 cout net5 gnd gnd sky130_fd_pr__nfet_01v8 L=0.15 W=1 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' pd='2
      int((nf+1)/2) * (W/nf + 0.29)'
    • ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
      .ends

    .GLOBAL GND
    .end

     
  • Holger Vogt

    Holger Vogt - 2024-05-23
    ** sch_path: /home/krishna_rk/full_adder/fa_tb.sch
    .subckt fa_tb
    VDD vdd GND 1.8
    Cin cin GND PULSE(1.8 0 0 .1n .1n 10n 20n 8) ; <------------------ wrong!
    Va a GND PULSE(1.8 0 0 .1n .1n 40n 80n 2)
    Vb b GND PULSE(1.8 0 0 .1n .1n 20n 40n 4)
    x1 sum cout vdd GND cin a b full_adder
    ** begin user architecture code
    

    The line marked above is wrong. The first letter in an instance line determines the device type. Cin is a capacitor, as the line starts with C.

    Did you mean Vin (to get a voltage source)?

     
    ❤️
    1
  • Balakrishna

    Balakrishna - 2024-05-23

    Hi Holger Vogt,
    Thanks Man, The letter "C" is the error and its solved.

    By the way, Va ,Vb and Cin are voltage source to the input of the full adder. i wanted it to be pulse.
    i need one more help. How do i set compatibility mode for ngspice to "hsa" as specified in https://xschem.sourceforge.io/stefan/xschem_man/tutorial_xschem_sky130.html

                                                                                                                                                         Thank you your time
    
     

    Last edit: Balakrishna 2024-05-23

Log in to post a comment.