0
mirror of https://github.com/gusmanb/logicanalyzer.git synced 2025-02-05 10:08:06 +00:00
gusmanb-logicanalyzer/Electronics/LogicAnalyzer/LogicAnalyzerV2/main.stanza
2024-10-18 17:30:31 +02:00

206 lines
7.0 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; Generated by JITX 3.16.0
#use-added-syntax(jitx)
defpackage main :
import core
import jitx
import jitx/commands
import ocdb/utils/generic-components
import helpers
; Define the shape/size of the board
val board-shape = RoundedRectangle(55.5, 65.0, 0.25)
pcb-routing-structure data-line :
name = "Capture data line"
layer-constraints(Top) :
trace-width = 0.13 ; mm
clearance = 0.1 ; mm
velocity = 0.19e12 ; mm/s
insertion-loss = 0.008 ; db/mm @ 1GHz
layer-constraints(Bottom) :
trace-width = 0.13 ; mm
clearance = 0.1 ; mm
velocity = 0.19e12 ; mm/s
insertion-loss = 0.008 ; db/mm @ 1GHz
; Module to run as a design
pcb-module logic-analyzer :
node gnd:pin
; Level shifters
var shifters = Array<?>(6)
var shifterInputPins = Array<?>(24)
var shifterOutputPins = Array<?>(24)
var shifterRefAPins = Array<?>(6)
var shifterRefBPins = Array<?>(6)
for i in 0 to 6 :
println("Instantiating shifter %_" % [i])
inst shifter : database-part(["mpn" => "TXU0104PWR", "manufacturer" => "Texas Instruments"])
net (shifter.GND, gnd)
shifters[i] = shifter
val offset = i * 4
shifterInputPins[offset] = shifter.A1
shifterInputPins[offset + 1] = shifter.A2
shifterInputPins[offset + 2] = shifter.A3
shifterInputPins[offset + 3] = shifter.A4
shifterOutputPins[offset] = shifter.B1Y
shifterOutputPins[offset + 1] = shifter.B2Y
shifterOutputPins[offset + 2] = shifter.B3Y
shifterOutputPins[offset + 3] = shifter.B4Y
shifterRefAPins[i] = shifter.VCCA
shifterRefBPins[i] = shifter.VCCB
;Pico module
inst U7 : database-part(["mpn" => "PICO", "manufacturer" => "Raspberry Pi"])
;Pin headers
inst J1 : database-part(["mpn" => "SK13D07VG5", "manufacturer" => "SHOU HAN"]);database-part(["mpn" => "SK-13D01-G030", "manufacturer" => "G-Switch"])
inst J2 : database-part(["mpn" => "C97095", "manufacturer" => "BOOMELE"]);database-part(["mpn" => "S108500004", "manufacturer" => "Ckmtw(Shenzhen Cankemeng)"])
inst J3 : database-part(["mpn" => "PM254-1-03-W-8.5", "manufacturer" => "HCTL"])
inst J4 : database-part(["mpn" => "DZ254W-11-03-65", "manufacturer" => "DEALON"])
;Diodes
inst D1 : database-part(["mpn" => "LL4148", "manufacturer" => "MDDMicrodiode Electronics"])
;Resistors
inst r1 : chip-resistor(8.2e3)
inst r2 : chip-resistor(100.0e3)
;VREF nets
net VREF (shifters[0].VCCA, shifters[1].VCCA, shifters[2].VCCA, shifters[3].VCCA, shifters[4].VCCA, shifters[5].VCCA, J1.p[2])
net EXT_VREF (J1.p[1], J2.p[3])
property(VREF.voltage) = tol%(5.0, 5.0)
property(EXT_VREF.voltage) = tol%(5.0, 5.0)
;Power nets
net POWER_3v3 (shifters[0].OE, shifters[1].OE, shifters[2].OE, shifters[3].OE, shifters[4].OE, shifters[5].OE, shifters[0].VCCB, shifters[1].VCCB , shifters[2].VCCB , shifters[3].VCCB , shifters[4].VCCB , shifters[5].VCCB , J1.p[3] , J2.p[7] , J2.p[8] , U7.P_3V3_OUT) ; 3v3
net POWER_5v (J1.p[4] , U7.VBUS , J2.p[5] , J2.p[6]) ; 5v
net GND (U7.GND0 , U7.GND1 , U7.GND2 , U7.GND3 , U7.GND4 , U7.GND6 , U7.GND6 , U7.GND7 , J2.p[1] , J2.p[2] , J3.p[3] , J4.p[3] , r1.p[2] , r2.p[2] , gnd) ; gnd
property(POWER_3v3.voltage) = tol%(3.3, 5.0)
property(POWER_5v.voltage) = tol%(5.0, 5.0)
property(GND.voltage) = typ(0.0)
;Trigger nets
net EXT_CHAIN (D1.A, U7.GP0, U7.GP1, J3.p[1], J4.p[1], r1.p[1])
net EXT_TRIG (D1.C, J2.p[4], r2.p[1])
property(EXT_CHAIN.voltage) = tol%(3.3, 5.0)
property(EXT_TRIG.voltage) = tol%(3.3, 5.0)
; Decoupling caps
for i in 0 to 6 :
println("Creating decoupling caps for shifter %_" % [i])
bypass-cap-strap(shifters[i].VCCA, gnd, 100.0e-9)
bypass-cap-strap(shifters[i].VCCB, gnd, 100.0e-9)
val signal-skew = TimingDifferenceConstraint(0.0 +/- 50.0e-12) ;50 picosec
;Shifter input nets
for i in 0 to 24 :
var pinNum
var netName
if i < 12 :
pinNum = 31 - (i * 2)
netName = to-symbol("DIN%_" % [i + 1])
else :
pinNum = 32 - ((i - 12) * 2)
netName = to-symbol("DIN%_" % [24 - (i - 12)])
println("Mapping shifter input pin %_ to connector pin %_" % [i, pinNum])
;val netName = to-symbol("DIN%_" % [i + 1])
make-net(netName, [shifterInputPins[i], J2.p[pinNum]])
println("Creating topology from shifterInputPins[%_] to J2.p[%_]" % [i, pinNum])
topology-segment(shifterInputPins[i], J2.p[pinNum])
structure(shifterInputPins[i] => J2.p[pinNum]) = data-line
if i < 23 :
println("Creating timming constraing for shifterInputPins[%_] => J2.p[%_], shifterInputPins[23] => J2.p[10]" % [ i, pinNum ])
timing-difference(
shifterInputPins[i] => J2.p[pinNum],
shifterInputPins[23] => J2.p[10],
) = signal-skew
var gpNum
var o
if i < 21 :
gpNum = i + 2
else :
gpNum = i + 5
if i < 12 :
o = i
else :
o = 11 + (24 - i)
println("Mapping shifter output pin %_ to gpio %_" % [o, gpNum])
val outNetName = to-symbol("DOUT%_" % [i + 1])
make-net(outNetName, [shifterOutputPins[o], U7.(to-symbol("GP%_" % [gpNum]))])
println("Creating topology from shifterOutputPins[%_] to U7.GP%_" % [o, gpNum])
topology-segment(shifterOutputPins[o], U7.(to-symbol("GP%_" % [gpNum])))
structure(shifterOutputPins[o] => U7.(to-symbol("GP%_" % [gpNum]))) = data-line
if o < 23 :
println("Creating timming constraing for shifterOutputPins[%_] => U7.GP%_, shifterOutputPins[23] => U7.GP14" % [ i, gpNum ])
timing-difference(
shifterOutputPins[o] => U7.(to-symbol("GP%_" % [gpNum])),
shifterOutputPins[23] => U7.GP14,
) = signal-skew
geom(GND) :
copper-pour(LayerIndex(0), isolate = 0.1) = RoundedRectangle(57.0, 65.0, 0.25)
copper-pour(LayerIndex(3), isolate = 0.1) = RoundedRectangle(57.0, 65.0, 0.25)
ocdb/utils/checks/check-design(self)
; Set the design name - a directory with this name will be generated under the "designs" directory
; the board - a Board object
; [optional] rules - the PCB design rules (if not givn default rules will be used)
; [optional] vendors - Strings or AuthorizedVendors (if not give default vendors will be used)
; [optional] quantity - Minimum stock quantity the vendor should carry (if not give default quantity will be used)
setup-design(
"jitx-design",
ocdb/utils/defaults/default-board(ocdb/manufacturers/stackups/jlcpcb-jlc2313, board-shape)
)
; Set the schematic sheet size
set-paper(ANSI-A)
; Set the top level module (the module to be compile into a schematic and PCB)
set-main-module(logic-analyzer)
; Use any helper function from helpers.stanza here
; run-check-on-design(my-design)
set-bom-vendors(["JLCPCB"])
set-bom-design-quantity(10)
set-bom-columns([
BOMColumn(BOMFieldDescription, "Comment", 20.0)
BOMColumn(BOMFieldInsts, "Designator", 30.0)
BOMColumn(BOMFieldSKU, "LCSC Part Number", 20.0)
])
set-export-backend(`kicad)
;export-cad()
;export-bom()
; View the results
view-design-explorer()
; view-bom(BOM-STD)
view-board()
view-schematic()