jitxexamples 2.0.0__tar.gz → 2.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/PKG-INFO +1 -1
  2. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/README.md +5 -1
  3. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js0-setup/JS0_Environment_Setup.md +1 -1
  4. jitxexamples-2.1.0/jumpstart-kits/js4-si-constraints/JS4_SI-Constraints_Runbook.md +125 -0
  5. jitxexamples-2.1.0/jumpstart-kits/js4-si-constraints/README.md +113 -0
  6. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/lint.log +1 -1
  7. jitxexamples-2.1.0/src/jitxexamples/components/connectors/wurth_elektronik_60312202114514.py +142 -0
  8. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/power_switchmode/texas_instruments_TPS62933DRLR.py +3 -3
  9. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/demos/si_bga_optimization/bga_escape.py +10 -4
  10. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/demos/si_bga_optimization/substrate.py +0 -1
  11. jitxexamples-2.1.0/src/jitxexamples/jumpstart_kits/js4_si_constraints/__init__.py +14 -0
  12. jitxexamples-2.1.0/src/jitxexamples/jumpstart_kits/js4_si_constraints/constraint.py +182 -0
  13. {jitxexamples-2.0.0/src/jitxexamples/jumpstart_kits/js4_fpga_lpddr4x → jitxexamples-2.1.0/src/jitxexamples/jumpstart_kits/js4_si_constraints}/main.py +37 -22
  14. jitxexamples-2.1.0/src/jitxexamples/jumpstart_kits/js4_si_constraints/models.py +138 -0
  15. jitxexamples-2.1.0/src/jitxexamples/jumpstart_kits/js4_si_constraints/proof.py +150 -0
  16. jitxexamples-2.1.0/src/jitxexamples/jumpstart_kits/vp1002_lpddr4x/__init__.py +15 -0
  17. {jitxexamples-2.0.0/src/jitxexamples/jumpstart_kits/js4_fpga_lpddr4x → jitxexamples-2.1.0/src/jitxexamples/jumpstart_kits/vp1002_lpddr4x}/bundles.py +6 -6
  18. jitxexamples-2.0.0/src/jitxexamples/jumpstart_kits/js4_fpga_lpddr4x/fpga.py → jitxexamples-2.1.0/src/jitxexamples/jumpstart_kits/vp1002_lpddr4x/circuit.py +16 -17
  19. jitxexamples-2.1.0/src/jitxexamples/jumpstart_kits/vp1002_lpddr4x/package_delays.py +156 -0
  20. jitxexamples-2.1.0/src/jitxexamples/jumpstart_kits/vp1002_lpddr4x/package_delays_synthetic.csv +169 -0
  21. jitxexamples-2.1.0/src/jitxexamples/jumpstart_kits/vp1002_lpddr4x/pinout.py +182 -0
  22. jitxexamples-2.1.0/src/jitxexamples/jumpstart_kits/vp1002_lpddr4x/proof.py +159 -0
  23. jitxexamples-2.1.0/src/jitxexamples/patterns/board_ground_pours.py +113 -0
  24. jitxexamples-2.1.0/src/jitxexamples/patterns/code_route_basics.py +248 -0
  25. jitxexamples-2.1.0/src/jitxexamples/patterns/fenced_pour_outline.py +276 -0
  26. jitxexamples-2.1.0/src/jitxexamples/patterns/hex_bga_escape.py +502 -0
  27. jitxexamples-2.1.0/src/jitxexamples/patterns/layout_bga_escape.py +271 -0
  28. jitxexamples-2.1.0/src/jitxexamples/patterns/layout_cpwg_two_row_fence.py +444 -0
  29. jitxexamples-2.1.0/src/jitxexamples/patterns/layout_default_rules.py +214 -0
  30. jitxexamples-2.1.0/src/jitxexamples/patterns/layout_diff_pair_escape.py +238 -0
  31. jitxexamples-2.1.0/src/jitxexamples/patterns/layout_edge_and_cutout.py +102 -0
  32. jitxexamples-2.1.0/src/jitxexamples/patterns/layout_heavy_copper_layer.py +381 -0
  33. jitxexamples-2.1.0/src/jitxexamples/patterns/layout_qfn_escape.py +357 -0
  34. jitxexamples-2.1.0/src/jitxexamples/patterns/layout_routing_structure_by_tag.py +123 -0
  35. jitxexamples-2.1.0/src/jitxexamples/patterns/layout_sensitive_net_clearance.py +116 -0
  36. jitxexamples-2.1.0/src/jitxexamples/patterns/layout_stitched_pour.py +258 -0
  37. jitxexamples-2.1.0/src/jitxexamples/patterns/layout_thermal_classes.py +239 -0
  38. jitxexamples-2.1.0/src/jitxexamples/patterns/qfn_thermal_and_power_fanout.py +421 -0
  39. jitxexamples-2.1.0/src/jitxexamples/patterns/rf_connector_launch.py +482 -0
  40. jitxexamples-2.1.0/src/jitxexamples/patterns/serpentine_sections.py +351 -0
  41. jitxexamples-2.1.0/src/jitxexamples/patterns/wilkinson_tree.py +959 -0
  42. jitxexamples-2.1.0/test.log +797 -0
  43. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_bga_optimization_demo.py +16 -0
  44. jitxexamples-2.1.0/tests/test_board_ground_pours.py +190 -0
  45. jitxexamples-2.1.0/tests/test_code_route_basics.py +299 -0
  46. jitxexamples-2.1.0/tests/test_fenced_pour_outline.py +454 -0
  47. jitxexamples-2.1.0/tests/test_hex_bga_escape.py +454 -0
  48. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_js3_mcu_muxing.py +12 -0
  49. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_js3_usb_esd.py +12 -0
  50. jitxexamples-2.1.0/tests/test_js4_si_constraints.py +302 -0
  51. jitxexamples-2.1.0/tests/test_layout_bga_escape.py +231 -0
  52. jitxexamples-2.1.0/tests/test_layout_cpwg_two_row_fence.py +451 -0
  53. jitxexamples-2.1.0/tests/test_layout_default_rules.py +215 -0
  54. jitxexamples-2.1.0/tests/test_layout_diff_pair_escape.py +261 -0
  55. jitxexamples-2.1.0/tests/test_layout_edge_and_cutout.py +103 -0
  56. jitxexamples-2.1.0/tests/test_layout_heavy_copper_layer.py +337 -0
  57. jitxexamples-2.1.0/tests/test_layout_qfn_escape.py +233 -0
  58. jitxexamples-2.1.0/tests/test_layout_routing_structure_by_tag.py +129 -0
  59. jitxexamples-2.1.0/tests/test_layout_sensitive_net_clearance.py +149 -0
  60. jitxexamples-2.1.0/tests/test_layout_stitched_pour.py +314 -0
  61. jitxexamples-2.1.0/tests/test_layout_thermal_classes.py +232 -0
  62. jitxexamples-2.1.0/tests/test_qfn_thermal_and_power_fanout.py +320 -0
  63. jitxexamples-2.1.0/tests/test_rf_connector_launch.py +857 -0
  64. jitxexamples-2.1.0/tests/test_serpentine_sections.py +324 -0
  65. jitxexamples-2.0.0/tests/test_js4_fpga.py → jitxexamples-2.1.0/tests/test_vp1002_lpddr4x.py +34 -66
  66. jitxexamples-2.1.0/tests/test_wilkinson_tree.py +1164 -0
  67. jitxexamples-2.1.0/tests/test_wurth_elektronik_60312202114514.py +96 -0
  68. jitxexamples-2.0.0/jumpstart-kits/js4-fpga-lpddr4x/README.md +0 -34
  69. jitxexamples-2.0.0/jumpstart-kits/js4-fpga-lpddr4x/part1-lpddr4x-pins/JS4_Part1_LPDDR4X-Pin-Assignment_Runbook.md +0 -90
  70. jitxexamples-2.0.0/jumpstart-kits/js4-fpga-lpddr4x/part1-lpddr4x-pins/README.md +0 -86
  71. jitxexamples-2.0.0/parts.lock.json +0 -413
  72. jitxexamples-2.0.0/src/jitxexamples/jumpstart_kits/js4_fpga_lpddr4x/__init__.py +0 -13
  73. jitxexamples-2.0.0/src/jitxexamples/jumpstart_kits/js4_fpga_lpddr4x/constraint.py +0 -64
  74. jitxexamples-2.0.0/src/jitxexamples/jumpstart_kits/js4_fpga_lpddr4x/pinout.py +0 -506
  75. jitxexamples-2.0.0/src/jitxexamples/jumpstart_kits/js4_fpga_lpddr4x/proof.py +0 -176
  76. jitxexamples-2.0.0/src/jitxexamples/patterns/fenced_pour_outline.py +0 -110
  77. jitxexamples-2.0.0/test.log +0 -541
  78. jitxexamples-2.0.0/tests/test_fenced_pour_outline.py +0 -174
  79. jitxexamples-2.0.0/tests/test_js4_pinout.py +0 -453
  80. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/.github/workflows/build.yaml +0 -0
  81. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/.github/workflows/mirror-main.yml +0 -0
  82. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/.github/workflows/release.yaml +0 -0
  83. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/.gitignore +0 -0
  84. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/CLAUDE.md +0 -0
  85. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/build.err +0 -0
  86. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/build.log +0 -0
  87. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/docs/Makefile +0 -0
  88. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/docs/requirements.txt +0 -0
  89. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/docs/source/conf.py +0 -0
  90. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/docs/source/index.rst +0 -0
  91. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/hooks/pre-commit +0 -0
  92. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/README.md +0 -0
  93. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js0-setup/JS0_Reference_Companion.md +0 -0
  94. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js0-setup/JS0_Setup_Runbook.md +0 -0
  95. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js0-setup/README.md +0 -0
  96. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js1-stackup-components/README.md +0 -0
  97. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js1-stackup-components/part1-stackup/JS1_Part1_Fab-Stackup.csv +0 -0
  98. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js1-stackup-components/part1-stackup/JS1_Part1_Stackup-from-Fab-CSV_Runbook.md +0 -0
  99. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js1-stackup-components/part1-stackup/README.md +0 -0
  100. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js1-stackup-components/part2-versal-fpga/JS1_Part2_Reference_Companion.md +0 -0
  101. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js1-stackup-components/part2-versal-fpga/JS1_Part2_Versal-FPGA-from-Pin-File_Runbook.md +0 -0
  102. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js1-stackup-components/part2-versal-fpga/README.md +0 -0
  103. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js2-circuits/JS2_Circuits-from-Datasheet_Runbook.md +0 -0
  104. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js2-circuits/README.md +0 -0
  105. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js3-pin-assignment/README.md +0 -0
  106. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js3-pin-assignment/part1-mcu-muxing/JS3_Part1_MCU-Peripheral-Muxing_Runbook.md +0 -0
  107. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js3-pin-assignment/part1-mcu-muxing/README.md +0 -0
  108. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js3-pin-assignment/part2-usb-esd/JS3_Part2_USB-through-ESD_Runbook.md +0 -0
  109. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/js3-pin-assignment/part2-usb-esd/README.md +0 -0
  110. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/shared/JITX_Architecture_and_Systems_Requirements_v2_0.md +0 -0
  111. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/shared/README.md +0 -0
  112. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/shared/images/JITX_Architecture_Fig1_Deployment.png +0 -0
  113. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/jumpstart-kits/shared/images/JITX_Architecture_FigA1_Workflow.png +0 -0
  114. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/pyproject.toml +0 -0
  115. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/__init__.py +0 -0
  116. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/audio_amps/PAM8302AADCR.py +0 -0
  117. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/battery_managers/BQ24078RGTR.py +0 -0
  118. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/battery_managers/BQ24078RGTR.stp +0 -0
  119. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/battery_managers/PH2_0_2PWB.py +0 -0
  120. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/bjts/BJT_2N3904S_RTKPS.py +0 -0
  121. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/buttons/PTS810SJM250SMTRLFS.py +0 -0
  122. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/buttons/__init__.py +0 -0
  123. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/buttons/xunpu_TS_1088_AR02016.py +0 -0
  124. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/buttons/xunpu_TS_1088_AR02016.stp +0 -0
  125. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/connectors/__init__.py +0 -0
  126. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/connectors/bel_fuse_0826_1G1T_23_F.py +0 -0
  127. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/connectors/hirose_electric_co_ltd_U_FL_R_SMT_10.py +0 -0
  128. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/connectors/molex_2012670005.py +0 -0
  129. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/connectors/myoung_MY_1632_03.py +0 -0
  130. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/connectors/pulse_electronics_JD0_0001NL.py +0 -0
  131. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/connectors/q_j_CR2032_BS_6_1.py +0 -0
  132. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/connectors/q_j_CR2032_BS_6_1.stp +0 -0
  133. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/connectors/weidmuller_LSF_SMT.py +0 -0
  134. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/crystals/HC_49SM12MHz20pF30ppm.py +0 -0
  135. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/crystals/__init__.py +0 -0
  136. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/crystals/seiko_epson_TSX_3225.csv +0 -0
  137. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/crystals/seiko_epson_TSX_3225.py +0 -0
  138. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/crystals/yangxing_tech_X322512MSB4SI.py +0 -0
  139. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/crystals/yangxing_tech_X322512MSB4SI.stp +0 -0
  140. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/digital_isolators/PUSB3FR4.py +0 -0
  141. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/diodes_tvs/__init__.py +0 -0
  142. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/diodes_tvs/littelfuse_SMBJ43CA.py +0 -0
  143. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/diodes_tvs/littelfuse_SMBJ43CA.stp +0 -0
  144. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/ethernet_phys/__init__.py +0 -0
  145. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/ethernet_phys/microchip_KSZ9031RNX.py +0 -0
  146. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/fets_n_ch/BSN20.py +0 -0
  147. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/fets_n_ch/BSS138.py +0 -0
  148. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/fets_n_ch/BSS138.stp +0 -0
  149. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/fets_p_ch/AO3401A.py +0 -0
  150. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/fets_p_ch/AO6409.py +0 -0
  151. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/fets_p_ch/AO6409.stp +0 -0
  152. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/fets_p_ch/NTF6P02T3G.py +0 -0
  153. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/flash/__init__.py +0 -0
  154. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/flash/winbond_W25Q128JVSIQ.py +0 -0
  155. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/flash/winbond_W25Q128JVSIQ.stp +0 -0
  156. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/isolators/__init__.py +0 -0
  157. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/isolators/texas_instruments_ISO1211.py +0 -0
  158. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/led_drivers/IS31FL3236A_QFLS2_TR.py +0 -0
  159. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/leds/KT_0603G.py +0 -0
  160. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/leds/KT_0603G.stp +0 -0
  161. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/leds/KT_0603R.py +0 -0
  162. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/leds/KT_0603W.py +0 -0
  163. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/leds/KT_0603W.stp +0 -0
  164. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/leds/KT_0603Y.py +0 -0
  165. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/leds/WS2816C_2121.py +0 -0
  166. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/leds/__init__.py +0 -0
  167. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/leds/foshan_nationstar_optoelectronics_FM_B2020RGBA_HG.py +0 -0
  168. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/leds/togialed_TJ_S3210SW5TGLC2R_A5.py +0 -0
  169. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/leds/togialed_TJ_S3210SW5TGLC2R_A5.stp +0 -0
  170. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/level_translators/logic_level_shifter.py +0 -0
  171. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/logic/__init__.py +0 -0
  172. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/logic/texas_instruments_SN74HC14PWR.py +0 -0
  173. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/logic/texas_instruments_SN74HC14PWR.stp +0 -0
  174. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/mcus/__init__.py +0 -0
  175. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/mcus/nordic_NRF52840_QIAA_R.py +0 -0
  176. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/mcus/raspberry_pi_RP2040.py +0 -0
  177. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/memories/MT40A1G16TB_062E_F.py +0 -0
  178. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/memories/MT53E1G32D2FW_046_WT_B.py +0 -0
  179. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/memories/W25Q128JVSIQTR.py +0 -0
  180. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/microphones/__init__.py +0 -0
  181. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/microphones/allpower_AP3722AT.py +0 -0
  182. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/opamps/__init__.py +0 -0
  183. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/opamps/stmicroelectronics_TS971ILT.py +0 -0
  184. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/opamps/texas_instruments_OPA189.py +0 -0
  185. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/opamps/texas_instruments_TLV314IDBVR.py +0 -0
  186. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/opamps/texas_instruments_TLV314IDBVR.stp +0 -0
  187. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/passives/RK09K1130AP5.py +0 -0
  188. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/power_linear_regulators/AP2125K_2_8TRG1.py +0 -0
  189. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/power_linear_regulators/NCP1117LPST33T3G.py +0 -0
  190. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/power_linear_regulators/__init__.py +0 -0
  191. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/power_linear_regulators/analog_devices_LT1763CS8.py +0 -0
  192. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/power_linear_regulators/analog_devices_LT1763CS8.stp +0 -0
  193. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/power_linear_regulators/texas_instruments_LM1117LD.py +0 -0
  194. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/power_switches/high_side_switch.py +0 -0
  195. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/power_switchmode/__init__.py +0 -0
  196. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/sensors/__init__.py +0 -0
  197. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/sensors/stmicroelectronics_LIS3DHTR.py +0 -0
  198. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/sensors_distance/VL53L0CXV0DH_1.py +0 -0
  199. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/switches/MK_12C02_G025.py +0 -0
  200. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/timers/__init__.py +0 -0
  201. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/timers/texas_instruments_NE555.py +0 -0
  202. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/transceivers/__init__.py +0 -0
  203. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/transceivers/texas_instruments_SN65HVD1781DR.py +0 -0
  204. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/transceivers/texas_instruments_SN65HVD1781DR.stp +0 -0
  205. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/transistors/__init__.py +0 -0
  206. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/transistors/changjiang_electronics_tech_BSS138.py +0 -0
  207. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/components/transistors/on_semiconductor_NTA4151PT1G.py +0 -0
  208. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/demos/__init__.py +0 -0
  209. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/demos/si_bga_optimization/__init__.py +0 -0
  210. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/demos/si_bga_optimization/constraints.py +0 -0
  211. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/demos/si_bga_optimization/deskew.py +0 -0
  212. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/demos/si_bga_optimization/generic_bga.py +0 -0
  213. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/demos/si_bga_optimization/si_geometry.py +0 -0
  214. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/__init__.py +0 -0
  215. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js1_stackup_components/__init__.py +0 -0
  216. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js1_stackup_components/hdi_stackup/__init__.py +0 -0
  217. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js1_stackup_components/hdi_stackup/board.py +0 -0
  218. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js1_stackup_components/hdi_stackup/main.py +0 -0
  219. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js1_stackup_components/versal_fpga/__init__.py +0 -0
  220. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js1_stackup_components/versal_fpga/bundles.py +0 -0
  221. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js1_stackup_components/versal_fpga/circuit.py +0 -0
  222. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js1_stackup_components/versal_fpga/landpattern.py +0 -0
  223. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js1_stackup_components/versal_fpga/main.py +0 -0
  224. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js1_stackup_components/versal_fpga/symbols.py +0 -0
  225. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js1_stackup_components/versal_fpga/tools/__init__.py +0 -0
  226. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js1_stackup_components/versal_fpga/tools/generate_pinout.py +0 -0
  227. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js1_stackup_components/versal_fpga/xcvp1002.py +0 -0
  228. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js2_circuits/__init__.py +0 -0
  229. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js2_circuits/main.py +0 -0
  230. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js2_circuits/phy.py +0 -0
  231. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js2_circuits/straps.py +0 -0
  232. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js3_pin_assignment/__init__.py +0 -0
  233. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js3_pin_assignment/mcu_muxing/__init__.py +0 -0
  234. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js3_pin_assignment/mcu_muxing/main.py +0 -0
  235. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js3_pin_assignment/mcu_muxing/verify.py +0 -0
  236. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js3_pin_assignment/usb_esd/__init__.py +0 -0
  237. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js3_pin_assignment/usb_esd/esd.py +0 -0
  238. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js3_pin_assignment/usb_esd/main.py +0 -0
  239. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/jumpstart_kits/js3_pin_assignment/usb_esd/verify.py +0 -0
  240. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/parts/example-passives.csv +0 -0
  241. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/patterns/__init__.py +0 -0
  242. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/patterns/pin_lane_polarity.py +0 -0
  243. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/patterns/pin_series_array.py +0 -0
  244. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/patterns/si_bundle_skew.py +0 -0
  245. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/patterns/si_daisy_chain.py +0 -0
  246. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/patterns/si_diff_pair.py +0 -0
  247. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/patterns/si_parts.py +0 -0
  248. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/patterns/si_point_to_point.py +0 -0
  249. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/patterns/si_series_part.py +0 -0
  250. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/patterns/si_signal_constraint.py +0 -0
  251. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/patterns/si_via_model.py +0 -0
  252. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/patterns/si_via_structure.py +0 -0
  253. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/protocols/__init__.py +0 -0
  254. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/protocols/memory/__init__.py +0 -0
  255. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/protocols/memory/ddr4.py +0 -0
  256. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/protocols/memory/ddr4_example.py +0 -0
  257. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/protocols/memory/lpddr4.py +0 -0
  258. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/protocols/memory/lpddr4_example.py +0 -0
  259. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/substrates/__init__.py +0 -0
  260. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/src/jitxexamples/substrates/generic_20layer.py +0 -0
  261. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/test.err +0 -0
  262. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/__init__.py +0 -0
  263. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/conftest.py +0 -0
  264. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/parts.py +0 -0
  265. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_AO3401A.py +0 -0
  266. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_AO6409.py +0 -0
  267. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_AP2125K_2_8TRG1.py +0 -0
  268. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_BJT_2N3904S_RTKPS.py +0 -0
  269. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_BQ24078RGTR.py +0 -0
  270. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_BSN20.py +0 -0
  271. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_BSS138.py +0 -0
  272. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_HC_49SM12MHz20pF30ppm.py +0 -0
  273. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_IS31FL3236A_QFLS2_TR.py +0 -0
  274. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_KT_0603G.py +0 -0
  275. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_KT_0603R.py +0 -0
  276. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_KT_0603W.py +0 -0
  277. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_KT_0603Y.py +0 -0
  278. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_MK_12C02_G025.py +0 -0
  279. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_MT40A1G16TB_062E_F.py +0 -0
  280. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_MT53E1G32D2FW_046_WT_B.py +0 -0
  281. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_NCP1117LPST33T3G.py +0 -0
  282. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_NTF6P02T3G.py +0 -0
  283. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_PAM8302AADCR.py +0 -0
  284. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_PH2_0_2PWB.py +0 -0
  285. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_PTS810SJM250SMTRLFS.py +0 -0
  286. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_PUSB3FR4.py +0 -0
  287. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_RK09K1130AP5.py +0 -0
  288. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_VL53L0CXV0DH_1.py +0 -0
  289. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_W25Q128JVSIQTR.py +0 -0
  290. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_WS2816C_2121.py +0 -0
  291. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_allpower_ap3722at.py +0 -0
  292. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_analog_devices_lt1763cs8.py +0 -0
  293. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_bel_fuse_0826_1g1t_23_f.py +0 -0
  294. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_changjiang_electronics_tech_bss138.py +0 -0
  295. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_docstring_rst.py +0 -0
  296. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_example_passives_packaged.py +0 -0
  297. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_foshan_nationstar_optoelectronics_fm_b2020rgba_hg.py +0 -0
  298. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_high_side_switch.py +0 -0
  299. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_hirose_electric_co_ltd_u_fl_r_smt_10.py +0 -0
  300. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_iso1211.py +0 -0
  301. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_jd0_0001nl.py +0 -0
  302. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_js1_hdi_stackup.py +0 -0
  303. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_js1_versal_fpga.py +0 -0
  304. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_js2_circuits.py +0 -0
  305. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_littelfuse_smbj43ca.py +0 -0
  306. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_lm1117ld.py +0 -0
  307. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_logic_level_shifter.py +0 -0
  308. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_lsf_smt.py +0 -0
  309. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_microchip_ksz9031rnx.py +0 -0
  310. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_molex_2012670005.py +0 -0
  311. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_myoung_my_1632_03.py +0 -0
  312. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_ne555.py +0 -0
  313. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_nordic_nrf52840_qiaa_r.py +0 -0
  314. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_on_semiconductor_nta4151pt1g.py +0 -0
  315. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_opa189.py +0 -0
  316. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_parts_chain.py +0 -0
  317. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_pin_lane_polarity.py +0 -0
  318. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_pin_series_array.py +0 -0
  319. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_protocols_ddr4.py +0 -0
  320. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_protocols_lpddr4.py +0 -0
  321. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_q_j_cr2032_bs_6_1.py +0 -0
  322. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_rp2040.py +0 -0
  323. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_seiko_epson_tsx_3225.py +0 -0
  324. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_si_bundle_skew.py +0 -0
  325. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_si_daisy_chain.py +0 -0
  326. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_si_diff_pair.py +0 -0
  327. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_si_point_to_point.py +0 -0
  328. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_si_series_part.py +0 -0
  329. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_si_signal_constraint.py +0 -0
  330. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_si_via_model.py +0 -0
  331. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_si_via_structure.py +0 -0
  332. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_sn65hvd1781dr.py +0 -0
  333. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_stmicroelectronics_lis3dhtr.py +0 -0
  334. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_stmicroelectronics_ts971ilt.py +0 -0
  335. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_texas_instruments_sn74hc14pwr.py +0 -0
  336. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_texas_instruments_tlv314idbvr.py +0 -0
  337. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_togialed_tj_s3210sw5tglc2r_a5.py +0 -0
  338. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_tps62933drlr.py +0 -0
  339. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_w25q128.py +0 -0
  340. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_xunpu_ts_1088_ar02016.py +0 -0
  341. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/tests/test_yangxing_tech_x322512msb4si.py +0 -0
  342. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/typecheck.err +0 -0
  343. {jitxexamples-2.0.0 → jitxexamples-2.1.0}/typecheck.log +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: jitxexamples
