Forum: Projekte & Code PCBFlow - Automatisches Generieren von PCB Layouts aus VHDL code (Work in Progress)


von Tim  . (cpldcpu)


Angehängte Dateien:

Lesenswert?

Hier ein etwas verrückteres Projekt: Ich arbeite gerade an einem 
automatisierten Designflow, um aus einem in einer 
Hardwarebeschreibungssprache (VHDL) beschriebenen Digitaldesign ein PCB 
zu erzeugen, welches das Design in diskreter Logik implementiert. Die 
erzeugten Designfiles sollten sich dann idealerweise bei einem 
Bestückungsservice fertigen lassen.

Um die unweigerliche Sinnfrage gleich vorweg zu nehmen: Der Hauptzweck 
bestand für mich darin, sich mit EDA Flows an einem praktischen Beispiel 
auseinandersetzen zu können. (Und etwas mehr Python zu lernen).

Der verwendete Logikstil ist Resistor-Transistor-Logik (RTL), in einem 
Flavor wie er in den 1960er Jahren in der CDC6600 verwendet wurde.

Mein aktueller Stand ist auf Github zu finden: 
https://github.com/cpldcpu/PCBFlow

Ein paar mehr Details auf HaD.io: 
https://hackaday.io/project/180839-vhdlverilog-to-discrete-logic-flow

Die Bilder anbei zeigen die Architektur des Flows, sowie ein etwas 
komplexeres Beispiel mit >700 Transistoren als output, eine CPU.

Die Synthese wird mit GHDL/Yosys durchgeführt. Das Placement und die 
Generierung des PCBs erledigt ein Python-Programm.

Danke auch noch einmal für die guten Tips im Thread hier: 
Beitrag "PCB Layout automatisch generieren"

: Bearbeitet durch User
von Han (Gast)


Lesenswert?

Hi,

Ziemlich interessantes Projekt. Ich werde es jedenfalls aufmerksam 
verfolgen :)

von Max M. (Gast)


Lesenswert?

+1 für den nötigen Wahnsinn das zu bauen ;-)

Also yosys mach die RTL Synthese und die Netzliste, Du platzierts die 
fixen RTL Funktionsblöcke in einer Matrix und lässt Eagle + Freeroute 
dann die Arbeit machen.
Nicht unclever, aber Du solltest dann VCC und GND zumindest mehr 
Leiterbahnbreite spendieren und auch ruhig ein paar verteilten 
Kondensatoren.
RTL ist ein Stromfresser und bei den dünnen Leitungen und der Ausdehnung 
bekommt man da schnell Probleme.

LEDs für die A/D Pins würde das Retro Herz sicher auch erfreuen.

Man sieht aber eben auch sehr schön, was bis heute maschinell alles 
nicht geht.
Autoplacer die die Bauteile sinnvoll anordnen können hat noch niemand je 
gebaut, auch Du nicht und der Autorouter zieht nur Striche nach sehr 
einfachen Regeln.

Wenn man das mal mit Deinem LCPU Projekt auf Hackaday vergleicht, ist 
die zweifellos handgemachte LCPU Ästhetisch, und das automatisch 
generierte ein unförmiger Klecks Bauteile mit fraglicher VCC / GND 
Führung.

Probier mal was Du mit Netzklassen und Routing Prioritäten beim 
Autorouter noch rausholen kannst.
Da jede Logigzelle unten einmal GND und oben einmal VCC braucht, wäre es 
vielleicht garnicht schlecht mit der Matrixanordnung der Zellen auch 
gleich dicke VCC / GND Rails mit Kondensatoren zu zeichnen.
Die I/Os kann ja wieder Freeroute machen.

Eine Portierung auf Kicad wäre doch ganz nett.
Nicht jeder drückt den Wegezoll an Autodesk ab um Eagle benutzen zu 
können.

von Tim  . (cpldcpu)



Lesenswert?

Max M. schrieb:
> +1 für den nötigen Wahnsinn das zu bauen ;-)

;)

> Nicht unclever, aber Du solltest dann VCC und GND zumindest mehr
> Leiterbahnbreite spendieren und auch ruhig ein paar verteilten
> Kondensatoren.
> RTL ist ein Stromfresser und bei den dünnen Leitungen und der Ausdehnung
> bekommt man da schnell Probleme.

Ja, ich habe in der letzten Iteration einer Power-Netzklasse eingeführt, 
die breite Leiterbahnen nutzt. Anbei das erste PCB, das ich jetzt auch 
fertigen lassen. Ich habe dort auch manuell eine Groundplane eingeführt.

