Ich würde für ein Projekt gerne ein PCB-Layout basierend auf vorgegebenen Einheitszellen automatisch generieren. z.B. eine Matrix aus LEDs samt Ansteuertransistor oder eine digitale Schaltung basierend auf einzelnen Gates. Ich frage mich, wie ich das am besten und flexibelsten mit frei verfügbarer Software erreiche. 1) Die Schaltung liegt als Spice-Netliste vor. Basierend darauf könnte man natürlich auch andere Formate generieren 2) Der nächste Schritt wäre das Placement. Hierzu müsste man die Bauteile basierend auf schon vorhandenen Footprints auf dem PCB anordnen. Idealerweise erfolgt das mit einer heuristischen Optimierung, um benachbarte Zellen nahe beieinander anzuordnen. Für einen ersten Schritt reicht auch eine Matrix. 3) Das Routing könnte man mit vorhandenen Autoroutern machen (z.B. Freerouting oder eingebauten Routern) Welche Open Source Software oder freie Software wäre hierfür gut geeignet? Gibt es ein freies PNR-Tools für PCBs? Für ICs gibt es Greywolf und OpenROAD, allerdings sind diese weniger für den PCB-Flow zugeschnitte. Theoretisch wäre eine Adaption denkbar, allerdings wird der Import ins PCB-Tools nicht einfach? Bliebe die Option, ein einfaches Placement als Script zu implementieren. Ich habe mir KiCad, Horizon, EasyEDA und LibrePCB angeschaut. Alle bieten eine Art Scriptinterface, allerdings gibt es dafür meist wenig Beispiele. Integriertes PNR scheint Target anzubieten, aber nur ein einer teuren Bezahlversion. Habe ich etwas übersehen? Gibt es hierzu noch weitere Ideen? Ich weiß, dass das kein triviales Problem ist. Meist wird man per Hand auch nicht lange brauchen und bessere Ergebnisse erzielen - das ganze ist eher als akademische Aufgabe zu sehen :)
:
Bearbeitet durch User
Du hast bereits alle Programme aufgezählt, wo ich mal geschaut hätte. Wenn es eine akademische Aufgabe ist: Altium bietet für akademische Projekte eine kostenlose Lizenz für ein halbes Jahr an (kann immer wieder verlängert werden). Vorraussetzung ist eine gültige Hochschul-Emailadresse. Schau dir den Multichannel-Kram in Altium an...ich denke das ist es was du suchst.
Wühlhase schrieb: > Wenn es eine akademische Aufgabe ist: Altium bietet für akademische > Projekte eine kostenlose Lizenz für ein halbes Jahr an (kann immer > wieder verlängert werden). Das war leider eher sprichwörtlich gemeint :) Danke für Deine Antwort. Es scheint also keine einfache Lösung zu geben.
Ich kenne eine Firma die nix anderes macht als LED Matrix Displays, für die musste ich ein Layout machen. Die machen alles von Hand mangels guter Tools. Mit Altium kannst du das schnell erledigen mit Copy-Paste ohne Skript.
Pro schrieb: > Die machen alles von Hand mangels > guter Tools. Bitte WAS? In vielen Tools kann man die Positionen schön lesbar als Koordinaten angeben. Wenn man ganze Baugruppen hat und die im Raster platzieren will, dann gibt es für die Positionen aller Elemente der Baugruppe einen X und Y Offset.
Habe ein paar Beispiele für das Erzeugen von Layouts per Python in KiCad gefunden: https://forum.kicad.info/t/python-scripting-example-studio-clock/5387/13 SKIDL sieht auch sehr interessant aus: https://xess.com/skidl/docs/_site/index.html
:
Bearbeitet durch User
Gustl, der Echte! schrieb: > In vielen Tools kann man die Positionen schön lesbar als Koordinaten > angeben. Wenn man ganze Baugruppen hat und die im Raster platzieren > will, dann gibt es für die Positionen aller Elemente der Baugruppe einen > X und Y Offset. Und was ist daran komfortabel oder schnell? Leute, die sich solcher Handarbeit hingeben, sollten entlassen werden.
Wühlhase schrieb: > Handarbeit Natürlich nicht. Zumindest bei Eagle stehen in der .brd die Koordinaten direkt drinnen. Ich wette da gibt es schon fertige Sktipte um Bauteile automatisch zu platzieren. Und wenn nicht dann ist das auch selber schnell geschrieben.
Wiebiele LED sind das zum plazieren? Bitte genauere Angaben. Wieviele Stunden würde es dauern diese manuell zu plazieren im Vergleich das Script zum gewünschten Ergebniss zu programmieren ? Und meistens macht der Autorouter dann auch noch Probleme und im Vergleich zu manuellem routing ist der Autorouter auch noch viel schlechter. AI die das Gehirn eines guten Layouters ersetz gibt es afaik noch nicht. Auch wenn das in so tollen Videos versucht wird zu verkaufen. Denn die AI muss auch trainiert werden. Was ist günstiger? Zig Leute zusätzlich beschäftigen um den Versuch zu starten das zu Automatisieren oder einfach die Leute zu bezahlen. Das Gehirn ist noch immer im Kopf der Leute zu finden und nicht im dem umgebenden Konstrukt.
:
Bearbeitet durch User
Gustl, der Echte! schrieb: > In vielen Tools kann man die Positionen schön lesbar als Koordinaten > angeben. Wenn man ganze Baugruppen hat und die im Raster platzieren > will, dann gibt es für die Positionen aller Elemente der Baugruppe einen > X und Y Offset. Bei anderen Programmen (z.B. EAGLE), stellt man sich das Raster ein, so wie die Elemente plaziert werden sollen, fügt eine Reihe ein und kopiert sie dann noch ein paar mal. Das geht schneller, als irgendwelche Tools rauszukramen. Und in ernsten Fällen, kann man sich in der Tabellenkalkulation seiner Wahl ein Script erzeugen lassen, mit dem im ECAD die Module dann beliebig angeordnet werden können.
Chris K. schrieb: > Das Gehirn ist noch immer im Kopf der Leute zu finden und nicht im dem > umgebenden Konstrukt. Solche Aufgaben sind zwar für einen geübten Layouter kein Ding, der wird auch sehr oft, wenn nicht immer, schneller sein als der Autorouter, wenn man beide gleichzeitig startet (sprich: Den Autorouter erst noch konfigurieren muss). Anders sieht es bei Menschen aus, die noch nie ein Layout gemacht haben. Da hat der Autorouter, insbesondere bei Matrixanordnungen, die Nase ziemlich sicher vorn, das ist quasi die Paradedisziplin. Gib ihm mindestens 2 Innenlagen auf denen er sich austoben kann, dann klappt das sicher. Problematisch wirds erst, wenn man nur 2 Lagen zur Verfügung hat und beide die Außenlagen sind, wo auch die Bauteile Platziert werden oder wenn es sehr Eng zugeht. Altium wäre hier auch mein Favorit: Schaltplan einmal erstellen für ein Teilelement und dann beliebig oft widerholen und ebenso verhält es sich mit dem Layout: Einmal erstellen, so oft wie es Schaltplanseiten gibt wird das Layout quasi identisch "gestempelt". Einzig die Ansteuerung muss man dann noch zu den Einzelnen Blöcken ziehen, esseidenn, es gibt ein Serielles Bussystem. Dann entfällt das.
Hallo Wühlhase. Wühlhase schrieb: > Gustl, der Echte! schrieb: >> In vielen Tools kann man die Positionen schön lesbar als Koordinaten >> angeben. Wenn man ganze Baugruppen hat und die im Raster platzieren >> will, dann gibt es für die Positionen aller Elemente der Baugruppe einen >> X und Y Offset. > > Und was ist daran komfortabel oder schnell? Leute, die sich solcher > Handarbeit hingeben, sollten entlassen werden. 1) Es ist oft effizienter, das parametrisch durch Eintrageb von Zahlenwerten zu erledigen als durch "intuitives" Pixelschupsen mit der Maus. 2) Das offene Dateiformat bei KiCad animiert dazu, diese Einträge direkt per Skript in der Datei zu editieren. Ist letztlich nur eine Textdatei. Selbst copy und past mit einem Dateieditor wäre oft eine bequeme Methode, wenn man gut Kopfrechnen kann. :O) 3) Bei Altium wird das so nicht gehen, weil das Dateiformat nicht offen ist, aber ich gehe mal davon aus, das Altium genau so eine API als Schnittstelle für Skripte oder andere Programme hat wie KiCad oder Eagle auch. Per API wäre also die dritte Methode. Mit freundlichem Gruß: Bernd Wiebus alias dl1eic http://www.l02.de
Bernd W. schrieb: > 3) Bei Altium wird das so nicht gehen, weil das Dateiformat nicht offen > ist, aber ich gehe mal davon aus, das Altium genau so eine API als > Schnittstelle für Skripte oder andere Programme hat wie KiCad oder Eagle > auch. Per API wäre also die dritte Methode. Doch geht in Altium, sogar sehr leicht. Man kann in der der PCB List die Spalten X,Y und Rotation einfach nach Excel vor und zurück kopieren. Zweitens gib es die Möglichkeit über ein Text File "Place from File". Einfach ein Pick and Place file erzeugen, die Koordinaten ändern und wieder rein laden. Das Dateiformat ist leider beschixxx (Altium Bugs hurra) und mit Excel nicht einfach hinzu bekommen. Mit Phython usw. easy. Aber das sind technische Feinheiten. Es geht auf jeden Fall.
Hallo Taz G. Taz G. schrieb: >> 3) Bei Altium wird das so nicht gehen, weil das Dateiformat nicht offen >> ist, aber ich gehe mal davon aus, das Altium genau so eine API als >> Schnittstelle für Skripte oder andere Programme hat wie KiCad oder Eagle >> auch. Per API wäre also die dritte Methode. > > Man kann in der der PCB List die Spalten X,Y und Rotation einfach nach > Excel vor und zurück kopieren. Das ist natürlich etwas umständlich, verglichen mit einem offenen Dateiformat direkt. Excel Formate sind auch nicht gerade einfach, CSV wäre netter..... > Zweitens gib es die Möglichkeit über ein Text File "Place from File". > Einfach ein Pick and Place file erzeugen, die Koordinaten ändern und > wieder rein laden. Das Dateiformat ist leider beschixxx (Altium Bugs > hurra) und mit Excel nicht einfach hinzu bekommen. Mit Phython usw. > easy. Das würde dann einer Skript oder API Methode ähneln, wenn auch etwas verschroben. Python würde ich persönlich gegenüber Excel vorziehen. > Aber das sind technische Feinheiten. Es geht auf jeden Fall. ok, die nicht offenen Formate sind natürlich bei proprietärer Software obligatorisch, aber davon abgesehen gehören solche Möglichkeiten einfach zu einem guten Platinenlayoutsystem. Mit freundlichem Gruß: Bernd Wiebus alias dl1eic http://www.l02.de
Bernd W. schrieb: > Das ist natürlich etwas umständlich, verglichen mit einem offenen > Dateiformat direkt. Excel Formate sind auch nicht gerade einfach, CSV > wäre netter..... Nun ja STRG+C und STRG+V empfinde ich nicht als umständlich. Und das Datei format für "Place from File" ist offen. Eine einfache Textdatei, Werte mit Leerzeichen getrennt. Nur wie gesagt versucht mal mit Excel eine vernüpftige Textdatei mit Leerzeichen getrennt hinzu bekommen. CSV ohne Probleme (hat Altium in den alten Versionen gefressen) aber *.PRN - da waren meine Versuche echt ätzend.
> Bliebe die Option, ein einfaches Placement als Script zu implementieren. > Ich habe mir KiCad, Horizon, EasyEDA und LibrePCB angeschaut. Alle > bieten eine Art Scriptinterface, allerdings gibt es dafür meist wenig > Beispiele. Fehlt EAGLE. Ist zwar wie Altium keine Freie Software, aber das in einer Board-Datei verwendete XML-Format ist frei und sogar per DTD dokumentiert. Allerdings auch nicht ganz einfach, weil man die Struktur penibel einhalten muss und relativ viele Daten vorab kennen und reinkopieren muss (z.B. Packages aus der Library, Layer-Definitionen, Design-Rules). Aber dann wäre die Plazierung eines Teils einfach:
1 | <element name="R4711" library="MyLibrary" package="SMD-0402" value="10k" x="132.2" y="10"> |
Evtl. kann man in EAGLE ein leeres Board erzeugen und in einem Texteditor in einen Vorspann und einen Nachspann aufspalten (Boilerplate). Dazwischen baut das Script die <element>-Definition. Ähnlich macht man es mit den Netzen und Wires und fertig ist ein Board-File auf das man den Autorouter loslassen kann. Es gibt aber auch viele Beispiele für die eingebaute Scriptsprachen SCR und ULP.
:
Bearbeitet durch User
Tim . schrieb: > Es scheint also keine einfache Lösung zu geben. Doch. Und die Lösung(en) wurden ja genannt, daß Altium Textdateien zum platzieren frisst wußte ich auch noch nicht. Es ist halt nur keine kostenlose Lösung. ;)
Christian B. schrieb: > und dann beliebig oft widerholen Damit kannst du vielleicht WIEderstände routen.
Nikolaus S. schrieb: > Fehlt EAGLE. Ist zwar wie Altium keine Freie Software, aber das in einer > Board-Datei verwendete XML-Format ist frei und sogar per DTD > dokumentiert. > Allerdings auch nicht ganz einfach, weil man die Struktur penibel > einhalten muss und relativ viele Daten vorab kennen und reinkopieren > muss (z.B. Packages aus der Library, Layer-Definitionen, Design-Rules). > Aber dann wäre die Plazierung eines Teils einfach: So einen Käse veranstaltet man nicht! Praktisch alle CAD-Programme bieten ausreichend Scriptfähigkeiten, um derartige Strukturen zu erzeugen. Ich hab hier vor einigen Wochen eine Platine mit 200 identischen Zellen entwickelt. Dabei optimiert man zunächst eine Zelle incl. der Nachbarschaftsverbindung. Dann kopiert man diese mehrfach über die Import-Funktion rein (Eagle 6.5.0). Als Zwischenstufe habe ich 5er und 10er Blöcke angelegt und dann passend reinkopiert und platziert, ohne viel nacharbeiten zu müssen. Ein gescheites Raster hilft hier ungemein. Das Ganze kann man je nach Anforderung auch als Script umsetzen. Macht etwas mehr Arbeit am Anfang, läuft dann aber auf Knopfdruck, im Idealfall sogar parametrisch. Dafür braucht es aber wieder ein ULP.
Grade Altium findet sich seit Jahren auf vielen Piratenseiten. Es sollte also kein grosses Problem sein, sich eine Datei zu beschaffen, auch wenn man keine Uni-Adresse hat.
Ein kleines Update, falls jemand eine ähnliche Problemstellung lösen will: Letztendlich hat es sich als einfachste Lösung erwiesen, eagle brd files offline zu bearbeiten und sie danach in das PCB-Tool der Wahl zu importieren. Danke für die Tips oben! Es gibt einige Python-Packages zur Bearbeitung von Eagle-Dateien (z.B. Swoop, pyEAGLE, eaglepy). Allerdings scheinen die allesamt nicht mehr gepflegt zu werden. Da Eagle ein XML-basiertes Fileformat nutzt, lässt sich dieses allerdings auch vorzüglich mit der lxml lib bearbeiten. Beispielcode in Python zum Laden eines Eagle-BRD files, Einfügen eines Bauteils und Speichern unten. Einfacher geht es kaum...
1 | from lxml import etree as et |
2 | |
3 | filein = "input file.brd" |
4 | fileout = "output file.brd" |
5 | |
6 | dom = et.parse(filein) |
7 | n_eagle = dom.getroot() |
8 | n_board = n_eagle.find('drawing').find('board') |
9 | n_elements = n_board.find('elements') |
10 | |
11 | et.SubElement(n_elements, 'element', name = "Q2", library="lib", package="SOT23", value="BC847", x=str(0), y=str(0)) |
12 | |
13 | xml_str = et.tostring(dom, xml_declaration=True, pretty_print=True) |
14 | |
15 | f = open(fileout, 'wb') |
16 | f.write(xml_str) |
17 | f.close() |
:
Bearbeitet durch User
Danke für die Rückmeldung. In meinen Augen klingt deine Lösung aber eher kompliziert. Das können doch alle Programme mit den eingebauten Skriptmöglichkeiten von Haus aus. Einfach ein ULP in Eagle schreiben, sind sicher nicht mehr Zeilen. Ich vermute mal, am schnellsten geht es per Hand. Ein kleines Layout mit 8 Leds verdrahten, das Grid richtig setzen, und dann 4x kopieren, dann dieses Layout wieder 4x kopieren, usw.
udok schrieb: > Einfach ein ULP in Eagle schreiben, sind sicher nicht > mehr > Zeilen. Das ist ja nur ein kleiner Teil meines Codes. Mein Python code macht automatisches Placement mit einer Spice netlist als input. Alleine die Datenstrukturen dafür will ich nicht in einer ULP verwalten :) Anbei ein Beispiel. Jetzt muss nur noch der Autorouter mitspielen, eagle ist hier sehr schnell an Grenzen gekommen. Integriere gerade Freerouting in den Flow. Andreas schrieb: > uFlow wäre eine Möglichkeit: > https://github.com/jamesbowman/cuflow Danke, der spannend! Sieht aus wie SKIDL für PCBs. Bisher konnte ich noch nicht erkennen, wie das Routing übernommen wird?
Kannst mal sagen, was das ganze mal werden soll? Schreibst du ein super Python Layout Tool, oder willst du nur eine Schaltung einmal erzeugen? Wenn letzteres, dann machst du das viel zu kompliziert, und wenn ersteres, dann hast du die falschen Tools. Aus meiner Erfahrung heraus kann ich dir sagen, dass die ganzen skriptbasierten Layout und Spice Tools in der Praxis zu vergessen sind. Da gibt es immer Spezialfälle, die nicht gehen, und dann musst du in einer Netzliste mit mit dem Editor herumwerkeln. Nein Danke. Der Mensch denkt viel besser visuell, und textbasierte Lösungen sind da Krücken.
udok schrieb: > Kannst mal sagen, was das ganze mal werden soll? Das hatte ich im ersten Post schon ungefähr beschrieben. Im Detail versuche ich einen automatisierten Workflow zu erstellen, der aus einem in VHDL beschriebenen Logikdesign ein PCB erzeugt. Genau so, wie es bei ICs gemacht wird. Der Vorteil ist, dass man die PCBs einfacher fertigen kann. Als Beispiel unten ein in VHDL beschriebener Zähler. Mein Workflow erzeugt daraus ein PCB (Anhang), welches man direkt bei JLCPB bestellen und bestücken lassen kann (Anhang). Der Flow sieht aktuell so aus: 1) Synthese mit GHDL+Yosys in eine Spice-netlist. Die Zellen sind über ein liberty-File beschrieben 2) Ein Python-Programm liest die Netzliste, bricht einige der Standardzellen in weitere Primitives herunter (z.B. DFF in NOR2) und platziert sie in einem Grid. Das Placement wird anschließend mit einem einfachen Simulated Annealing Algorithmus optimiert. Danach wird das Grid ein Einzelbauteile zerlegt und in ein eagle-PCB eingefügt. 3) Der Eagle Autorouter (oder freerouting) erzeugt die Verbindungen 4) Order bei JLPCB Ist zugegebenermaßen nur bedingt Produktrelevant, aber ich habe eine Menge über Designflows gelernt, wie sie auch für ASICs verwendet werden. Ich muss die erzeugte Logik noch etwas optimieren, aktuell verbauchen die DFF 15 Transistoren. Hatte auch überlegt, den OpenROAD P&R zu verwenden, aber für kleine Designs reicht der aktuelle Optimierungsalgorithmus aus. Auch noch wichtig: Extraction aus dem PCB, LVS, Powergrid optimierung, bypass caps.
1 | library ieee; |
2 | use ieee.std_logic_1164.all; |
3 | use ieee.numeric_std.all; |
4 | |
5 | entity counterx is |
6 | port (clk: in std_logic; |
7 | rst: in std_logic; |
8 | count: out std_logic_vector(3 downto 0) |
9 | ); |
10 | end; |
11 | |
12 | architecture main of counterx is |
13 | signal cnt: unsigned(3 downto 0); |
14 | begin |
15 | |
16 | process (clk,rst) |
17 | begin |
18 | if rising_edge(clk) then |
19 | if (rst = '1') then |
20 | cnt <= (others => '0'); |
21 | else |
22 | cnt <= cnt + 1; |
23 | end if; |
24 | end if; |
25 | end process; |
26 | |
27 | count <= std_logic_vector(cnt); |
28 | end; |
:
Bearbeitet durch User
Kann mich dunkel erinnern, das Synopsis sowas ähnliches konnte. Die hatten eine 74-TTL Bibliothek, mit der man beliebige VHDL Logikdesigns in Standardgatter synthetisieren konnte... ist aber lange her. Es gibt aber open source Synthese tools, die das vielleicht können. Spendiere wenigstens eine Groundplane und/oder ein paar Stützkondensatoren. Mit dem Kupfer musst du auch nicht so geizen. Aber wozu macht man sowas? Langeweile? Long Covid Folgen? Aber selbst wenn man sowas sinnvoll findet, wozu verwendet man dann einzelne Transistoren, wenn man zu faul ist, die händisch zu verdrahten? Dann kannst doch gleich einen FPGA verwenden, oder übersehe ich da was. Ich mein, als Hobby für Pensionisten mit übermässig viel Freizeit kann ich mir ja sowas vorstellen, aber was ist dann der Sinn, da alles automatisch zu machen. De fakto bekommst du eine Blackbox per Post, und hast nicht das Gefühl "Super, das habe ich selber zusammengelötet".
Ein wesentlicher Unterschied zwischen den Logikelementen in einem FPGA und einem diskreten Aufbau besteht darin, dass im FPGA entsprechende Taktverteilstrukturen vorhanden sind, die sicherstellen, dass die Register gleichzeitig getaktet werden. Die ganze Logik ist mit ihren Setup-Zeiten genau darauf optimiert. Bei diskreter Logik muss man jedoch die teils recht langen Setup-Zeiten an Flip-Flops bzw. Registern einhalten. Bei 5 ns Setup benötigt man dafür schon einige Dezimeter an Leiterbahn. Wesentlich sinnvoller für den diskreten Aufbau ist daher ein mehrphasiger Takt, so dass aufeinanderfolgende Stufen immer phasenversetzt angesteuert werden und somit die Setup- und Hold-Zeiten eingehalten werden. Bei einem FPGA würde dieser zusätzliche Aufwand innerhalb einer Taktdomäne jedoch nur unnötig Ressourcen fressen. Gibt es denn Synthesewerkzeuge für diskrete oder integrierte Logik, denen man beibringen kann, dass unbedingt mit mehrphasigem Takt gearbeitet werden muss? Natürlich kann man das manuell in der Hardwarebeschreibung genau so formulieren, was ich auch schon getan habe, aber kann man automatisiert prüfen lassen, ob die Mehrphasigkeit strikt eingehalten wurde?
udok schrieb: > Kann mich dunkel erinnern, das Synopsis sowas ähnliches konnte. > ... Es gibt aber open source Synthese tools, die das vielleicht > können. Yosys kann so etwas mit dem richtigen Library file. Der Output ist allerdings nur eine Netzliste. P&R muss man selber machen. udok schrieb: > Spendiere wenigstens eine Groundplane und/oder ein paar > Stützkondensatoren. > Mit dem Kupfer musst du auch nicht so geizen. Später :) udok schrieb: > Aber selbst wenn man sowas sinnvoll findet, > oder übersehe ich da was. Vielleicht interessiert es mich mehr, an dem Flow zu arbeiten, als Schaltungen zu löten?
:
Bearbeitet durch User
Andreas S. schrieb: > Bei diskreter Logik muss man jedoch die teils recht langen Setup-Zeiten > an Flip-Flops bzw. Registern einhalten. Bei 5 ns Setup benötigt man > dafür schon einige Dezimeter an Leiterbahn. Wesentlich sinnvoller für > den diskreten Aufbau ist daher ein mehrphasiger Takt, so dass > aufeinanderfolgende Stufen immer phasenversetzt angesteuert werden und > somit die Setup- und Hold-Zeiten eingehalten werden. Bei einem FPGA > würde dieser zusätzliche Aufwand innerhalb einer Taktdomäne jedoch nur > unnötig Ressourcen fressen. > > Gibt es denn Synthesewerkzeuge für diskrete oder integrierte Logik, > denen man beibringen kann, dass unbedingt mit mehrphasigem Takt > gearbeitet werden muss? Ja, bei diskreter Logik arbeitet man üblicherweise mit mehrphasiger Logik und Latches. Die Pipelinestufen halbiert man auf die Halbzyklen. Für Synthesewerkzeuge und HDL ist so etwas allerdings nur schwer umsetzbar. Verilog kann zwar Latches beschreiben, aber Yosys hat bisher keine Möglichkeit, diese zu extrahieren. Es gibt einige Workarounds, welche aber allesamt nicht sehr schön sind. Ich habe mich daher entschieden nur DFF einzusetzen. Der Nachteil ist ein relativ hoher Aufwand in Transistoren: 15 Transistoren pro DFF für ein "sauberes" Design, 7 in einem pseudoanalogen Design. Die DFF nutzen interne clockbuffer, was Probleme mit glitches und setup-time violations etwas reduziert. Ein super-high-speed Design bekommt man damit natürlich trotzem nicht.
Btw, hier ist der aktuelle Stand des Projektes: Beitrag "PCBFlow - Automatisches Generieren von PCB Layouts aus VHDL code (Work in Progress)" https://github.com/cpldcpu/PCBFlow Diskussionen zu Sinn und Unsinn sind, glaube ich, nicht sehr zielführend. Der Ansatz ziehlt ausschließlich auf diskrete Digitaldesigns ab, die seit den 70/80er Jahren außerhalb des Hobbybereichs eher selten auf PCBs umgesetzt werden.
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.