Open d-m-bailey opened 5 months ago
I see all eight power supplies in the pin list for the top level cell in the layout-extracted .spice file. What I don't see is any connections to the subcircuits. The HG_KV_top.ext file contains no connection information to either the core or interconnect subcircuits.
@RTimothyEdwards Thanks for the quick response.
This is the top level subckt that I get. Is it the same for you?
If you're using a different setup to extract, could you share that?
.subckt HG_user_analog_project_wrapper wbs_adr_i[10] wbs_dat_i[8] wbs_dat_i[4] wbs_dat_i[11]
+ wbs_dat_i[6] wbs_dat_i[16] wbs_dat_i[1] wbs_sel_i[2] wbs_dat_o[8] wbs_dat_o[13]
+ wbs_dat_o[14] wbs_dat_i[3] wbs_dat_i[10] wbs_dat_i[2] wbs_dat_i[0] wbs_dat_i[12]
+ wbs_adr_i[13] wbs_dat_i[9] wb_rst_i wbs_adr_i[12] wbs_adr_i[0] wbs_dat_o[7] wbs_dat_i[15]
+ wbs_ack_o wbs_adr_i[4] wbs_dat_o[15] wbs_dat_i[14] wbs_adr_i[16] wbs_stb_i wbs_dat_o[0]
+ wbs_adr_i[7] wbs_adr_i[1] wbs_dat_o[3] wbs_adr_i[17] wb_clk_i wbs_cyc_i wbs_dat_o[12]
+ wbs_adr_i[8] wbs_adr_i[11] wbs_dat_i[7] wbs_dat_o[5] wbs_dat_o[9] wbs_dat_o[11]
+ wbs_dat_i[5] wbs_sel_i[1] wbs_sel_i[3] wbs_sel_i[0] wbs_adr_i[9] wbs_adr_i[5] wbs_adr_i[15]
+ wbs_dat_o[6] wbs_adr_i[3] wbs_adr_i[14] wbs_dat_i[13] wbs_dat_o[2] wbs_dat_o[4]
+ wbs_dat_o[1] wbs_dat_o[10] wbs_dat_o[16] wbs_adr_i[2] wbs_adr_i[6] wbs_we_i la_data_in[5]
+ wbs_dat_o[25] wbs_adr_i[20] wbs_dat_o[27] wbs_dat_o[31] la_data_in[2] la_data_out[2]
+ wbs_adr_i[31] wbs_adr_i[18] la_data_in[1] la_data_in[4] la_data_in[3] wbs_adr_i[29]
+ la_oenb[0] wbs_dat_o[20] wbs_dat_i[17] wbs_dat_i[31] wbs_dat_o[26] wbs_dat_i[19]
+ la_data_out[3] wbs_dat_i[18] la_oenb[1] la_oenb[5] wbs_adr_i[26] wbs_dat_o[23] wbs_dat_i[24]
+ la_oenb[4] wbs_adr_i[19] wbs_dat_i[30] wbs_dat_o[24] wbs_adr_i[21] wbs_dat_o[21]
+ wbs_dat_i[27] wbs_adr_i[22] wbs_adr_i[23] la_data_out[0] wbs_dat_i[20] wbs_dat_o[17]
+ wbs_dat_o[18] wbs_dat_o[19] wbs_dat_o[29] wbs_dat_i[22] wbs_dat_i[21] la_oenb[3]
+ wbs_adr_i[30] wbs_adr_i[28] la_data_out[5] wbs_dat_o[30] wbs_adr_i[25] wbs_dat_i[28]
+ wbs_dat_i[25] wbs_dat_o[22] wbs_dat_o[28] wbs_dat_i[23] la_data_out[4] la_data_out[1]
+ wbs_dat_i[26] wbs_dat_i[29] la_oenb[2] wbs_adr_i[24] la_data_in[0] wbs_adr_i[27]
+ la_data_out[25] la_data_out[20] la_data_out[7] la_data_in[19] la_oenb[6] la_data_in[12]
+ la_data_in[11] la_oenb[9] la_data_out[22] la_oenb[14] la_data_out[19] la_oenb[25]
+ la_data_in[17] la_oenb[15] la_oenb[13] la_data_in[23] la_data_out[17] la_data_in[20]
+ la_data_in[24] la_data_out[16] la_data_in[16] la_oenb[23] la_oenb[20] la_data_out[21]
+ la_data_out[8] la_data_in[13] la_data_out[15] la_data_in[6] la_data_out[11] la_data_out[10]
+ la_data_in[9] la_data_in[8] la_oenb[17] la_data_in[7] la_oenb[8] la_data_in[26]
+ la_oenb[7] la_oenb[16] la_data_in[25] la_oenb[24] la_oenb[21] la_oenb[22] la_data_out[24]
+ la_data_in[14] la_data_out[23] la_data_out[13] la_data_out[6] la_oenb[10] la_data_in[15]
+ la_data_out[18] la_oenb[18] la_data_out[9] la_oenb[11] la_data_in[18] la_oenb[19]
+ la_data_in[21] la_data_out[14] la_oenb[12] la_data_in[22] la_data_in[10] la_data_out[12]
+ la_data_out[42] la_data_out[45] la_data_out[46] la_data_in[43] la_data_in[44] la_data_in[46]
+ la_oenb[38] la_oenb[37] la_oenb[40] la_data_in[31] la_data_out[30] la_oenb[41] la_oenb[42]
+ la_oenb[43] la_data_in[27] la_data_in[28] la_oenb[44] la_data_in[30] la_data_in[32]
+ la_data_in[35] la_data_in[34] la_data_in[39] la_oenb[26] la_oenb[28] la_data_out[43]
+ la_oenb[30] la_oenb[31] la_data_out[40] la_oenb[32] la_data_in[37] la_oenb[39] la_oenb[33]
+ la_oenb[34] la_oenb[35] la_data_in[41] la_oenb[36] la_data_out[29] la_data_out[33]
+ la_data_out[44] la_oenb[45] la_oenb[29] la_data_out[34] la_data_in[45] la_data_out[37]
+ la_oenb[46] la_data_in[29] la_data_out[31] la_data_out[32] la_data_in[40] la_data_in[38]
+ la_data_out[39] la_data_out[26] la_data_out[35] la_data_out[41] la_data_in[42] la_data_out[36]
+ la_data_out[38] la_data_in[33] la_oenb[27] la_data_out[27] la_data_out[28] la_data_in[36]
+ la_data_out[54] la_data_in[58] la_oenb[66] la_data_out[63] la_oenb[61] la_data_out[51]
+ la_oenb[50] la_data_out[64] la_data_in[55] la_data_in[64] la_data_out[55] la_data_in[65]
+ la_oenb[59] la_data_out[67] la_data_in[60] la_data_in[48] la_data_out[59] la_oenb[63]
+ la_data_out[50] la_data_out[49] la_data_in[63] la_data_in[62] la_data_in[51] la_oenb[47]
+ la_oenb[48] la_oenb[49] la_oenb[51] la_oenb[52] la_oenb[60] la_oenb[53] la_data_in[53]
+ la_oenb[55] la_oenb[54] la_data_in[66] la_oenb[58] la_oenb[62] la_oenb[64] la_oenb[65]
+ la_data_in[47] la_data_in[49] la_data_in[54] la_data_in[50] la_data_in[61] la_data_in[52]
+ la_data_out[53] la_data_in[56] la_data_in[57] la_data_in[59] la_data_out[47] la_data_out[56]
+ la_oenb[56] la_data_out[57] la_data_out[52] la_data_out[58] la_data_out[60] la_data_out[61]
+ la_data_out[62] la_data_out[65] la_data_out[48] la_data_out[66] la_data_in[67] la_oenb[57]
+ la_data_out[84] la_data_in[82] la_data_out[78] la_data_in[68] la_oenb[70] la_oenb[78]
+ la_data_out[68] la_oenb[83] la_oenb[81] la_oenb[72] la_data_out[70] la_data_out[69]
+ la_data_in[83] la_oenb[80] la_data_out[85] la_data_out[86] la_data_out[82] la_oenb[87]
+ la_oenb[76] la_oenb[67] la_data_in[72] la_data_out[79] la_data_out[83] la_data_out[74]
+ la_data_in[71] la_oenb[73] la_data_out[87] la_data_in[73] la_data_in[75] la_data_out[80]
+ la_oenb[69] la_data_in[77] la_data_in[74] la_data_in[78] la_data_in[79] la_data_in[81]
+ la_data_in[84] la_data_in[85] la_data_in[86] la_data_in[87] la_data_in[69] la_oenb[68]
+ la_oenb[71] la_oenb[74] la_oenb[75] la_oenb[77] la_oenb[84] la_oenb[85] la_oenb[86]
+ la_data_in[70] la_data_out[71] la_data_out[72] la_data_out[73] la_data_out[75] la_oenb[82]
+ la_data_out[76] la_data_out[77] la_data_out[81] la_data_in[76] la_oenb[79] la_data_in[80]
+ la_oenb[95] la_data_in[105] la_data_out[96] la_data_out[92] la_data_in[97] la_oenb[101]
+ la_data_in[91] la_data_in[88] la_data_in[101] la_data_out[95] la_oenb[89] la_oenb[91]
+ la_data_out[91] la_data_out[89] la_data_out[105] la_data_out[88] la_oenb[88] la_oenb[105]
+ la_data_in[89] la_oenb[93] la_oenb[107] la_oenb[103] la_data_out[98] la_oenb[106]
+ la_data_out[90] la_oenb[104] la_oenb[102] la_data_in[103] la_data_in[95] la_oenb[99]
+ la_data_out[97] la_data_out[108] la_data_out[107] la_data_in[104] la_data_in[107]
+ la_data_out[100] la_data_out[94] la_oenb[100] la_data_in[92] la_data_out[99] la_data_out[106]
+ la_oenb[90] la_oenb[92] la_oenb[94] la_oenb[96] la_oenb[97] la_oenb[98] la_data_in[102]
+ la_data_in[106] la_data_in[108] la_data_in[100] la_data_in[90] la_data_in[93] la_data_in[94]
+ la_data_in[96] la_data_in[98] la_data_in[99] la_data_out[102] la_data_out[101] la_data_out[103]
+ la_data_out[104] la_data_out[93] la_data_out[119] la_data_out[125] user_clock2 la_data_in[115]
+ user_irq[2] la_data_out[117] la_data_in[123] la_data_out[124] la_data_out[115] la_oenb[126]
+ la_data_out[120] la_data_out[114] la_data_in[126] la_data_out[111] user_irq[1] la_oenb[123]
+ la_data_out[123] la_data_in[116] la_data_out[116] la_data_out[122] la_data_out[126]
+ la_data_out[127] la_data_out[109] la_oenb[114] la_oenb[110] la_data_in[111] la_oenb[118]
+ la_oenb[117] la_data_out[121] la_data_out[118] la_data_in[127] user_irq[0] la_data_in[125]
+ la_oenb[127] la_data_in[119] la_data_in[112] la_oenb[111] la_data_in[121] la_data_out[113]
+ la_data_in[120] la_data_in[122] la_data_in[110] la_data_out[110] la_oenb[124] la_oenb[113]
+ la_oenb[116] la_oenb[120] la_oenb[112] la_data_in[109] la_oenb[122] la_data_in[113]
+ la_data_out[112] la_oenb[125] la_data_in[114] la_data_in[124] la_oenb[115] la_oenb[109]
+ la_data_in[118] la_oenb[121] la_oenb[108] la_data_in[117] la_oenb[119] io_analog[1]
+ gpio_analog[2] io_clamp_high[0] io_out[13] io_out[12] io_oeb[13] io_oeb[9] io_out[10]
+ io_in_3v3[9] io_in_3v3[10] vccd2 io_oeb[10] io_in_3v3[12] gpio_noesd[4] io_in_3v3[11]
+ io_analog[2] io_out[9] gpio_analog[6] io_in[13] io_analog[3] gpio_analog[4] gpio_noesd[2]
+ io_oeb[11] gpio_analog[5] io_in[10] gpio_analog[3] io_in_3v3[13] io_analog[0] io_in[9]
+ io_out[11] io_in[11] io_in[12] gpio_noesd[10] io_oeb[12] gpio_noesd[6] io_analog[8]
+ io_in_3v3[15] io_out[14] gpio_analog[10] io_oeb[14] io_analog[9] io_in[17] gpio_analog[9]
+ io_analog[10] io_analog[7] io_in[16] io_in_3v3[16] io_oeb[15] io_oeb[16] io_oeb[17]
+ gpio_noesd[0] io_out[16] io_clamp_low[2] io_in_3v3[17] io_in_3v3[14] gpio_analog[7]
+ io_out[17] gpio_analog[8] io_in[15] io_in[14] io_analog[5] io_out[15] io_out[18]
+ gpio_noesd[15] gpio_noesd[13] io_in[26] gpio_analog[17] io_in[24] io_in[23] io_in_3v3[23]
+ gpio_analog[14] io_in[22] io_oeb[26] io_in[18] io_out[22] vssd2 io_in_3v3[21] io_oeb[23]
+ io_oeb[21] io_oeb[24] io_in_3v3[25] gpio_analog[13] io_in_3v3[26] io_in_3v3[19]
+ io_oeb[20] io_in_3v3[18] gpio_noesd[17] io_in_3v3[20] gpio_noesd[12] gpio_noesd[16]
+ io_out[26] gpio_analog[15] gpio_analog[12] io_out[25] io_out[24] io_in[20] gpio_noesd[11]
+ io_out[23] io_in[25] io_in_3v3[24] gpio_analog[16] gpio_analog[11] io_out[21] io_oeb[18]
+ io_in[19] io_out[20] io_in[21] io_out[19] io_oeb[19] io_in_3v3[22] io_oeb[22] io_oeb[25]
+ io_out[6] io_out[5] io_in_3v3[0] io_oeb[1] io_in[7] io_in[1] io_oeb[3] io_in_3v3[1]
+ io_oeb[7] io_in[5] io_oeb[6] io_in[3] io_out[8] gpio_noesd[14] io_in[2] io_in_3v3[6]
+ io_oeb[0] io_in[0] io_in[6] io_in_3v3[8] io_out[2] io_in_3v3[5] vssd1 io_in[8] io_out[3]
+ io_out[4] io_out[1] io_out[7] io_in_3v3[7] io_oeb[8] io_in_3v3[2] io_in_3v3[3] io_oeb[4]
+ gpio_analog[0] io_in[4] io_oeb[5] io_out[0] io_oeb[2] io_in_3v3[4] gpio_analog[1]
XHG_KV_top_0 la_data_in[30] la_data_in[29] la_data_in[28] la_data_in[27] la_data_in[17]
+ la_data_in[18] la_data_in[23] la_data_in[19] la_data_in[20] la_data_in[31] la_data_in[21]
+ la_data_in[25] la_data_in[22] la_data_in[24] la_data_in[26] la_data_in[68] la_data_out[97]
+ la_data_in[67] la_data_out[102] la_data_in[66] la_data_out[98] la_data_in[65] la_data_in[63]
+ la_data_in[9] la_data_out[99] la_data_in[62] la_data_in[64] la_data_in[8] la_data_out[100]
+ la_data_in[80] la_data_in[81] la_data_in[61] la_data_in[7] la_data_out[101] la_data_in[60]
+ la_data_in[6] la_data_in[59] la_data_in[5] la_data_in[4] la_data_in[58] la_data_in[118]
+ la_data_in[41] la_data_in[3] gpio_analog[17] la_data_in[119] la_data_in[40] la_data_in[57]
+ la_data_in[2] la_data_in[120] la_data_in[39] la_data_in[56] la_data_in[1] la_data_in[38]
+ la_data_in[55] la_data_in[0] la_data_in[37] la_data_in[54] la_data_in[82] la_data_in[16]
+ la_data_in[36] la_data_in[53] gpio_analog[2] la_data_in[35] la_data_in[52] la_data_in[34]
+ la_data_in[51] gpio_analog[16] la_data_in[33] la_data_in[50] la_data_in[32] la_data_in[49]
+ la_data_in[48] la_data_in[47] la_data_in[46] la_data_in[45] la_data_in[44] la_data_in[103]
+ la_data_in[15] la_data_in[43] la_data_in[104] gpio_noesd[6] la_data_in[14] la_data_in[42]
+ la_data_in[105] la_data_in[13] la_data_in[79] la_data_in[78] la_data_in[12] la_data_in[112]
+ la_data_in[11] la_data_in[77] la_data_in[76] la_data_in[10] io_analog[5] gpio_noesd[0]
+ la_data_in[75] gpio_noesd[14] la_data_in[74] la_data_in[73] vccd2 la_data_in[72]
+ la_data_in[71] gpio_noesd[10] la_data_in[70] la_data_in[69] io_clamp_low[2] io_clamp_high[0]
+ HG_KV_top
.ends
@d-m-bailey : No, I got something completely different. And all I did was to use your "run_extract" as stated. Your output looks "more correct" in the sense that there are proper connections from "KV_top" to the wrapper. My KV_top had only a few ports and they were all disconnected from the wrapper. Yet the wrapper had all ports. I think if I could get it into the state you got above, then I could figure out why the other power ports go missing.
Is the magic version the same? 8.3.456
Does the top of the ext.log
file look like this?
BEGIN: Mon Jan 8 02:49:26 2024
Extracting as analog. Top ports connected by name.
Magic 8.3 revision 456 - Compiled on Sat Jan 6 13:53:23 PST 2024.
Starting magic under Tcl interpreter
Using the terminal as the console.
Using NULL graphics device.
Processing system .magicrc file
Sourcing design magicrc.well for technology sky130B ...
2 Magic internal units = 1 Lambda
Input style sky130(): scaleFactor=2, multiplier=2
The following types are not handled by extraction and will be treated as non-electrical types:
ubm
Scaled tech values by 2 / 1 to match internal grid scaling
Loading "gds.analog.spice.tcl" from command line.
Extracting with top ports connected by name (analog)
CIF input style is now "sky130()"
Flattening {*sky130_fd_pr__*[A-Z]*} *1T1R_backup *1T1R_end *mimcap_stacked *1T1R_2x2_backup *1T1R_2x2_end *mimcap_stacked_57x50 *1T1R_16x16_backup
Extracting HG_user_analog_project_wrapper.gds.gz
Warning: Calma reading is not undoable! I hope that's OK.
Library written using GDS-II Release 6.0
Library name: LIB
@RTimothyEdwards possibly related to this discussion, I'm also seeing missing ports on slot-026 of mpw-7.
Magic 8.3 revision 460
and version 1.0.446-0-gdd7771c
of the tech file.
Here's the test case.
test-ext.tgz
tar xvf test-ext.tgz
cd test-ext
./run_extract
You should get an ext/XN_user_analog_project_wrapper.gds.spice
file that is missing vssa2
and vdda2
at the top level.
These ports exist in the ext/XN_user_analog_project_wrapper.ext
file
port "vssa1" 1037 520594 702340 525394 704800 m3
port "vssa1" 1037 510594 702340 515394 704800 m3
...
port "vssa2" 1135 0 559442 1660 564242 m3
port "vssa2" 1135 0 549442 1660 554242 m3
but are merged without any warning
merge "XN_TL_reram_1t1r_256x256_complete_0/VSS_B" "vssa2"
merge "vssa2" "vssa1"
merge "vssa1" "VSUBS"
I wonder if it has anything to do with extracting using extract unique notopports
.
@d-m-bailey : No, I got something completely different. And all I did was to use your "run_extract" as stated. Your output looks "more correct" in the sense that there are proper connections from "KV_top" to the wrapper. My KV_top had only a few ports and they were all disconnected from the wrapper. Yet the wrapper had all ports. I think if I could get it into the state you got above, then I could figure out why the other power ports go missing.
The magicrc
file inlcuded in the original test case specifies a tech file that may not be visible on your system. This would cause a default tech file to be used, correct? Maybe that's the reason for the discrepancies. I've corrected the scripts and included the results.
$ tar xzf test-ext2spice.tgz
$ cd test-ext2spice
$ ./run_extract
The tech file is probably an older version. Can you check the tech file version in the extract log that show's the pins extracted?
Using magic version
8.3.456
When extracting
user_analog_project_wrapper
of sky130 mpw-7 slot-013, some of the power ports do not appear in the top level of the final netlist.Ports in the final netlist
vssd1
,vssd2
,vccd2
.No shorts are reported. The
ext
file has all expected 8 ports.These ports maybe unconnected, but they still should show up in the final netlist, right?
To duplicate, download test-ext2spice.tgz
This uses a slightly modified
version 1.0.446-0-gdd7771c
of thesky130B.tech
fileFinal spice netlist will be at
ext/HG_user_analog_project_wrapper.gds.spice
.