> LEDs für die A/D Pins würde das Retro Herz sicher auch erfreuen.

Genau, kommt auf die Todo-Liste :)

> Wenn man das mal mit Deinem LCPU Projekt auf Hackaday vergleicht, ist
> die zweifellos handgemachte LCPU Ästhetisch, und das automatisch
> generierte ein unförmiger Klecks Bauteile mit fraglicher VCC / GND
> Führung.

Ja, das Problem wird sich wohl nicht so einfach lösen lassen. Wenn man 
sich IC-Layouts anschaut, sind die per Hand gerouteten Bereiche ja auch 
sofort offensichtlich.

> Eine Portierung auf Kicad wäre doch ganz nett.
> Nicht jeder drückt den Wegezoll an Autodesk ab um Eagle benutzen zu
> können.

Der Flow nutzt ja nur das Eagle fileformat. Man kann es mit jedem 
Programm weiter verarbeiten, welches dieses einlesen kann (Fast alle).

: Bearbeitet durch User
von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Das ist durchaus ein sehr interessantes Projekt.
Spuckt er denn am Ende auch aus wie hoch der Takt maximal sein darf?

Wenn ich de jetzt meinen MIPS TTL VHDL Code druchjage kommt sicher ne 
10mx10m Platine bei raus.
Wärs möglich eine Platinenaufteilung nach Baugruppen zu ermöglichen?
(Nur ne Frage, das soll nicht implementiert werden)

von Bernd (Gast)


Lesenswert?

Tim  . schrieb:
> Der verwendete Logikstil ist Resistor-Transistor-Logik (RTL)
Lassen sich da ggf. auch höher integrierte Bauteile wie z.B. ein 7400 
über Bibliotheken nachrüsten?

von Tim  . (cpldcpu)


Lesenswert?

Mw E. schrieb:
> Das ist durchaus ein sehr interessantes Projekt.
> Spuckt er denn am Ende auch aus wie hoch der Takt maximal sein darf?

Dazu müsste man die timing-information der Zellen im liberty-file 
hinterlegen, dann müsste sich das Timing prinzipiell auswerten lassen.

Mw E. schrieb:
> Wärs möglich eine Platinenaufteilung nach Baugruppen zu ermöglichen?
> (Nur ne Frage, das soll nicht implementiert werden)

Das einfachste wäre natürlich, das Design in Module aufzuteilen und 
diese einzeln zu PCBs zu synthetisieren.

Bernd schrieb:
> Tim  . schrieb:
>> Der verwendete Logikstil ist Resistor-Transistor-Logik (RTL)
> Lassen sich da ggf. auch höher integrierte Bauteile wie z.B. ein 7400
> über Bibliotheken nachrüsten

Ja, ich bin gerade dabei eine Library auf Basis von 74LVC single gate 
logik zu implementieren. Damit werden die Designs deutlich dichter und 
man sollte Taktraten im zweistelligen MHZ-Bereich erreichen können.

P.s.: JLCPCB übertrifft sich gerade selbst mit der Platine oben: 27 
Stunden vom Absenden des Auftrags bis zur bestückten Platine an der 
Inspektion.

: Bearbeitet durch User
von chris_ (Gast)


Lesenswert?

>Um die unweigerliche Sinnfrage gleich vorweg zu nehmen: Der Hauptzweck
>bestand für mich darin, sich mit EDA Flows an einem praktischen Beispiel
>auseinandersetzen zu können.

Ein super cooles Projekt. Ich bin begeistert :-)
Ein Screenshot der resultierenden echten Platine wäre dann schön.

von Vancouver (Gast)


Lesenswert?

Kewle Sache. Da stellt sich die Frage, ob man nicht anstelle einen 
Schematics für eine herkömmliche Schaltung mit allen möglichen Bauteilen 
auch einen VHDL-Code  schreiben könnte, der einfach nur die Verbindungen 
zwischen den Komponenten beschreibt. Das würde das nervige Zeichnen von 
Schaltplansymbolen ersparen, die man vielleicht nur ein einziges mal 
braucht. Stattdessen könnte man Generics, Generate-loops und Vektoren 
für Busse verwenden und ganze wiederverwendbare Submodule (z.B. für 
Spannungsversorgungen, Filter, oder MCUs mit Speicher und allem 
Drumherum) definieren.
Über Generics könnte man den einzelnen Modulen einen Footprint und 
weitere Parameter mitgeben, die vom PCB-Tools ausgewertet werden.

Für Leute, die es seit Jahrzehnten gewohnt sind, Schematics zu zeichnen, 
wäre das vielleicht nicht das richtige. Aber z.B. ein FPGA-Designer käme 
schnell damit klar.

