diff --git a/.gitignore b/.gitignore index 1ece069..ba3b54a 100644 --- a/.gitignore +++ b/.gitignore @@ -14,9 +14,6 @@ thhor_crs.xy *.gbr *.cnc *.zip -gerber/*.pdf -gerber/*.odt -gerber/thhor_crs-*.png *.o *.d *.eeprom @@ -28,6 +25,6 @@ sensor/*.pdf vcd *.log sallen-key-pulse.hex - *~.pcb *.backup +*.xy diff --git a/gerber/.gitignore b/gerber/.gitignore new file mode 100644 index 0000000..3e46260 --- /dev/null +++ b/gerber/.gitignore @@ -0,0 +1,9 @@ +*.xy +*.gbr +*.cnc +*.zip +*.pdf +*.odt +*-bot.png +*-top.png +*.bom diff --git a/gerber/gerber.makefile b/gerber/gerber.makefile index a44907f..7175588 100644 --- a/gerber/gerber.makefile +++ b/gerber/gerber.makefile @@ -2,8 +2,10 @@ # PROJ = … # VERSION = v01 +HERE = .. +PCBDIR = $(HERE)/.. GERBERS = $(PROJ).plated-drill.cnc -GVP2MAKE = ./gvp2make.py +GVP2MAKE = $(HERE)/gvp2make.py GV_OPT = -D600 default: zip bom png @@ -21,18 +23,21 @@ GERBER_AWK = '/- +[-a-z_]+\.[-a-z]+\.[-a-z]+ +[a-z]/{print $$2}' rm -fv $@ zip $@ $< $$(awk $(GERBER_AWK) $<) -%.plated-drill.cnc: ../%.pcb +%.plated-drill.cnc: $(PCBDIR)/%.pcb pcb -x gerber --gerberfile $* --name-style single $< bom: $(PROJ)_bom.pdf -%.bom: ../%.pcb +%.bom: $(PCBDIR)/%.pcb pcb -x bom --bomfile $@ $< %_bom.txt: %.bom bom.py -h $< > $@ -%_bom.pdf: %.bom bom.py - bom.py -h $< | utf82pdf > $@ +%_bom.pdf: %.bom $(HERE)/bom.py + $(word 2,$^) -h $< | utf82pdf > $@ .PRECIOUS: %.plated-drill.cnc %.png + +clean: + rm -f *.png *.pdf *.bom *.gbr *.cnc diff --git a/gerber/thhor_crs.png b/gerber/thhor_crs.png deleted file mode 100644 index b739005..0000000 Binary files a/gerber/thhor_crs.png and /dev/null differ diff --git a/gerber/Makefile b/gerber/thhor_crs/Makefile similarity index 53% rename from gerber/Makefile rename to gerber/thhor_crs/Makefile index 97c46e3..bcf82e9 100644 --- a/gerber/Makefile +++ b/gerber/thhor_crs/Makefile @@ -1,3 +1,3 @@ PROJ = thhor_crs VERSION = v01 -include gerber.makefile +include ../gerber.makefile diff --git a/gerber/README.md b/gerber/thhor_crs/README.md similarity index 100% rename from gerber/README.md rename to gerber/thhor_crs/README.md diff --git a/gerber/thhor_crs-bot.gvp b/gerber/thhor_crs/thhor_crs-bot.gvp similarity index 100% rename from gerber/thhor_crs-bot.gvp rename to gerber/thhor_crs/thhor_crs-bot.gvp diff --git a/gerber/thhor_crs-top.gvp b/gerber/thhor_crs/thhor_crs-top.gvp similarity index 100% rename from gerber/thhor_crs-top.gvp rename to gerber/thhor_crs/thhor_crs-top.gvp diff --git a/gerber/thhor_crs.dxf b/gerber/thhor_crs/thhor_crs.dxf similarity index 100% rename from gerber/thhor_crs.dxf rename to gerber/thhor_crs/thhor_crs.dxf diff --git a/gerber/thhor_crs.gvp b/gerber/thhor_crs/thhor_crs.gvp similarity index 100% rename from gerber/thhor_crs.gvp rename to gerber/thhor_crs/thhor_crs.gvp diff --git a/gerber/thhor_crs/thhor_crs.png b/gerber/thhor_crs/thhor_crs.png new file mode 100644 index 0000000..55e4b02 Binary files /dev/null and b/gerber/thhor_crs/thhor_crs.png differ diff --git a/gerber/thhor_csa/Makefile b/gerber/thhor_csa/Makefile new file mode 100644 index 0000000..4370d7a --- /dev/null +++ b/gerber/thhor_csa/Makefile @@ -0,0 +1,3 @@ +PROJ = thhor_csa +VERSION = v01 +include ../gerber.makefile diff --git a/gerber/thhor_csa/README.md b/gerber/thhor_csa/README.md new file mode 100644 index 0000000..6ecbb29 --- /dev/null +++ b/gerber/thhor_csa/README.md @@ -0,0 +1,28 @@ +# Project thhor_csa version v01 + +Six layer rigid PCB, 6mil/8mil rules, 0.3mm vias, 8mil annular + +- Size: 60x80 mm² +- Thickness: 1.6 mm. +- With soldermask, no silk. +- Surface finish HAL. + +## Copper layer order: + +- thhor_csa.top.gbr top side copper +- thhor_csa.ground.gbr chassis/analog ground +- thhor_csa.vcc.gbr power Vcc plane +- thhor_csa.vss.gbr power Vss plane +- thhor_csa.vfet.gbr power Vfet plane +- thhor_csa.bottom.gbr back side copper + +## Mechanical layers + +- thhor_csa.plated-drill.cnc drill file +- thhor_csa.outline.gbr board outline +- thhor_csa.topmask.gbr soldermask top +- thhor_csa.bottommask.gbr soldermask bottom + +## Pretty picture + +![gerbv export](thhor_csa.png) diff --git a/gerber/thhor_csa/thhor_csa-bot.gvp b/gerber/thhor_csa/thhor_csa-bot.gvp new file mode 100644 index 0000000..82203ae --- /dev/null +++ b/gerber/thhor_csa/thhor_csa-bot.gvp @@ -0,0 +1,82 @@ +(gerbv-file-version! "2.0A") +(define-layer! 14 (cons 'filename "thhor_csa.ground.gbr") + (cons 'visible #f) + (cons 'color #(27113 27113 27113)) + (cons 'alpha #(12079)) +) +(define-layer! 13 (cons 'filename "thhor_csa.vfet.gbr") + (cons 'visible #f) + (cons 'color #(65535 50491 34053)) + (cons 'alpha #(12079)) +) +(define-layer! 12 (cons 'filename "thhor_csa.vss.gbr") + (cons 'visible #f) + (cons 'color #(65535 34990 63468)) + (cons 'alpha #(15163)) +) +(define-layer! 11 (cons 'filename "thhor_csa.vcc.gbr") + (cons 'visible #f) + (cons 'color #(0 24400 24400)) + (cons 'alpha #(15163)) +) +(define-layer! 10 (cons 'filename "thhor_csa.bottom.gbr") + (cons 'visible #t) + (cons 'color #(60294 24022 3320)) +) +(define-layer! 9 (cons 'filename "thhor_csa.bottompaste.gbr") + (cons 'visible #t) + (cons 'color #(63479 30069 17733)) +) +(define-layer! 8 (cons 'filename "thhor_csa.bottommask.gbr") + (cons 'visible #f) + (cons 'color #(29344 65535 28765)) +) +(define-layer! 7 (cons 'filename "thhor_csa.top.gbr") + (cons 'visible #f) + (cons 'color #(63383 4945 17070)) + (cons 'alpha #(27242)) +) +(define-layer! 6 (cons 'filename "thhor_csa.toppaste.gbr") + (cons 'visible #f) + (cons 'color #(65535 2469 0)) + (cons 'alpha #(23644)) +) +(define-layer! 5 (cons 'filename "thhor_csa.topmask.gbr") + (cons 'inverted #t) + (cons 'visible #f) + (cons 'color #(25200 65535 30627)) +) +(define-layer! 4 (cons 'filename "thhor_csa.plated-drill.cnc") + (cons 'visible #t) + (cons 'color #(61307 61307 61307)) + (cons 'alpha #(65535)) + (cons 'attribs (list + (list 'autodetect 'Boolean 1) + (list 'zero_suppression 'Enum 0) + (list 'units 'Enum 0) + (list 'digits 'Integer 4) + )) +) +(define-layer! 3 (cons 'filename "thhor_csa.bottomsilk.gbr") + (cons 'visible #t) + (cons 'color #(0 0 0)) + (cons 'alpha #(65535)) +) +(define-layer! 2 (cons 'filename "thhor_csa.topsilk.gbr") + (cons 'visible #f) + (cons 'color #(0 0 0)) + (cons 'alpha #(65535)) +) +(define-layer! 1 (cons 'filename "thhor_csa.outline.gbr") + (cons 'visible #t) + (cons 'color #(65535 47429 0)) + (cons 'alpha #(65535)) +) +(define-layer! 0 (cons 'filename "thhor_csa.fab.gbr") + (cons 'visible #f) + (cons 'color #(0 0 0)) +) +(define-layer! -1 (cons 'filename "/home/falbala/stephan/eda/thhor_crs/gerber/thhor_csa") + (cons 'color #(65535 65535 65535)) +) +(set-render-type! 3) diff --git a/gerber/thhor_csa/thhor_csa-top.gvp b/gerber/thhor_csa/thhor_csa-top.gvp new file mode 100644 index 0000000..c0bc56f --- /dev/null +++ b/gerber/thhor_csa/thhor_csa-top.gvp @@ -0,0 +1,82 @@ +(gerbv-file-version! "2.0A") +(define-layer! 14 (cons 'filename "thhor_csa.ground.gbr") + (cons 'visible #f) + (cons 'color #(27113 27113 27113)) + (cons 'alpha #(12079)) +) +(define-layer! 13 (cons 'filename "thhor_csa.vfet.gbr") + (cons 'visible #f) + (cons 'color #(65535 50491 34053)) + (cons 'alpha #(12079)) +) +(define-layer! 12 (cons 'filename "thhor_csa.vss.gbr") + (cons 'visible #f) + (cons 'color #(65535 34990 63468)) + (cons 'alpha #(15163)) +) +(define-layer! 11 (cons 'filename "thhor_csa.vcc.gbr") + (cons 'visible #f) + (cons 'color #(0 24400 24400)) + (cons 'alpha #(15163)) +) +(define-layer! 10 (cons 'filename "thhor_csa.bottom.gbr") + (cons 'visible #f) + (cons 'color #(60294 24022 3320)) +) +(define-layer! 9 (cons 'filename "thhor_csa.bottompaste.gbr") + (cons 'visible #f) + (cons 'color #(63479 30069 17733)) +) +(define-layer! 8 (cons 'filename "thhor_csa.bottommask.gbr") + (cons 'visible #f) + (cons 'color #(29344 65535 28765)) +) +(define-layer! 7 (cons 'filename "thhor_csa.top.gbr") + (cons 'visible #t) + (cons 'color #(63383 4945 17070)) + (cons 'alpha #(27242)) +) +(define-layer! 6 (cons 'filename "thhor_csa.toppaste.gbr") + (cons 'visible #t) + (cons 'color #(65535 2469 0)) + (cons 'alpha #(23644)) +) +(define-layer! 5 (cons 'filename "thhor_csa.topmask.gbr") + (cons 'inverted #t) + (cons 'visible #f) + (cons 'color #(25200 65535 30627)) +) +(define-layer! 4 (cons 'filename "thhor_csa.plated-drill.cnc") + (cons 'visible #t) + (cons 'color #(61307 61307 61307)) + (cons 'alpha #(65535)) + (cons 'attribs (list + (list 'autodetect 'Boolean 1) + (list 'zero_suppression 'Enum 0) + (list 'units 'Enum 0) + (list 'digits 'Integer 4) + )) +) +(define-layer! 3 (cons 'filename "thhor_csa.bottomsilk.gbr") + (cons 'visible #f) + (cons 'color #(0 0 0)) + (cons 'alpha #(65535)) +) +(define-layer! 2 (cons 'filename "thhor_csa.topsilk.gbr") + (cons 'visible #t) + (cons 'color #(0 0 0)) + (cons 'alpha #(65535)) +) +(define-layer! 1 (cons 'filename "thhor_csa.outline.gbr") + (cons 'visible #t) + (cons 'color #(65535 47429 0)) + (cons 'alpha #(65535)) +) +(define-layer! 0 (cons 'filename "thhor_csa.fab.gbr") + (cons 'visible #f) + (cons 'color #(0 0 0)) +) +(define-layer! -1 (cons 'filename "/home/falbala/stephan/eda/thhor_crs/gerber/thhor_csa") + (cons 'color #(65535 65535 65535)) +) +(set-render-type! 3) diff --git a/gerber/thhor_csa/thhor_csa.gvp b/gerber/thhor_csa/thhor_csa.gvp new file mode 100644 index 0000000..e3514eb --- /dev/null +++ b/gerber/thhor_csa/thhor_csa.gvp @@ -0,0 +1,82 @@ +(gerbv-file-version! "2.0A") +(define-layer! 14 (cons 'filename "thhor_csa.ground.gbr") + (cons 'visible #t) + (cons 'color #(27113 27113 27113)) + (cons 'alpha #(12079)) +) +(define-layer! 13 (cons 'filename "thhor_csa.vfet.gbr") + (cons 'visible #t) + (cons 'color #(65535 50491 34053)) + (cons 'alpha #(12079)) +) +(define-layer! 12 (cons 'filename "thhor_csa.vss.gbr") + (cons 'visible #t) + (cons 'color #(65535 34990 63468)) + (cons 'alpha #(15163)) +) +(define-layer! 11 (cons 'filename "thhor_csa.vcc.gbr") + (cons 'visible #t) + (cons 'color #(0 24400 24400)) + (cons 'alpha #(15163)) +) +(define-layer! 10 (cons 'filename "thhor_csa.bottom.gbr") + (cons 'visible #t) + (cons 'color #(60294 24022 3320)) +) +(define-layer! 9 (cons 'filename "thhor_csa.bottompaste.gbr") + (cons 'visible #f) + (cons 'color #(63479 30069 17733)) +) +(define-layer! 8 (cons 'filename "thhor_csa.bottommask.gbr") + (cons 'visible #f) + (cons 'color #(29344 65535 28765)) +) +(define-layer! 7 (cons 'filename "thhor_csa.top.gbr") + (cons 'visible #t) + (cons 'color #(63383 4945 17070)) + (cons 'alpha #(27242)) +) +(define-layer! 6 (cons 'filename "thhor_csa.toppaste.gbr") + (cons 'visible #f) + (cons 'color #(65535 2469 0)) + (cons 'alpha #(23644)) +) +(define-layer! 5 (cons 'filename "thhor_csa.topmask.gbr") + (cons 'inverted #t) + (cons 'visible #f) + (cons 'color #(25200 65535 30627)) +) +(define-layer! 4 (cons 'filename "thhor_csa.plated-drill.cnc") + (cons 'visible #t) + (cons 'color #(61307 61307 61307)) + (cons 'alpha #(65535)) + (cons 'attribs (list + (list 'autodetect 'Boolean 1) + (list 'zero_suppression 'Enum 0) + (list 'units 'Enum 0) + (list 'digits 'Integer 4) + )) +) +(define-layer! 3 (cons 'filename "thhor_csa.bottomsilk.gbr") + (cons 'visible #f) + (cons 'color #(0 0 0)) + (cons 'alpha #(65535)) +) +(define-layer! 2 (cons 'filename "thhor_csa.topsilk.gbr") + (cons 'visible #f) + (cons 'color #(0 0 0)) + (cons 'alpha #(65535)) +) +(define-layer! 1 (cons 'filename "thhor_csa.outline.gbr") + (cons 'visible #t) + (cons 'color #(65535 47429 0)) + (cons 'alpha #(65535)) +) +(define-layer! 0 (cons 'filename "thhor_csa.fab.gbr") + (cons 'visible #f) + (cons 'color #(0 0 0)) +) +(define-layer! -1 (cons 'filename "/home/falbala/stephan/eda/thhor_crs/gerber/thhor_csa") + (cons 'color #(65535 65535 65535)) +) +(set-render-type! 3) diff --git a/gerber/thhor_csa/thhor_csa.png b/gerber/thhor_csa/thhor_csa.png new file mode 100644 index 0000000..d2d1169 Binary files /dev/null and b/gerber/thhor_csa/thhor_csa.png differ diff --git a/src/config.c b/src/config.c index c3556ac..20858e1 100644 --- a/src/config.c +++ b/src/config.c @@ -21,15 +21,17 @@ const struct config config = { [0] = 0xd1 | FM_READ, // Buffer 1 Read (Low-Frequency) [1] = 0xd3 | FM_READ, // Buffer 2 Read (Low-Frequency) }, - .page_start = 0x0800, + .page_start = 0x0400, .page_end = 0x1000, #ifdef HAVE_nFETs .pwm_min = 0x0000, .pwm_max = 0xffff, #endif #ifdef HAVE_FPGA - .fpga_config_page = 8, - .fpga_config_count = 504, + .fpga_config_page = 0x100, + .fpga_config_count = 3955, + .dorn_config_page = 8, + .dorn_config_count = 1, #endif }; diff --git a/src/config.h b/src/config.h index c51aab5..a452524 100644 --- a/src/config.h +++ b/src/config.h @@ -26,6 +26,8 @@ struct config { #ifdef HAVE_FPGA uint16_t fpga_config_page; uint16_t fpga_config_count; + uint16_t dorn_config_page; + uint16_t dorn_config_count; #endif }; diff --git a/src/dose.py b/src/dose.py index 2ace36c..2605d58 100755 --- a/src/dose.py +++ b/src/dose.py @@ -645,7 +645,7 @@ class dose_cmd(uart.uart): status |= 0x10 # PS_528 dest &=~ self.PIPE["FLASH"] if dest & self.PIPE["FPGA"] and not n: - n = 512/64 * npages + n = 512//64 * npages if dest & self.PIPE["FLASH"]: flash = flags2int(self.FSS, ["Write", "Ready", "P528"]) status |= 0x10 # PS_528 @@ -661,6 +661,8 @@ class dose_cmd(uart.uart): source, dest, status, valid, 0, astatus, n, psize//2, 0, 0, page, npages-1, flash) + if self._verbose >= 2: + print(f"PIPE {n=} {b2hex(d)}", file=sys.stderr) return self.cmd(c, d) def erase_flash(self, page, npages=1): @@ -742,7 +744,7 @@ class dose_cmd(uart.uart): f.close() return result - def write_pipe(self, data=[], timeout=2, n=None, parity="pipe", bfill=b'\0', pfill=b'\xff'): + def write_pipe(self, data=[], timeout=2, n=None, parity=None, bfill=b'\0', pfill=b'\xff'): if isinstance(data, str): f = open(data, "rb") data = [] @@ -804,7 +806,7 @@ class dose_cmd(uart.uart): s = 1 if nn: break - if bb != b: + if parity and bb != b: raise ValueError(f"block number mismatch {b=} != {bb=}") if b >= len(page): break @@ -840,6 +842,11 @@ class dose_cmd(uart.uart): self.pipe("CMD", "CONFIG", n=n*64) self.write_pipe(filename, n=n) + def fpga_config_f(self, filename="../fpga/quartus/thhor_crs.rbf"): + self.fpga_reset() + n = os.stat(filename).st_size + self.pipe("FLASH", "CONFIG", page=0x100, n=n) + def fix_page(self, page): if self.load_galois(): page = bch.fix_page(page) diff --git a/src/fpga.c b/src/fpga.c index 9204ce5..7fce601 100644 --- a/src/fpga.c +++ b/src/fpga.c @@ -168,7 +168,7 @@ uint8_t fpga_pipe_ready() const struct pipe pipe_config_fpga_config = { .source = pipe_flash, .dest = pipe_fpga, - .status = PS_BCH | PS_528, + .status = PS_BCH | PS_528 | PS_OUT, .fpga = { .status = AS_CONFIG, }, @@ -179,5 +179,5 @@ void fpga_config(uint16_t page, uint16_t count) fpga_reset(); pipe = pipe_config_fpga_config; pipe.fpga.count = count; - flash_start_stream(page, count >> 3, FS_Read|FS_528); + flash_start_stream(page, count >> 3, FS_Read|FS_528|FS_Ready); } diff --git a/src/pipe.c b/src/pipe.c index a373092..e47b1e1 100644 --- a/src/pipe.c +++ b/src/pipe.c @@ -22,6 +22,8 @@ uint8_t pipe_busy() return 0; } +uint8_t pipe_sleep; + uint8_t pipe_poll() { /************************************************************ @@ -47,6 +49,7 @@ uint8_t pipe_poll() // the data goes nowhere. uint8_t r = pipe.status; uint8_t dest = pipe.dest; + pipe_sleep = 1; if (pipe_busy() || !dest) return r; @@ -65,10 +68,11 @@ uint8_t pipe_poll() if (dest & pipe_cmd && valid & 0x1f) // cmd did not drain the buffer, yet goto done; - if (dest & pipe_flash && ~fs.status & FS_Ready) + if (dest & pipe_flash && ~fs.status & FS_Ready) { // flash did not finish yet, successfully + pipe_sleep = ~fs.status & FS_Busy; goto done; - + } // Return if next ADC reading is not yet due. // Come back here, until is is. @@ -79,6 +83,7 @@ uint8_t pipe_poll() // We are done with this buffer r &=~ PS_OUT; + pipe_sleep = 0; // Continue the flash stream. @@ -200,6 +205,7 @@ adc_done: goto done; // The buffer is full, send it. + pipe_sleep = 0; r |= PS_OUT; #ifdef HAVE_FPGA diff --git a/src/pipe.h b/src/pipe.h index 11519cf..dcafc5f 100644 --- a/src/pipe.h +++ b/src/pipe.h @@ -35,6 +35,8 @@ struct pipe { #endif } pipe; +extern uint8_t pipe_sleep; + struct pipe_config { struct pipe pipe; uint16_t page; diff --git a/src/thhor.c b/src/thhor.c index a666889..77c967a 100644 --- a/src/thhor.c +++ b/src/thhor.c @@ -48,7 +48,7 @@ int main() // The sleep command will execute even when an irq becomes // pending after cli(). It will wake us immediately. cli(); - if (!command_pending() || adc_busy() || spi_busy_p()) { + if (!command_pending() && pipe_sleep) { sei(); sleep_cpu(); } @@ -56,5 +56,7 @@ int main() command(); if (~magic.flags & hold_pipe) pipe_poll(); + else + pipe_sleep = 1; } } diff --git a/thhor_csa-topbot.png b/thhor_csa-topbot.png index 9d1145f..6396ca1 100644 Binary files a/thhor_csa-topbot.png and b/thhor_csa-topbot.png differ diff --git a/thhor_csa.pcb b/thhor_csa.pcb index b39fc89..bf5026d 100644 --- a/thhor_csa.pcb +++ b/thhor_csa.pcb @@ -9,8 +9,8 @@ Grid[0.5000mm 0.0000 0.0000 1] PolyArea[200000000.000000] Thermal[0.500000] DRC[0.1999mm 0.0100mm 0.1500mm 0.0025mm 0.3000mm 0.2000mm] -Flags("nameonpcb,alldirection,clearnew,thindrawpoly,locknames") -Groups("1,c:2:3:4:5:6,s:7:8") +Flags("nameonpcb,alldirection,clearnew,thindrawpoly") +Groups("1,c:2:5:4:3:6,s:7:8") Styles["Signal,0.2000mm,0.7000mm,0.3000mm,0.2000mm,0.5000mm:Power,0.6000mm,1.0000mm,0.5000mm,0.2000mm,0.8000mm:Fat,1.0000mm,4.0000mm,2.2000mm,0.2000mm,4.1000mm:Skinny,0.1524mm,0.6101mm,0.3000mm,0.1524mm"] Symbol[' ' 0.4572mm] ( @@ -7581,6 +7581,7 @@ Layer(1 "top" "copper") Text[21.5000mm 43.0000mm 0 261 "THHOR CSA V01M" "clearline"] Text[20.9000mm 39.1000mm 1 168 "2026-05-04 SiB" "clearline"] Text[23.3000mm 39.1000mm 1 152 "FORGE.BEXUS.ORG" "clearline"] + Text[55.5000mm 27.5000mm 1 300 "1" "clearline"] Polygon("via") ( [22.2000mm 15.2000mm] [22.1933mm 15.2368mm] [22.1862mm 15.2714mm] [22.1246mm 15.6076mm] [22.1035mm 15.6311mm] @@ -7630,17 +7631,25 @@ Layer(1 "top" "copper") ) Layer(2 "ground" "copper") ( + Text[55.5000mm 25.5000mm 1 300 "2" "clearline"] Polygon("clearpoly") ( - [65.0000mm 83.5000mm] [65.0000mm 7.5000mm] [63.5000mm 6.0000mm] [7.5000mm 6.0000mm] [6.0000mm 7.5000mm] - [6.0000mm 83.5000mm] [7.5000mm 85.0000mm] [63.5000mm 85.0000mm] + [65.0000mm 83.5000mm] [63.5000mm 85.0000mm] [7.5000mm 85.0000mm] [6.0000mm 83.5000mm] [6.0000mm 7.5000mm] + [7.5000mm 6.0000mm] [63.5000mm 6.0000mm] [65.0000mm 7.5000mm] + Hole ( + [55.5000mm 12.0000mm] [55.5000mm 28.5000mm] [60.0000mm 28.5000mm] [60.0000mm 12.0000mm] + ) ) ) Layer(3 "vfet" "copper") ( + Text[55.5000mm 17.0000mm 1 300 "5" "clearline"] Polygon("clearpoly") ( [6.0000mm 6.0000mm] [65.0000mm 6.0000mm] [65.0000mm 85.0000mm] [6.0000mm 85.0000mm] + Hole ( + [55.5000mm 12.0000mm] [55.5000mm 28.5000mm] [60.0000mm 28.5000mm] [60.0000mm 12.0000mm] + ) ) ) Layer(4 "vss" "copper") @@ -7681,6 +7690,7 @@ Layer(4 "vss" "copper") Line[58.3000mm 71.6000mm 58.8000mm 71.6000mm 0.2000mm 0.4000mm "clearline"] Line[58.8000mm 71.6000mm 61.1000mm 69.3000mm 0.2000mm 0.4000mm "clearline"] Line[61.1000mm 69.3000mm 61.1000mm 57.2000mm 0.2000mm 0.4000mm "clearline"] + Text[55.5000mm 20.0000mm 1 300 "4" "clearline"] Polygon("clearpoly") ( [65.0000mm 39.0000mm] [40.0000mm 39.0000mm] [34.5000mm 33.5000mm] [34.5000mm 6.0000mm] [6.0000mm 6.0000mm] @@ -7699,6 +7709,7 @@ Layer(5 "vcc" "copper") Line[16.1000mm 66.3000mm 16.3000mm 70.4000mm 0.2000mm 0.4000mm "clearline"] Line[10.2000mm 57.3000mm 10.2000mm 64.8000mm 0.2000mm 0.4000mm "clearline"] Line[11.7000mm 66.3000mm 10.2000mm 64.8000mm 0.2000mm 0.4000mm "clearline"] + Text[55.5000mm 22.5000mm 1 300 "3" "clearline"] Polygon("clearpoly") ( [34.5000mm 6.0000mm] [6.0000mm 6.0000mm] [6.0000mm 56.5000mm] [65.0000mm 56.5000mm] [65.0000mm 39.0000mm] @@ -8340,6 +8351,7 @@ Layer(6 "bottom" "copper") Line[54.8000mm 72.1000mm 55.6000mm 72.1000mm 0.2000mm 0.4000mm "clearline"] Line[55.6000mm 70.4000mm 55.6000mm 72.1000mm 0.2000mm 0.4000mm "clearline"] Line[54.1000mm 70.4000mm 53.1000mm 72.1000mm 0.2000mm 0.4000mm "clearline"] + Text[55.5000mm 13.0000mm 1 300 "6" "clearline,onsolder"] ) Layer(7 "outline" "outline") (