Gibt es eine Möglichkeit VHDL Code (oder die Netzliste) für den Nutzer
"unsichtbar" zu machen? Es soll simulierbar und synthetisierbar sein,
aber eben, dass der Nutzer die Sourcen nicht ändern kann? (Also
Blackbox)
Hat das jemand schon mal gemacht? Am besten mit Altera Tools.
Dass man die Netzliste im Nachhinein ändern kann ist mir schon klar :-)
Grüße,
Kest
So ähnlich wie ein käuflicher IP-Core?
Prinzipiell geht das, aber da muss der Hersteller mitspielen.
Kurzum brauchst du, wenn du das richtig machen willst, vom Hersteller
(Altera) eine Art Schlüssel, mit dem du das Design verschlüsseln und der
Anwender nach Eingabe des Schlüssels in Quartus dann bestimmte Dinge mit
deinem Design machen oder auch nicht machen kann.
Das ist jetzt seehr bildlich formuliert.
Aber was ich damit sagen will:
Technisch möglich, aber organisatorisch quasi unmöglich, da Altera
sicher nicht mit jedem irgendsone Übereinkunft trifft.
Das ist dann für mich zu viel. Eigentlich möchte ich eine Netzliste
(Entity) haben, die ich überall einbinden kann (so wie CoreGen oder
MegaWizard).
Das blöde ist, dass ich VHDL mit Generics erstellen möchte, damit der
Nutzer frei alles einstellen kann aber eben nicht VHDL Code ändern darf.
Kest
Ich suche ebenso nach einer Möglichkeit, Code zu vertrieben, ohne ihn zu
publizieren. Ginge das gfs auf einer neidirgeren Ebene eines geparsten
files, so wie beim C++ eine DLL?
Also nen EDIF-Netzlsite kannst als "Black Box" hinzufügen.
Dazu einfach ne bestehende EDIF Netzliste als File hinzufügen, ein
Symbol draus generieren und das dann in Schematic hinzufügen.
Wie man über Quartus ne EDIF erzeugt, weiss ich allerdings nicht. Ich
hab zum Testen mal ein Undgatter mit Leonardo Spectrum synthetisiert und
das dann als EDIF "Black-Box" in ein Quartus design eingebunden. Ging
problemlos
Das EDIF (Undgatter)im Anhnang ist für einen EP1C3T100-7 synthetisiert.
Kannst ja mal probieren, ob das so wäre, wie du dir das vorstellst.
Inwiefern muss man das EDIF für eine konkrte Hardware definieren? Ich
möchte das gerne auf einem allgemeinen RTL-Level halten. (Dass ich dabei
nicht alles machen kann, wie z.B. Altera RAMS definieren, ist klar).
Was ich gerne hätte: Eine Instanz in VHDL mit allgemeinem HDL-Code, den
der User verändern muss, um anzupassen, ein ebenfalls offenes SUbmodul,
als INterface, dann die Altera-Komponenten ausdrücklich instanziiert und
dann eben jene blackbox, die die eigentliche Logig und Mathematik
enthält. Die muss im Dunkeln liegen, da genau das nicht veröffentlicht
werden soll.
Die EDIF-Netzlisten, die über ein Syntheseprogramm erzeugt werden,
beschreiben eigentlich schon die in der Zieltechnologie vorhandenen
Elemente und deren Verknüpfungen. Somit ist sie meines wissens,
zumindest abhängig von der gewählten BausteinFAMILIE.
Sicher gibt es auch EDIF-Netzlisten, die unabhängig von der Technologie
eine Funktion beschreiben können, aber wie man die aus VHDL erzeugt, das
weiss ich nicht.
Aber diese Netzlisten sind dann sicher ähnlich zu bewerten, wie VHDL
Netzlisten.
Ob Generics in so eine Liste einfach übergeben werden können, das weiss
ich leider nicht. Wäre aber ein interessantes Thema.
Eine Möglichkeit ist es den VHDL-Code zu verschleiern (obfuscate).
Dabei werden alle Kommentare und Formattierungen entfernt, sowie alle
Bezeichner durch sinnlose Namen ersetzt.
Wirkt sicher nur bei größeren Programmen, wo der Aufwand alles wieder zu
formatieren und in eine lesbare Form zu bringen beträchtlich ist.
Ob es freie Verschleierungsprogramme für VHDL gibt, weis ich nicht.
nur zur info: aus edif-netzlisten kann man auch wieder äquivalenten
vhdl-code generieren, das wird schon standardmäßig im ise von xilinx
(edif2ngd dann ngd2vhdl) und in den fpga-advantage tools (precision) von
mentor graphics für boards von xilinx, altera, lattice usw. unterstützt.
für altera geht das sicherlich auch noch irgendwie direkt im quartus.
bye
mss