von chris_ (Gast)


Lesenswert?


von Sönke P. (snke_p)


Lesenswert?

Vancouver schrieb:
> Kewle Sache. Da stellt sich die Frage, ob man nicht anstelle einen
> Schematics für eine herkömmliche Schaltung mit allen möglichen Bauteilen
> auch einen VHDL-Code  schreiben könnte, der einfach nur die Verbindungen
> zwischen den Komponenten beschreibt.

Nicht VHDL (bzw. VHDL-AMS), aber vielleicht ist das ja interessant für 
Dich: https://github.com/devbisme/skidl

von Tim  . (cpldcpu)


Lesenswert?

chris_ schrieb:
> Ein super cooles Projekt. Ich bin begeistert :-)
> Ein Screenshot der resultierenden echten Platine wäre dann schön.

Danke! Kommt nächstes WE.

Vancouver schrieb:
> Kewle Sache. Da stellt sich die Frage, ob man nicht anstelle einen
> Schematics für eine herkömmliche Schaltung mit allen möglichen Bauteilen
> auch einen VHDL-Code  schreiben könnte, der einfach nur die Verbindungen
> zwischen den Komponenten beschreibt. Das würde das nervige Zeichnen von
> Schaltplansymbolen ersparen, die man vielleicht nur ein einziges mal
> braucht. Stattdessen könnte man Generics, Generate-loops und Vektoren
> für Busse verwenden und ganze wiederverwendbare Submodule (z.B. für
> Spannungsversorgungen, Filter, oder MCUs mit Speicher und allem
> Drumherum) definieren.

Genau dafür bin ich auch über Skidl gestoßen, welches oben auch schon 
empfohlen wurde. Leider erlaubt es (noch) kein Placement, weshalb ich am 
Ende zu einer eigenen Lösung gegriffen habe.

Sönke P. schrieb:
> Nicht VHDL (bzw. VHDL-AMS), aber vielleicht ist das ja interessant für
> Dich: https://github.com/devbisme/skidl

Ja, das sieht ziemlich schick aus!

chris_ schrieb:
> Wie ich sehe, hast Du's auf Hackaday gestellt:

Das hat jemand anderes eingereicht. War aber trotzdem gut, etwas 
Feedback zu bekommen.

: Bearbeitet durch User
von Tim  . (cpldcpu)


Angehängte Dateien:

Lesenswert?

Exakt 8 Tage nach Absenden der Bestellung sind die PCBs per Europaket 
eingetroffen. Sieht aus, als wenn alles genau so funktioniert wie es 
soll.

Die Logik ist noch etwas langsam, aber das liegt vor allem an den 
langsamen und dafür günstigen Transistoren und den konservativ gewählten 
Collector- und Basiswiderständen.

Ein paar mehr Details hier:

https://hackaday.io/project/180839-vhdlverilog-to-discrete-logic-flow/log/200453-hardware-verification

P.s.: Die nächste Iteration sollte wirklich ein paar LEDs bekommen.

: Bearbeitet durch User
von chris_ (Gast)


Lesenswert?

>Exakt 8 Tage nach Absenden der Bestellung sind die PCBs per Europaket
>eingetroffen. Sieht aus, als wenn alles genau so funktioniert wie es
>soll.

Sehr schön ... sieht gut aus.
Was hast Du denn für die Platinen bezahlt?
Interessant wäre zu wissen, wie teuer ein kleiner Demo 4-Bit Controller 
kommt ... oder vielleicht Deine Minimal CPU.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

chris_ schrieb:
> Was hast Du denn für die Platinen bezahlt?

Sieht nach 2-Layer auf max 100x100mm aus ... $2 also für 5 Stück oder 
so.

Ich persönlich hätte gerne eine Version, die gleich mit 4-Layern 
arbeitet und keine Power-Tracks oben und unten verlegt sondern gleich 
direkt am Bauteil in die Layer stitcht 🤔

Ich zahle auch gerne $10 für 100x100^^

von chris_ (Gast)


Lesenswert?

>Sieht nach 2-Layer auf max 100x100mm aus ... $2 also für 5 Stück oder
>so.

Ich glaube, die sind viel kleiner als 100x100mm, wenn man mal die 
Transistorgrößen und die Löcher so anschaut.
Vielleicht wäre es schöne ein zu haben, einfach so als Demo und mal das 
Oszi an die Signale zu halten.

von Tim  . (cpldcpu)


Angehängte Dateien:

Lesenswert?

chris_ schrieb:
> Was hast Du denn für die Platinen bezahlt?