3
- Version: 2.0.0
3
+ Version: 2.1.0
4
4
  Summary: Library of example JITX components, substrates, and demo designs
5
5
  Project-URL: Homepage, https://jitx.com
6
6
  Project-URL: Documentation, https://docs.jitx.com
@@ -69,10 +69,14 @@ at the repo root (published to the docs site), not here.
69
69
  Substrates define reusable PCB construction details. `generic_20layer.py` provides `Generic_Substrate`, a generic 20-layer stackup with dielectric/conductor materials, fabrication constraints, and via classes that designs can use directly or specialize.
70
70
 
71
71
  ### Pattern definitions (`src/jitxexamples/patterns/`)
72
- Patterns are small modules that each show one technique, written to be read; each ends in a design that translates with `jitx design build --dry`. `fenced_pour_outline.py` fences an arbitrary closed outline (an antipad, an RF cavity, a BGA breakout) with vias: a `Tag`, a `design_constraint(...).fence_via(...)` rule on the substrate, and a tagged `Pour` inside a `FencedOutline` circuit whose `GND` port connects to the board's ground net. A `KeepOut` over the same outline, which keeps pours and auto-placed vias out of the opening, is optional; the module adds one. Its design target is `jitxexamples.patterns.fenced_pour_outline.fenced_pour_outline_design`. To see the fence, run a full build (`jitx design build <target>`, which needs the runtime) and open the board with `jitx ui open --board --design <target>`.
72
+ Patterns are small modules that each show one technique, written to be read; each ends in a design that translates with `jitx design build --dry`. `fenced_pour_outline.py` fences an arbitrary closed outline (an antipad, an RF cavity, a BGA breakout) with vias: a `Tag`, a `design_constraint(...).fence_via(...)` rule on the substrate, and a tagged `Pour` inside a `FencedOutline` circuit whose `GND` port connects to the board's ground net. A `KeepOut` over the same outline, which keeps pours and auto-placed vias out of the opening, is optional; the module adds one. Its design target is `jitxexamples.patterns.fenced_pour_outline.fenced_pour_outline_design`. To see the fence, run a full build (`jitx design build <target>`, which needs the runtime) and open the board with `jitx ui open --board --design <target>`. The module also has `CavityRing`, a closed ring turned inwards (a negative `offset`) so its vias land in a ground cavity pour's own copper, with a same-net anchor via; its target is `jitxexamples.patterns.fenced_pour_outline.cavity_ring_design`. `fence_count_range` gives the via counts to accept along an outline before a build is checked.
73
+
74
+ The `layout_*` modules each show one design-rule technique on jitx 4.6. Each has offline tests and a runtime test, gated by `JITX_PATTERN_RUNTIME=1`, that measures the computed copper. Pours and vias: `layout_default_rules` (board defaults for trace width, clearance and pad relief, checked against the fab floors, with rules on power and ground net tags at a higher priority), `layout_thermal_classes` (relief per pad class chosen from the measured pad size, plus a direct connect on an exposed pad and an untagged part that joins its pour solidly because no relief rule matches it), `layout_heavy_copper_layer` (floors for one heavy inner layer with `OnLayer` on the priority ladder, with `heavy_layer_index` to find the layer and `heavy_layer_rules` to write the floors and the copies of the net-tag rules), `layout_stitched_pour` (a `stitch_via` rule on a pour tag, its pitch checked against the via and the fab, and `expected_stitch_sites` for the sites a build must fill) and `layout_edge_and_cutout` (pour pullback from the board edge with `IsBoardEdge`, and from cutouts, outline holes and via drills with `IsHole`). Routing: `layout_cpwg_two_row_fence` (a grounded coplanar line with two rows of fence vias, fenced through its routing structure, with functions for the coplanar gap, the row positions and counts, and the rows that reach the pour), `layout_qfn_escape` (a power trace stepped down to fit a QFN pad, with `escape_width` deriving the width from the pad, the nearest other pad and a chosen escape clearance), `layout_bga_escape` (a power trace stepped down to pass between BGA balls, with the width read from the balls), `layout_diff_pair_escape` (two differential pairs necked down at a fine-pitch device and held apart in the run, by tags on the routes), `layout_sensitive_net_clearance` (a clearance between the tags on an RF net and a switch-node net: the switch-node pour pulls back from the RF line while a GND pour stays at its default clearance) and `layout_routing_structure_by_tag` (routing structures applied by tag, with a neck structure on the escape).
73
75
 
