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
Hi, Ziemlich interessantes Projekt. Ich werde es jedenfalls aufmerksam verfolgen :)
+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.
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
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)
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?
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
>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.
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.
Wie ich sehe, hast Du's auf Hackaday gestellt: https://hackaday.com/2021/11/13/using-vhdl-to-generate-discrete-logic-pcb-designs/
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
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
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
>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.
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^^
>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.
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.
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
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
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.
Hallo Tim. Ich hatte dir eine PN geschickt. Ist die angekommen? VG Peter
Peter S. schrieb: > Ich hatte dir eine PN geschickt. > Ist die angekommen? Habe sie jetzt wiedergefunden.
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.
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
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
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.
Sehr schön. Mit welcher oss-cad-suite Version arbeitest du? VG Peter
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.