Bei der kleineren Version des Counters waren es $11.12 für die 
Bestückung von zwei PCBs, inkl. Bauteilen (Alle "Basic"). Allerdings 
gibt es im Moment $10 Gutscheine für die Bestückung, wenn man über 
EasyEDA ordert...

chris_ schrieb:
> Interessant wäre zu wissen, wie teuer ein kleiner Demo 4-Bit Controller
> kommt ... oder vielleicht Deine Minimal CPU.

Das habe ich schon abgeschätzt. Die MCPU würde je nach Logikfamilie 
zwischen $11.14 und $21.3 kosten. Das sind die Bauteilkosten und 
Assembly pro Platine. Dazu kommen noch die $7 Grundgebühr. In der 
günstigsten Logikfamilie (RTL) kostet der Transistor nur $0.0075. Dazu 
kommen noch jeweils 2-3 Widerstände.

Mampf F. schrieb:
> Ich persönlich hätte gerne eine Version, die gleich mit 4-Layern
> arbeitet und keine Power-Tracks oben und unten verlegt sondern gleich

Das lässt sich ziemlich einfach über den Autorouter erreichen. Die 
ersten Tests waren aber eher mittelmässig.

chris_ schrieb:
> Ich glaube, die sind viel kleiner als 100x100mm, wenn man mal die
> Transistorgrößen und die Löcher so anschaut.

Eher 50x50mm². Habe mal ein aktuelles Beispiel einer PCB vor dem Routing 
angehängt. Inzwischen werden auch automatisch LEDs eingebaut.

> Vielleicht wäre es schöne ein zu haben, einfach so als Demo und mal das
> Oszi an die Signale zu halten.

Schreib mir eine PM. Es bleiben ja immer welche über :) Oder 
Synthetisiere Deine eigene, die Tools liegen ja auf dem oben verlinkten 
Github-account.

von Tim  . (cpldcpu)



Lesenswert?

Kleines Update:

In der Zwischenzeit habe ich mit weitere Logikstilen experimentiert:

RT       - Standard, Resistor Transitor Logik
RTPG     - RTL mit Vereinfachungen durch die Nutzung von 
NPN-Transistoren als pass gates
NMOS     - NMOS Logik basierend auf 2N7002
Hybrid   - Mischform aus NMOS und RTPG zur Minimierung der Bauteilezahl
amux     - Analog Multiplexer-Logik
amux+LVC - Analog Multiplexer-Logik mit 1G175 DFF
74LVC    - Nutzen 1G57 und 1G175 single gate logik. Sehr dicht und 
schnell.
LTL      - LED Transistor Logic :) (Work in Progress)

Zur Analog Multiplexer Logik habe ich schon ein erstes PCB erhalten, 
welches leider einen Fehler enthielt:

https://hackaday.io/project/180839-vhdlverilog-to-discrete-logic-flow/log/200531-analog-multiplexer-logic-and-post-layout-extraction

Ich habe daraufhin in den Workflow noch eine post-layout-extraction 
integriert, welche die Spice netzliste nach dem Placement extrahiert, um 
die Funktion per Simulation überprüfen zu können. Das sollte 
Verdrahtungsfehler leicht aufdecken können.

Zur Überprüfung der anderen Logikstile habe ich ein paar Boards in 
Auftrag gegeben (Anhang), die nächste Woche bei mir sein sollten. Neben 
Zählern gibt es auch einen elektronischen Würfel. Wenn damit alles in 
Ordnung ist, werde ich mich an die Synthese einer CPU wagen.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Tim  . schrieb:
> Die Logik ist noch etwas langsam

Deutlich schneller als RTL ist DTL.
Zu DDR-Zeiten gab es die KME3 Hybrid ICs, die konnten bis 5MHz zählen.
Integriert waren ein Transistor, eine Mehrfachdiode und Widerstände. Für 
das schnelle Entladen der Basis wurden -3V verwendet.

https://www.u-r-rennert.de/dig/kme3.html

von Tim  . (cpldcpu)


Lesenswert?

Peter D. schrieb:
> Tim  . schrieb:
>> Die Logik ist noch etwas langsam
>
> Deutlich schneller als RTL ist DTL.
> Zu DDR-Zeiten gab es die KME3 Hybrid ICs, die konnten bis 5MHz zählen.
> Integriert waren ein Transistor, eine Mehrfachdiode und Widerstände. Für
> das schnelle Entladen der Basis wurden -3V verwendet.
>
> https://www.u-r-rennert.de/dig/kme3.html