74
76
  The `si_*` modules each show one signal-integrity constraint on jitx 4.6, on plain nets with code routes that close the path, and their docstrings paste the design-issues output they produced: `si_point_to_point` (timing and loss with a `TerminatingPinModel`), `si_series_part` (a `BridgingPinModel` through a series part), `si_via_model` (a via with `models`), `si_diff_pair` (intra-pair skew), `si_bundle_skew` (skew across pairs with `ConstrainReferenceDifference`), `si_daisy_chain` (an ordered chain with `>>`), `si_via_structure` (a via structure from `jitxlib.via_structures`) and `si_signal_constraint` (a `SignalConstraint` subclass); `si_parts` holds their fictional parts. The `pin_*` modules show SI constraints on pin-assigned paths: `pin_lane_polarity` (lane choice and P/N inversion on a provider that is one end of the path) and `pin_series_array` (channel choice through a pass-through part, both sides in one mapping). The `jitx-interconnect-constraints` and `jitx-pin-assignment` skills point at them as worked patterns.
75
77
 
78
+ The code-layout modules each build a piece of physical layout in code: `code_route_basics` (code routes on one layer: a plain route, a `Route.Sketch` detour past a via column, and `Route.Config` overrides for trace width, trace space and a destination target, one of which tapers the trace into its pad), `serpentine_sections` (length-matched sections on four differential pairs, each a chain of code routes through `PairInsertion` and `PairPoint` control points whose section between the two `PairPoint`s may meander, each pair under its own serpentine or deskew rule), `wilkinson_tree` (a fenced 1:4 Wilkinson divider tree built from one 1:2 cell, with code routes from an input connector to four outputs and a timing constraint that matches the four paths; each line leaves its pad straight to a `RoutePoint`, and each that turns bends around a tagged ground copper square, and each divider body is fenced like a trace by a fence pour equal to its copper), `rf_connector_launch` (an SMA end launch into a fenced grounded coplanar line: a straight exit to a `RoutePoint` on the pad's axis, a small tagged ground copper square past it whose clearance rule to the line sets the bend radius, and a hyperbolic cutout in the ground under the centre pad), `hex_bga_escape` (two differential pairs out of a hex-grid BGA, split at a `PairPoint` at the ball field's edge so a tagged neck structure runs through the field and the full structure outside it), `qfn_thermal_and_power_fanout` (a grid of thermal vias in the RP2040's exposed pad with a matching soldermask and paste opening, and its `IOVDD` pins fanned out through escapes, trunks and vias to a 3.3 V plane) and `board_ground_pours` (a `GND` pour on every copper layer, all held by one through `GND` anchor via and pulled back from the board edge by an `IsBoardEdge` rule). Each has offline tests and a runtime test, gated by `JITX_PATTERN_RUNTIME=1`, that builds the design and measures the realized copper; run the runtime tests with a JITX runtime started at the repository root.
79
+
76
80
  ### Protocol definitions (`src/jitxexamples/protocols/`)
77
81
  High-speed protocols that `jitxlib.protocols` does not ship: port bundles plus a `SignalConstraint` whose skew limits cite their source and its scope in the module docstring. Each protocol module has a worked example beside it named `<protocol>_example.py`, a `SampleDesign` that nets a fictional controller to a real memory part and applies the constraint without `>>`. Today that is `memory/lpddr4.py` (Micron MT53E1G32D2FW-046 WT:B, an LPDDR4X/LPDDR4 part, target `jitxexamples.protocols.memory.lpddr4_example.LPDDR4ExampleDesign`) and `memory/ddr4.py` (Micron MT40A1G16TB-062E:F, target `jitxexamples.protocols.memory.ddr4_example.DDR4ExampleDesign`). The examples are not routed, so the design issues (each example's docstring shows the `issues(satisfied=True)` call) list each constrained path as `Unconnected Topology` until the board is routed.
78
82
 
@@ -177,7 +177,7 @@ Devin session (or ask it to reload/list skills) and verify with:
177
177
  ```text
178
178
  List the available skills related to JITX. Confirm whether you can see @jitx,
179
179
  @jitx-component-modeler, @jitx-circuit-builder, @jitx-substrate-modeler,
180
- @jitx-physical-layout, @jitx-interconnect-constraints, @jitx-pin-assignment,
180
+ @jitx-code-layout, @jitx-interconnect-constraints, @jitx-pin-assignment,
181
181
  @jitx-code-review, and @jitx-mechanical.
182
182
  ```
183
183
 
@@ -0,0 +1,125 @@
1
+ <!--
2
+ JITX SI Constraints Runbook (JS4) · rev 3.0 · 2026-11-03
3
+ Give this file to your AI coding agent (Claude Code, Codex / GPT, or Devin) and tell it to follow
4
+ the file. Complete JS0 and JS1 Part 1 first, then START A NEW AGENT SESSION: a skills install only
5
+ takes effect in a session started after it.
6
+ -->
7
+
8
+ # JITX SI Constraints Runbook (JS4)
9
+
10
+ Each step below is a request, written the way you would ask an agent for the work. Follow them in
11
+ order; at a **[HUMAN]** step, stop and wait for me. Drive `jitx-interconnect-constraints` for the
12
+ constraints and the base `jitx` skill for the project. The ground truth is AMD UG863, *Versal
13
+ Adaptive SoC PCB Design User Guide*, its LPDDR4/4x timing constraint rules and physical design
14
+ rules: <https://docs.amd.com/r/en-US/ug863-versal-pcb-design>. Cite its revision wherever you use
15
+ it. If you cannot read those tables, tell me what you tried and ask me for them. Where it leaves a
16
+ choice, make it and tell me what you chose. Don't open
17
+ `jitxexamples.jumpstart_kits.js4_si_constraints`, even where a skill offers it as an example: it is
18
+ a finished answer to this task.
19
+
20
+ **Prerequisites:** JS0 and JS1 Part 1 are done, and you have the `board.py` JS1 Part 1 produced;
21
+ Python 3.12+; you can fetch from amd.com.
22
+
23
+ Every part comes from the `jitxexamples` package; model none, and leave the FPGA's pin offer as it
24
+ is:
25
+
26
+ - `jumpstart_kits.vp1002_lpddr4x`: `circuit.VP1002LPDDR4X`, the JS1 VP1002 offering one x32
27
+ LPDDR4X interface, `bundles.VersalLPDDR4X`, with the pin swaps AMD allows, and
28
+ `pinout.LPDDR4X_X32`, the pins it offers. JITX picks the pins when the board is routed.
29
+ - `components.memories.MT53E1G32D2FW_046_WT_B.MT53E1G32D2FW_046_WT_B`, the Micron memory.
30
+ - `protocols.memory.lpddr4`: the `LPDDR4` bundles and `LPDDR4Constraint`, a reusable constraint
31
+ whose `LPDDR4ConstraintParams` defaults come from a different guide, UG583.
32
+ - `jumpstart_kits.vp1002_lpddr4x.package_delays.SYNTHETIC_CSV`, the path of the FPGA's package delay
33
+ file, with columns named after Vivado's I/O ports export (UG899 Appendix A): one row per pin of
34
+ memory triplet M0, with its minimum and maximum delay in ps, both legs of a P/N pair alike. Its
35
+ values are synthetic estimates, not AMD data; say so wherever you report a delay that includes
36
+ them. Its `Pin Number` is the ball: map it to an FPGA port with `ball_to_rc` from
37
+ `jumpstart_kits.js1_stackup_components.versal_fpga.tools.generate_pinout` and the FPGA's
38
+ `ball_assignments()`, and check one: ball AT20 is `IO_L8P_N2P4_M0P70_701`.
39
+
40
+ ## Steps
41
+
42
+ **0 · Preflight.**
43
+ Tell me this runbook's revision, from the comment at the top, and confirm
44
+ `jitx-interconnect-constraints` is invocable.
45
+
46
+ **1 · Project.**
47
+ Set up a new JITX project for this board in an empty directory, with `jitxexamples` as a dependency
48
+ and my JS1 Part 1 `board.py` copied in, and build the seeded design.
49
+
50
+ **2 · Connect.**
51
+ Place the VP1002 and the Micron on my JS1 board and substrate, require the FPGA's interface and net
52
+ it to the memory with plain nets, each channel's one CKE to both of the memory's CKE balls. Build
53
+ it.
54
+
55
+ **3 · [HUMAN] Constraint plan.**
56
+ First tell me, in a few sentences, what a JITX timing constraint measures along a path and where
57
+ each part of that measurement comes from. Then show me every UG863 LPDDR4/4x timing and physical
58
+ rule in a table: its value, and how you will express it in JITX or why you won't. Turn the 3600 mil
59
+ trace length rule into a delay from the substrate's own velocity: about 525 ps on the JS1
60
+ striplines. Name the routing structures against UG863's impedance targets, and the closest with the
61
+ gap if none is in range. Say how you will count package delay and via delay, quoting what UG863 says
62
+ about package delay. A `TerminatingPinModel` adds its pin's package delay to every path on that pin,
63
+ delay limits included, so with the pin models step 4 asks for, package delay counts toward the 3600
64
+ mil limit: say so, and what that leaves for the trace with the file's delays. Flag where the FPGA's
65
+ offer differs from the table. Wait for my approval.
66
+
67
+ **4 · Constraints.**
68
+ Write the approved rules as one reusable constraint for this link that takes the routing structures
69
+ and the limits as arguments and builds on `LPDDR4Constraint`, and apply it. Give each FPGA pin in
70
+ the package delay file a `TerminatingPinModel` at the midpoint of its minimum and maximum, reading
71
+ the file by column name and skipping rows with no delay, as a full export lists every pin; leave
72
+ the memory's pins without one.
73
+ Build, and check the issues.
74
+ Expect 66 skews (per channel the CK pair, two CKE, two CS and six CA; per byte the DQS pair, DQS
75
+ to CK, DMI and eight DQ) and 56 delay limits. Unrouted, each sits in its own `Unassigned Pin on
76
+ Path` group, except that each CKE ball's skew and delay share one group reporting that ball's path
77
+ unrouted (`No path for signal constraint`, or a `Signal path` line ending `is not routed yet`): 118
78
+ `NOT MET` groups, then `met Satisfied`, the routing check. Map any other count to these. On jitx
79
+ 4.6.0 the report may name a path's FPGA end through a net on the required bundle, as in
80
+ `RESET_n.ch[0].ca[0]`; the path is still that signal's.
81
+
82
+ **5 · Verify.**
83
+ Give the JS1 microvias you will route through a delay model, on subclasses in this project, not in
84
+ `board.py`: the time across the via's dielectric from the middle of its top copper to the middle of
85
+ its bottom copper, D·√Dk / c, from the substrate's own thicknesses and Dk, with no loss. Then write
86
+ a verification design that code-routes one channel B byte lane, its CK pair, its CKE (FPGA pin to
87
+ one CKE ball, on to the other) and one CA bit, on the inner striplines through those microvias in
88
+ the pads. Expect 15 Skew and 12 Time lines and no `Using placeholder model` line; report each
89
+ against its limit, how much of each Time and each Skew is package delay, and what UG863's layout
90
+ rules would flag. Don't match lengths.
91
+
92
+ Then run the skills' checks and `jitx-code-review`, fix what they find apart from unrouted paths,
93
+ and report each result.
94
+
95
+ **6 · [HUMAN] Change a requirement.**
96
+ Invite me to change a requirement, suggesting: *"Our SI team wants DQ and DMI within ±50 ps of DQS.
97
+ Change that limit and show me where the routed paths stand."* Change only that limit, in one place,
98
+ rebuild the verification design, and show me the new limit as the report prints it and each routed
99
+ DQ and DMI skew against it, from the new report: the router may lay the routes differently. Then
100
+ run step 5's checks again.
101
+
102
+ ## Done when
103
+
104
+ - The design binds my JS1 substrate, uses `VP1002LPDDR4X`'s pin offer unchanged, and nets the
105
+ interface to the memory with plain nets, one CKE per channel to both CKE balls.
106
+ - The step 3 table covers every UG863 LPDDR4/4x timing and physical rule with its revision, each
107
+ applied or left out with a reason; the 3600 mil rule is a delay derived from the substrate's
108
+ velocity; the impedance gap is reported, with no width invented. Step 3 stopped before any
109
+ constraint was written.
110
+ - The constraint is one reusable class or function that takes the structures and limits as
111
+ arguments, and the shipping design reports its 66 skews and 56 delay limits, unmeasured, in 118
112
+ `NOT MET` groups.
113
+ - Each FPGA pin in the package delay file carries a `TerminatingPinModel` at the midpoint of its
114
+ minimum and maximum, read from the file by column name; the memory's pins carry none. Every report
115
+ of a delay that includes them says the values are synthetic.
116
+ - The microvias the verification design routes through carry a delay model from the substrate's
117
+ thicknesses and Dk, and `board.py` is unchanged.
118
+ - The verification design reports 15 Skew lines and 12 Time lines and no placeholder model, each set
119
+ against its limit.
120
+ - `pyright` passes with zero suppressions; `pytest` passes for any tests you wrote; `jitx design
121
+ find` shows no import failures; every design builds; and `jitx-code-review` leaves no CRITICAL
122
+ finding (every result reported, with the reason for each WARNING kept), after step 5 and again
123
+ after step 6.
124
+ - After step 6 exactly one limit has changed, and the verification design reports each DQ and DMI
125
+ skew against ±50 ps.
@@ -0,0 +1,113 @@
1
+ # JS4: SI Constraints
2
+
3
+ **Shortcut:** {download}`Download the runbook <JS4_SI-Constraints_Runbook.md>`, give it to your AI
4
+ coding agent, and tell it to follow the file.
5
+
6
+ Turn a vendor's layout guide into signal-integrity constraints by prompting an agent that drives
7
+ `jitx-interconnect-constraints`. The agent reads AMD UG863's LPDDR4/4x rules for the link from the
8
+ JS1 VP1002 FPGA to a Micron MT53E1G32D2FW LPDDR4X memory and writes the timing rules and the trace
9
+ length rule as one reusable constraint: skew limits, the length rule turned into a delay limit
10
+ through the stackup's own velocity, routing structures and reference planes. It gives the FPGA's
11
+ pins package delays from a supplied file of synthetic estimates (not AMD data) and the board's
12
+ microvias a delay model, then code-routes one byte lane, a clock, the clock enable and an address
13
+ bit, and JITX measures each routed path against its limits.
14
+
15
+ ## What you learn
16
+
17
+ A timing constraint in JITX is a limit on a path, written in code. It names the path from one pin
18
+ to another through the nets, and a limit on that path's delay or on the difference between two
19
+ paths' delays. JITX adds up everything on the path: the package delay inside each end pin, given as
20
+ a pin model; each trace, from its routing structure's velocity on the layer it runs on; each via,
21
+ from its delay model; and any part the path passes through, from that part's pin model. The issue
22
+ report sets each routed path's sum against its limit.
23
+
24
+ Because the constraint is code, its limits are arguments. In this kit the agent writes UG863's rules
25
+ once, as one constraint for this link. A tighter requirement from your SI team is one changed value
26
+ and a rebuild (gate 2 below). A revision of UG863 that changes only limits changes numbers, not
27
+ code. The next board with this link, or another stackup, takes the same constraint with its own
28
+ routing structures. The package delays come from a file, so a new export changes an input, not the
29
+ constraint; the via models are code on the stackup's own materials, so a new stackup needs its own.
30
+ The interface is the example; what you learn is how to capture a guide's timing rules once and carry
31
+ them from board to board.
32
+
33
+ ## What the kit supplies and leaves out
34
+
35
+ UG863 says "Include adaptive SoC package delays for all skew calculations", and "Include package
36
+ delay in routing constraints when determining signal trace lengths unless otherwise specified". It
37
+ takes the delays from Vivado's per-pin export, at the midpoint of each pin's minimum and maximum.
38
+ AMD publishes them only through Vivado, and the VP1002's were not available for this kit, so the
39
+ kit supplies a package delay file with the export's column names whose values are synthetic
40
+ estimates, not AMD data; both legs of each differential pair get the same value. The agent turns it
41
+ into the pin models.
42
+
43
+ A pin model adds its delay to every path on that pin, the delay limit included, so this kit counts
44
+ package delay toward the 3600 mil rule, which UG863's table calls a PCB trace length. That is the
45
+ conservative reading: it leaves the trace about 2280 to 2940 mil on the length-limited pins with
46
+ these estimates. The other reading holds the trace alone to 3600 mil, and needs each path's limit
47
+ raised by its own pin's package delay, which is not known until JITX assigns the pins. The agent
48
+ shows you the reading it applies, and what it leaves for the trace, at gate 1. On your own board,
49
+ export the real delays from Vivado, check their column names, and point the same code at that file.
50
+
51
+ The via delay model is first order: the time to cross the dielectric from the middle of one copper
52
+ layer to the middle of the next, from the stackup's own thicknesses and Dk. It leaves out the pad
53
+ and antipad, so it is a floor on each via's delay, not a characterization. The agent puts it on
54
+ JS4's own copies of the JS1 microvias; your JS1 `board.py` stays as it is.
55
+
56
+ Some of UG863 stays outside the constraint. Spacing, via counts and which layer a group runs on are
57
+ layout rules for a layout review. JS4 does not match lengths: the verification routes stay as
58
+ routed, so some miss their limits, and a skew between two different FPGA pins includes their
59
+ package delays' difference, synthetic here. A miss shows the check working, not a fault for the
60
+ agent to fix.
61
+
62
+ The FPGA comes from the `jitxexamples` package with its LPDDR4X pin swaps already offered, so JITX
63
+ picks its pins when the board is routed; [JS3](../js3-pin-assignment/) teaches that part. JS4
64
+ exports no XDC, and validating the FPGA pins in Vivado stays your step.
65
+
66
+ ## Before you start
67
+
68
+ - Finish [JS0](../js0-setup/) and [JS1 Part 1](../js1-stackup-components/part1-stackup/). The
69
+ design uses the substrate you built there.
70
+ - Start a new agent session. A skills install only takes effect in a session started after it.
71
+ - Allow about two hours of agent time, plus the time you spend at the two decisions below.
72
+ - Have your JS1 Part 1 `board.py` at hand. Your agent needs network access to amd.com.
73
+ - To compare this run with your current flow afterward, note now roughly how long it takes your
74
+ team to get a memory interface's layout-guide rules into the layout tool's constraints, and how
75
+ long a changed limit takes to reach the constraints and the check
76
+ against the routed board. During the run, time it, and time gate 2 from your request to the
77
+ agent's report.
78
+
79
+ ## What the agent asks of you
80
+
81
+ Two `[HUMAN]` gates stop for you:
82
+
83
+ 1. **Approve the constraint plan.** The agent shows you every UG863 LPDDR4/4x rule beside how it
84
+ will express it in JITX, or why it won't, with the routing structures it will use, the gap to
85
+ UG863's impedance targets, how it will model package and via delay, and the one clock enable per
86
+ channel the FPGA offers where UG863 lists two for a dual-rank memory. You approve before it
87
+ writes any constraint.
88
+ 2. **Change a requirement.** Ask for a tighter limit (the runbook suggests DQ and DMI within ±50 ps
89
+ of DQS). The agent changes that one value, rebuilds, and shows you the new limit in the report
90
+ and each routed DQ and DMI path's verdict against it.
91
+
92
+ ## After the run
93
+
94
+ You can now write a layout guide's timing and length rules as constraints that JITX measures on the
95
+ routed board, with the package and via delays on the path. Set gate 2's time against the same change
96
+ in your current flow, through to the check against the routed board; that comparison counts for more
97
+ than the whole run's time against your note, since a first run includes learning. Length matching,
98
+ the step toward meeting these limits, is outside this kit. Then write the constraints for an
99
+ interface from one of your own boards, from its vendor's layout guide and your own package delay
100
+ export, and time it against the same note: that second run is the fairer measure.
101
+
102
+ ## Files
103
+
104
+ - [The runbook](JS4_SI-Constraints_Runbook.md), to read here;
105
+ {download}`download it <JS4_SI-Constraints_Runbook.md>` to give to your agent. It names the AMD
106
+ guide the agent fetches.
107
+ - The synthetic package delay file, `package_delays_synthetic.csv`, ships inside the `jitxexamples`
108
+ package next to
109
+ [`jumpstart_kits.vp1002_lpddr4x.package_delays`](https://github.com/JITx-Inc/jitx-examples/tree/main/src/jitxexamples/jumpstart_kits/vp1002_lpddr4x),
110
+ which generates it and says how.
111
+ - The reference solution, module
112
+ [`jitxexamples.jumpstart_kits.js4_si_constraints`](https://github.com/JITx-Inc/jitx-examples/tree/main/src/jitxexamples/jumpstart_kits/js4_si_constraints)
113
+ in the `jitxexamples` package (`pip install jitxexamples`).
@@ -1,4 +1,4 @@
1
1
  cmd [1] | ruff check .
2
2
  All checks passed!
3
3
  cmd [2] | ruff format --check --diff .
4
- 227 files already formatted
4
+ 269 files already formatted
@@ -0,0 +1,142 @@
1
+ """
2
+ 60312202114514 / WR-SMA end launch jack
3
+ =======================================
4
+
5
+ This module provides a component definition for the Würth Elektronik
6
+ 60312202114514, a WR-SMA 50 ohm end launch jack with a flat centre tab, for a
7
+ 1.6 mm board.
8
+
9
+ The land pattern comes from the recommended land pattern of the Würth
10
+ datasheet drawing, revision 001.001. All dimensions are in mm:
11
+
12
+ - centre pad 0.61 +/-0.05 wide and at least 1.97 long, from the board end;
13
+ - ground pads 9.9 +/-0.05 outer and 7.1 +/-0.05 inner overall width, 5.0
14
+ +/-0.05 long, on the top and on the bottom of the board.
15
+
16
+ The land pattern has no ground vias. The drawing gives the part as 50 ohm from
17
+ DC to 18 GHz, with VSWR 1.2 and insertion loss 0.14 dB at most up to
18
+ 12.4 GHz, and notes that "The VSWR in application varies decisively according
19
+ to PCB layout".
20
+
21
+ The land pattern's frame is the frame of the vendor's HFSS model
22
+ (``HFSS_MODEL_URL``): x = 0 is the body face, which sits on the board edge,
23
+ +x runs into the board along the centre pad, and the pads are centred on
24
+ y = 0. Place the part with its origin on the board edge and its +x axis
25
+ pointing into the board.
26
+
27
+ The courtyard, on the top and on the bottom, covers what sits on the board:
28
+ the pads, and the shell's ground tabs, which the vendor model puts at x 0 to
29
+ 4.76 within the body's 9.52 mm width. It starts at the board edge, since the
30
+ body behind the face hangs off the board.
31
+ """
32
+
33
+ from __future__ import annotations
34
+
35
+ from jitx.component import Component
36
+ from jitx.feature import Courtyard
37
+ from jitx.landpattern import Landpattern, PadMapping
38
+ from jitx.layerindex import Side
39
+ from jitx.net import Port
40
+ from jitx.shapes.composites import rectangle
41
+ from jitxlib.landpatterns.pads import SMDPad
42
+ from jitxlib.symbols.box import BoxSymbol
43
+
44
+ CENTER_PAD_WIDTH = 0.61
45
+ """Datasheet recommended land pattern: centre pad 0.61 +/-0.05 wide."""
46
+
47
+ CENTER_PAD_LENGTH = 1.97
48
+ """Datasheet recommended land pattern: centre pad 1.97 minimum from the PCB
49
+ end."""
50
+
51
+ GROUND_OUTER = 9.9
52
+ """Datasheet recommended land pattern: ground pads 9.9 +/-0.05 outer overall
53
+ width."""
54
+
55
+ GROUND_INNER = 7.1
56
+ """Datasheet recommended land pattern: ground pads 7.1 +/-0.05 inner overall
57
+ width."""
58
+
59
+ GROUND_LENGTH = 5.0
60
+ """Datasheet recommended land pattern: ground pads 5.0 +/-0.05 long, top and
61
+ bottom."""
62
+
63
+ BODY_WIDTH = 9.52
64
+ """Datasheet: body 9.52 by 7.92; the vendor model spans y -4.76 to 4.76, so
65
+ 9.52 is the width across the board edge."""
66
+
67
+ TAB_REACH = 4.76
68
+ """Vendor model (``HFSS_MODEL_URL``): the shell's ground tabs reach x = 4.76
69
+ into the board."""
70
+
71
+ COURTYARD_EXCESS = 0.25
72
+ """Courtyard margin beyond the pads and tabs, in mm, as the Molex and
73
+ Weidmuller connectors in this package use."""
74
+
75
+ HFSS_MODEL_URL = (
76
+ "https://www.we-online.com/components/products/download/"
77
+ "ANSYS_60312202114514%20%28rev25a%29.a3dcomp"
78
+ )
79
+ """The vendor's HFSS 3D component (``.a3dcomp``) for this part, rev25a,
80
+ kept for later use: nothing in this repository downloads or reads it yet.
81
+ The file was recorded by 2026-11-05 as 390,182 bytes, with the SHA-256 in
82
+ ``HFSS_MODEL_SHA256``; check a download against both. Its native frame is
83
+ the land pattern's frame: x = 0 at the body face on the board edge, +x into
84
+ the board, and z = 0 on the top copper."""
85
+
86
+ HFSS_MODEL_SHA256 = "54cdf702be7343e09a787fa0de413e77984569b4b6bcdddee27d8adccfc90959"
87
+ """SHA-256 of the rev25a file at ``HFSS_MODEL_URL``, to check a download
88
+ against."""
89
+
90
+ _GROUND_PAD_WIDTH = (GROUND_OUTER - GROUND_INNER) / 2
91
+ _GROUND_PAD_Y = (GROUND_OUTER + GROUND_INNER) / 4
92
+
93
+
94
+ class WurthLaunchLandpattern(Landpattern):
95
+ """The centre pad, and a ground pad on each side of it on the top and on
96
+ the bottom of the board, each with a soldermask opening and paste, and a
97
+ courtyard on each side."""
98
+
99
+ def __init__(self) -> None:
100
+ self.sig = SMDPad(rectangle(CENTER_PAD_LENGTH, CENTER_PAD_WIDTH)).at(
101
+ CENTER_PAD_LENGTH / 2, 0.0
102
+ )
103
+ self.gnd = [
104
+ SMDPad(rectangle(GROUND_LENGTH, _GROUND_PAD_WIDTH)).at(
105
+ GROUND_LENGTH / 2, y, on=side
106
+ )
107
+ for side in (Side.Top, Side.Bottom)
108
+ for y in (_GROUND_PAD_Y, -_GROUND_PAD_Y)
109
+ ]
110
+ reach = max(GROUND_LENGTH, TAB_REACH) + COURTYARD_EXCESS
111
+ half = max(GROUND_OUTER, BODY_WIDTH) / 2 + COURTYARD_EXCESS
112
+ self.courtyard = [
113
+ Courtyard(rectangle(reach, 2 * half).at(reach / 2, 0.0), side=side)
114
+ for side in (Side.Top, Side.Bottom)
115
+ ]
116
+
117
+
118
+ class Wurth60312202114514(Component):
119
+ """Würth Elektronik WR-SMA 60312202114514, 50 ohm end launch jack, flat
120
+ tab, for a 1.6 mm board."""
121
+
122
+ manufacturer = "Würth Elektronik"
123
+ mpn = "60312202114514"
124
+ datasheet = (
125
+ "https://www.we-online.com/components/products/datasheet/60312202114514.pdf"
126
+ )
127
+ reference_designator_prefix = "J"
128
+
129
+ sig = Port()
130
+ """The centre pin."""
131
+ gnd = Port()
132
+ """The shell: all four ground pads."""
133
+
134
+ def __init__(self) -> None:
135
+ self.landpattern = WurthLaunchLandpattern()
136
+ self.symbol = BoxSymbol()
137
+ self.mappings = [
138
+ PadMapping({self.sig: self.landpattern.sig, self.gnd: self.landpattern.gnd})
139
+ ]
140
+
141
+
142
+ Device: type[Wurth60312202114514] = Wurth60312202114514
@@ -400,13 +400,13 @@ class TPS62933DRLRCircuit(Circuit):
400
400
  BstTag().assign(self.BST_MID)
401
401
 
402
402
  # Design rule constraints
403
- # 0.5mm clearance for SW_NODE (switch node needs clearance from other nets)
403
+ # 0.25mm clearance for SW_NODE (switch node needs clearance from other nets)
404
404
  self.sw_clearance_rule = design_constraint(SwTag(), True).clearance(0.25)
405
405
 
406
- # 0.5mm clearance for BST_MID (bootstrap node needs clearance from other nets)
406
+ # 0.25mm clearance for BST_MID (bootstrap node needs clearance from other nets)
407
407
  self.bst_clearance_rule = design_constraint(BstTag(), True).clearance(0.25)
408
408
 
409
- # 1.0mm trace width for VIN and VOUT power nets
409
+ # 0.25mm trace width for VIN and VOUT power nets
410
410
  self.power_trace_rule = design_constraint(PowerNetTag()).trace_width(0.25)
411
411
 
412
412
 
@@ -358,7 +358,6 @@ class BGALink(Circuit):
358
358
  lane.signal_via_fence_shape,
359
359
  layer=spec.upper_ref_fence_pour_layer,
360
360
  rank=_ANTIPAD_FENCE_POUR_RANK,
361
- isolate=0.0,
362
361
  )
363
362
  spec.upper_ref_fence_tag.assign(p)
364
363
  signal_via_fence_pours.append(p)
@@ -367,7 +366,6 @@ class BGALink(Circuit):
367
366
  lane.deskew_fence_pour_shape,
368
367
  layer=spec.deskew_antipad_fence_pour_layer,
369
368
  rank=_DESKEW_ANTIPAD_FENCE_POUR_RANK,
370
- isolate=0.0,
371
369
  )
372
370
  spec.deskew_antipad_fence_tag.assign(dp)
373
371
  deskew_fence_pours.append(dp)
@@ -389,13 +387,21 @@ class BGALink(Circuit):
389
387
  n_conductors = len(substrate.stackup.conductors)
390
388
  gnd_pour_shape = rectangle(48, 48, radius=4)
391
389
  self.gnd_pours = [
392
- Pour(gnd_pour_shape, layer=layer, rank=1, isolate=0.0)
393
- for layer in range(n_conductors)
390
+ Pour(gnd_pour_shape, layer=layer, rank=1) for layer in range(n_conductors)
394
391
  ]
395
392
 
396
393
  # GND-via stitching around every BGA GND ball. The site-planning
397
394
  # helper returns pure data; this Circuit constructs the actual
398
395
  # Via instances and owns them as a named structural member.
396
+ # These stay code-placed rather than a ``stitch_via`` rule: each is
397
+ # via-in-pad at a GND ball centre, and its via class reaches the
398
+ # reference plane below that row pair's signal layer. The
399
+ # code-placed vias also count as same-net objects for the GND pours
400
+ # on the layers they span: a pour with no pad or via of its own net
401
+ # inside it comes back empty (measured on jitx 4.6). A stitch
402
+ # rule's own vias do not hold such a pour: the runtime still places
403
+ # them on the removed pour's footprint, with no issue (measured on
404
+ # jitx 4.6).
399
405
  self.gnd_stitching_vias = [
400
406
  substrate.gnd_via[signal_layer]().at(*bga.ball_center(row, col))
401
407
  for row, col, signal_layer in gnd_pad_via_sites()
@@ -97,7 +97,6 @@ def _rs_uncoupled_layer(signal_layer: int) -> "RoutingStructure.Layer":
97
97
  clearance=0.135,
98
98
  velocity=VEL_STRIPLINE,
99
99
  insertion_loss=0.018,
100
- neck_down=RoutingStructure.NeckDown(trace_width=0.10, clearance=0.135),
101
100
  )
102
101
  .reference(signal_layer - 1, 1.0)
103
102
  .reference(signal_layer + 1, 1.0)
@@ -0,0 +1,14 @@
1
+ """JS4 reference solution: SI constraints on the JS1 VP1002 driving a Micron
2
+ LPDDR4X device.
3
+
4
+ - :py:mod:`.constraint`: UG863's skew limits and trace length budget as a
5
+ reusable constraint.
6
+ - :py:mod:`.models`: package delay pin models from a package delay file,
7
+ and microvia delay models from the stackup.
8
+ - :py:mod:`.main`: the shipping design, with no routes.
9
+ - :py:mod:`.proof`: code-routed verification designs that measure the
10
+ constraints, before and after a tighter limit.
11
+
12
+ The FPGA's pin offer is a supplied part,
13
+ :py:mod:`jitxexamples.jumpstart_kits.vp1002_lpddr4x`.
14
+ """