mirror of
https://github.com/gusmanb/logicanalyzer.git
synced 2025-02-05 10:08:06 +00:00
206 lines
7.0 KiB
Plaintext
206 lines
7.0 KiB
Plaintext
; 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" => "MDD(Microdiode 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() |