Interessant! Die NOR2-Gatter mit dem resistiven Spannungsteiler am 
Eingang sind natürlich sehr Bauteileffizient, aber vermutlich musste man 
sich sehr genaue Gedanken über den Fan-Out machen.

Mit den richtigen Transistoren ist RTL allerdings schon recht schnell. 
Es gab immerhin 1966 einen Supercomputer, der mit 10 MHz getaktet war:

https://en.wikipedia.org/wiki/CDC_6600
https://cpldcpu.wordpress.com/2020/02/14/what-made-the-cdc6600-fast/

Die Platine oben enthält auch eine Sektion, in der ich die PMBT2369 als 
Transistoren verwendet habe. Mal sehen, wie weit sich der counter Takten 
lässt.

von Peter S. (petersieg)


Lesenswert?

Hallo Tim.

Ich hatte dir eine PN geschickt.
Ist die angekommen?

VG Peter

von Tim  . (cpldcpu)


Lesenswert?

Peter S. schrieb:
> Ich hatte dir eine PN geschickt.
> Ist die angekommen?

Habe sie jetzt wiedergefunden.

von Tim  . (cpldcpu)


Angehängte Dateien:

Lesenswert?

Zweiter Versuch zur analog-multiplexer logik:

https://hackaday.io/project/180839-vhdlverilog-to-discrete-logic-flow/log/200990-analog-multiplexer-logic-second-attempt

Dieses mal hat alles geklappt und es sind funktionsfähige Schaltungen 
erzeugt worden. Es gab eine Variante in der auch die Latches aus 
Multiplexern erzeugt wurden und eine, in der ich stattdessen 74LVC1G175 
D-Flipflops eingesetzt habe. Die Performance ist äußerst erfreulich: 
Beide Logikstyles haben mit 15 MHz kein Problem. Weiter habe ich es noch 
nicht probiert.

Außerdem habe ich auf dem gleichen PCB auch ein "sinnvolles" Design 
realisiert: Einen elektronischen Würfel (siehe Anhang).

Das andere PCB steckt leider seit einer Woche im Zoll fest.

von Peter S. (petersieg)


Lesenswert?

Die neuen Usage Informationen auf github sind sehr hilfreich und das 
oss-cad-suite Paket vereinfacht die Nachnutzung doch erheblich.

Ich hatte zwar keine diff Ausgabe im Vergleich mit meiner manuellen 
Installation und dem oss-cad-suite Paket bei dem erzeugten brd, trotzdem 
nutze ich ab jetzt das Paket. Da ist alles schön gekapselt. ;-)

VG Peter

von Peter (Gast)


Lesenswert?

Noch ein Hinweis zum oss-cad-suite Paket:
Das hier benötigte ghdl und ghdl-yosys-plugin ist NUR in dem Linux Paket 
enthalten. Es fehlt bei Darwin und Windows, wegen Cross Compiling Issues 
- siehe Issues.

VG Peter

von Tim  . (cpldcpu)


Lesenswert?

Ein kleines Update: Ich habe den PCBFlow genutzt, um eine auf dem NE555 
basierende Logikfamilie zu implementieren. Diese habe ich für zwei 
Beträge zum NE555 Wettbewerb genutzt:

NE555 dice
https://hackaday.io/project/183038-ne555-dice-inversion

NE555 CPU
https://hackaday.io/project/182915-555enabled-microprocessor

Die Performance von NE555 Logik ist leider sehr begrenzt und daher nicht 
zur Nachahmung empfohlen. Zeigt aber, war der Workflow kann.

von Peter S. (petersieg)


Lesenswert?

Sehr schön.
Mit welcher oss-cad-suite Version arbeitest du?

VG Peter

von Tim  . (cpldcpu)


Lesenswert?

Ehrlich gesagt nutze ich immer noch meine installiation der 
fpga-toolchain. (https://github.com/YosysHQ/fpga-toolchain)

Die OSS CAD suite ist aus mir unklaren Gründen deutlich langsamer. Hat 
die letzte Version noch die GHDL-Integration?

Es scheint im Yosys-Projekt da einen Interessenskonflikt zu geben, da 
sie ihre eigene VHDL Lösung in Tabby CAD kommerziell anbieten: 
https://www.yosyshq.com/tabby-cad-datasheet

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Tim  . schrieb:
> NE555 CPU
> https://hackaday.io/project/182915-555enabled-microprocessor
>
> Die Performance von NE555 Logik ist leider sehr begrenzt und daher nicht
> zur Nachahmung empfohlen. Zeigt aber, war der Workflow kann.

Ist ja echt schräg - positiv gemeint!

NE555-Logic ... Was es alles gibt 😂

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.