Hallo zusammen Ich arbeite mit Quartus II. Nun habe ich ein Projekt erstellt und möchte eine Libray einbinden. Irgendwie muss ich diese aber installieren bin aber noch nicht drauf gekommen, was ich tun muss. ..einfach nur in das Lib-Verzeichnis wo auch Quartus liegt zu kopieren reicht jedenfalls nicht aus:( Habt ihr vielleicht einen Tipp wie ich da vorgehen muss? Beste Grüsse und Danke Geri
Hallo Gerhard, was für eine Lib möchtest du einbinden? Eine VHDL-Lib oder z.B eine PCI-Compiler-"Lib" ? Unter "Project" -> "Add/Remove Files" kannst du Files oder UserLibs hinzufügen. Vielleicht hilft dir das? Gruß R
Hallo Rainer Vielen Dank für Deinen Hinweis. Es ist eine Library, die in VHDL geschrieben ist. In meinem Program steht am Anfang: use std.textio.all; library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.all; use ieee.math_utility_pkg.all; use ieee.float_pkg.all; Nun habe ich die ensprechneden Files eingebunden, erhalte aber Fehler wie z.B. Error: VHDL unsupported feature error at numeric_std.vhdl(91): nonobject aliases are not supported Error: VHDL syntax error at numeric_std.vhdl(94) near text "("; expecting an identifier, or a string literal Error: VHDL syntax error at numeric_std.vhdl(94) near text "("; expecting an identifier, or a string literal usw. Beste Grüsse Geri
In deinem VHDL-Code musst du natürlich auf die eingene Lib verweisen. LIBRARY My_Lib; USE My_Lib.test_package.all; Dann holst du über "add/remove files" dieses Package dazu. Achte darauf, dass es in der Liste der Files an ooberster Stelle steht, sonst findet der Compiler das nicht (kleine Unschönheit bei Altera) Bei mir funktioniert das einwandfrei!
Kleine Ergänzung zu Schlumpf: Die IEEE und STD sind implizit eingebunden. Da braucht man nichts mehr machen.
Hallo zusammen Mit den eigenen Libs habe ich die ieee libs gemeint. Es handelt sich hier um eine Floating Point Library. Hmm, muss man da nicht noch was zuerst compilieren und dann installiere:)? Beste Grüsse und vielen Dank für Eure Tipps Geri
Ups, ob du so einfach die ieee erweitern kannst, das weiss ich nicht. Gibt es einen bestimmten Grund, dass du sie nicht separat in eine eigene Library packen willst?
Hallo Schlumpf Nein, es gibt keinen Grund. Ich habe mir auch gedacht, einfach ein Verzeichnis im Altera lib-Pfad anzulegen und sie IEEE_proposed zu nennen. Ich komme aber eben auf die gleichen Fehler Beste Grüsse Geri
probier´s mal so: leg dein Package in´s Verzeichnis zu den anderen HDL-Files. Dann holst du es mit "add/remove Files" dazu. Im Desing schreibst du dann: LIBRARY work; USE work.test_package.all; Das sollte auf jeden Fall gehen
Ich hab mal ein Beispiel gemacht.... Das ist meine Library und sie liegt in den Verzeichnis e:\scratch\mylib\hdl --######################################### LIBRARY ieee; USE ieee.std_logic_1164.all; PACKAGE mylib_pkg IS constant myhigh : std_logic := '1'; END mylib_pkg; --######################################### und dann hab ich ein Desing in dem Verzeichnis e:\scratch\mylib_test\hdl --######################################### LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; LIBRARY mylib; USE mylib.mylib_pkg.all; ENTITY xxx IS PORT( In0 : IN std_logic; In1 : IN std_logic; Out0 : OUT std_logic ); END xxx ; ARCHITECTURE test OF xxx IS BEGIN Out0 <= '1' when In0 = myhigh and In1 = myhigh else '0'; END test; --######################################### In Quartus habe ich über "add/ remove Files..." diese beiden Dateien dazugenommen. Darauf achten, dass das Package oben steht!! und es lässt sich fehlerfrei compilieren.
Hallo Schlumpf Super, vielen Dank für Deine Tipps. Ich werde es heute mal ausprobieren und über das Ergebnis berichten. Beste Grüsse Geri
Gern geschehen. Ich hoff, dass du weiterkommst. Viel Erfolg!
Hallo zusammen Also das Beispiel von Schlumpf habe ich probiert und es funktioniert. Nochmals vielen Dank an Dich. Bei meinem Beispiel hänge ich allerdings immer noch an den Meldungen wie oben Error: VHDL unsupported feature error at numeric_std.vhdl(91): nonobject aliases are not supported Error: VHDL syntax error at numeric_std.vhdl(94) near text "("; expecting an identifier, or a string literal Error: VHDL syntax error at numeric_std.vhdl(94) near text "("; expecting an identifier, or a string literal Das Beispiel (Testbench) kommt eigentlich direkt aus der downgeloadeten Library. Die Syntax müsste deshalb ja stimmen. Ich habe in Quartus II lediglich ein Projet erstellt. Wen sich für die math-library interessiert, der findet sie übrigens hier: http://www.eda.org/vhdl-200x/vhdl-200x-ft/packages/files.html Ganz unter unter IEEE.Float_Pkg Beste Grüsse Geri
Hallo zusammen So, ich habe hier mal mein Beispielprogramm angehängt. Wäre super, falls jemand von Euch mal einen kritischen Blick darüber werfen würde und mir mitteilen könnte, was ich falsch gemacht habe. Beim Testprogramm handelt es sich um ein Testbench zur darstellung der Funktionalität der floating point library. Vielen Dank im Voraus Geri
Hast du dir mal die float_pkg.vhdl angeschaut? Die ist ein bisschen "verkrüppelt" ;-) Ich denke mal, dass der Code, den du da geladen hast, nicht ganz vollständig ist.. (sieht zumindest beim ersten drüber blicken so aus) Ausserdem darfst du bei deinem Projekt die ieee Standard Libraries, die Quartus eh schon kennt, nicht nochmal als File einbinden. Könnte sein, dass Quartus dann nicht so receht weiss, welche nun gelten soll.
Ich habe es gerade versucht, in Modelsim zu Compilieren, aber es kommen hunderte von Fehlermeldungen... Ich vermute, dass der Code Schrott ist. Hab die Anweisungen aus der readme befolgt.
Hallo Schlumpf Ach super, dass du dir das Programm mal angeschaut hast. Vielen Dank! Ich kann es nicht ganz verstehen, denn die Library wurde zuletzt im Juli editiert und stammt von einer namhaften Organisation. Die readme habe ich auch befolgt:).. Die Library schaut echt vielversprechend aus. Beste Grüsse, nochmals vielen Dank für Deine Mühe und ich bleibe an dem Thema dran Geri
Hallo Geri! Ist gerne geschehen, aber schade, dass es zu keinem Ergebnis geführt hat. Wenn du das Ding aber trotzdem mal zum laufen bekommst, kannst ja hier mal bescheid geben. Vielleicht hab auch ich was an dem Code nicht verstanden, aber Packagedeklarationen ohne ein "end" am Ende etc. lassen nicht gerade hoffen :-) Ich denke aber sowieso, dass die Floating-Point Geschichten für die Simulation ganz okay sind, aber spätestens bei der Synthese auf einen Chip wirst du ganz schnell an die Grenzen kommen, wenn du nicht gerade nen fetten Stratix verwendest. Es ist doch einfach so, dass arithmetische Funktionen, die nicht als dedizierte Hardware in Form von z.B. Multiplizierern vorhanden sind, mit einfachen Logikelementen abgebildet werden müssen und dann stösst man sehr schnell an die Ressourcengrenze und auch an die Geschwindigkeitsgrenzen des Chips. Kannst ja mal spasseshalber nen 32 Bit-Multiplizierer (nicht floating) synthetisieren. Einmal mit den dedizierten Multiplizierern und einmal ohne (man kann in Quartus einstellen, dass er alles in Logik abbilden soll). Die Unterschiede sind frappierend. Ich musste aktuell auch ein paar Berechnungen mit "Nachkommastellen" durchführen und hab diese dann aber besser als Fix-Point operationen durchgeführt. Dann muss man das Zahlenformat nicht umrechnen, sondern arbeitet mit ganz normalen Vektoren, was oft völlig ausreichend ist. Also dann viel Glück bei Code-Flicken und Bits schubsen der Schlumpf
Hallo Schlumpf Vielen Dank für Deine ausführliche Rückmeldung und Mühe. Ich habe nun versucht an David Bishop, die Ansprechperson eine Mail zu schreiben, d.bishop@vhdl.org aber die Mails kommen immer retour. Wenn ich drauf komme, dann werde ich jedenfalls ein Tutorial veröffentlichen. Es kann ja nicht sein, dass eine Sache, die eigentlich einfach sein sollte, so ein Problem darstellt. Bzgl. floating point operationen hast du bestimmt recht. Ich experimentiere mit einem Cylcone chip:) Ich bin mir eben nicht sicher, ob fixed point arithmethik für meinen Fall auch geht, weil meine Werte einen sehr grossen Zahlenbereich abdecken müssen. Trotzden, du schreibst, dass du mit 32-bit fixed point artithmetik etwas gemacht hast. Kannst du mir bitte sagen, welche Library du dafür verwendest? Ist sie freeware? Ich möchte eine Funktion realisieren. Sie benötigt die +,-,*,%, und sqrt. Vielleicht könnte man diese auch einfach auf 64 bit erweitern. Beste Grüsse Geri
dazu brauchst du keine spezielle Library! Wenn du z.B. nen 32 Bit Wert noch mit 16 Nachkommastellen verschönern willst, dann machst du einfach einen 48 Bit Vektor draus. 32 + 16. Damit kannst dann ganz normal binär rechnen. Und am Ende musst du eben nur für den ganzzahligen Teil die oberen 32 Bit auswerten. Genauso, wie wir auch im Dezimalsystem rechen würden... da bedarf es auch keiner speziellen Regeln. Ob der Übertrag von den hundertsteln zu den zehnteln stattfindet oder von den hundertern zu den tausendern ist völlig gleich. Genauso gilt das auch für das binäre System... Die Kommastelle definierst du dir einfach irgendwo in den Vektor... Reine Interpretationssache. die Wertigkeit der Stellen in dem Vektor ist dann halt: 2^n .... 2^3 2^2 2^1 2^0 , 2^-1 2^-2 etc... also ... 8 4 2 1 , 1/2 1/4 1/8 ..... z.B. 3,50 dez = 0011,10 binär +4,75 dez = 0100,11 binär -------------------------- 8,25 dez = 1000,01 binär kannst aber auch 001110 + 010011 rechnen und beim Ergebnis das Komma setzen... Ich hoff, du verstehst, auf was ich raus will... rechne ganz normal mit vektoren und behalte im Hinterkopf, wo das Komma steht, der "Rest" passt von ganz alleine Hilft dir das?
PS: Wurzel in Hardware ist "Scheisse" ;-) Aber das ist es so oder so, egal in welchem Zahlenformat.
Hallo Schlumpf Vielen Dank für Deine Tipps. Das Grundprinzip von fixed point arithmetik habe ich schon verstanden. Ich habe gesehen, von Altera gibt es Multiplizierer und sogar die sqrt- Funktion ist implementiert... nur weiss ich noch nicht wie ich das Ganze anwenden muss:) Bei der Floating point library hat mir gefallen dass ich z.B. eine Multiplikation ganz einfach z=x*y codieren kann. So wie ich es aus c gewohnt bin:) Beste Grüsse und nochmals vielen Dank, echt nett von dir Geri
und nochmal ich... Das Problem mit den großen Zahlenbereichen kannst du folgendermassen umgehen: z.B. 1000 * 0,2 (aber du hast nur ganzzahlige Stellen) (1000 * (0,2 * 100))/ 100 Der Trick... Du "vergrößerst" die Kleine Zahl, kannst sie ganzzahlig Multiplizieren und dividierst dann das Ergebnis wieder um den Vergrößerungsfaktor Im Binärsystem nimmst du dann sinnvollerweise faktoren zur Basis 2 (also z.B. 256) dann kannst einfach shiften (shift 8) z.B. 128 * 0,5 = 64 01000000 * 00000000,1 = shift_right(01000000 * shift_left(00000000,1)) = 00100000 = shift rihgt(01000000 * 00000001) = 00100000 in diesen Fall shift um jeweils eine Stelle
Ah okay, also dass der Cyclone Multiplizierer hat, das wusste ich. Das mit der Wurzel ist mir neu, aber umso besser für dich Qaurtus erkennt von selber, wenn du A * B schreibst, dass es hier nen Multiplizierer verwenden soll. Darum brauchst dich nicht zu kümmern die codierung A * B kannst du auch ganz normal z.B.mit der ieee.std_logic_arith machen Du kannst auch mit Integer rechen etc, das geht alles Behalt nur immer im Hinterkopf, dass die Syntheses das auch irngedwie in HW abbilden muss. Also mach es ihr nicht zu schwer ;-) Also mach nimmer so lange rum es ist schon spät ;-) Ich geh jetzt schlafen Grüße Schlumpf
Mahlzeit Geri! Ich hab nochmal nachgeschaut. Mit ieee.std_logic_1164 und ieee.numeric_std hast du alle Grundfunktionen. für SQRT gibt es im Megawizard die Möglichkeit einen Block zu generieren, den du dann per Schematic oder HDL-Code einbinden kannst. Wenn möglich, dann füge ein paar Pipeline-Stufen ein, sonst könnte die maximale Taktrate klein sein. Einen dedizierten "Wurzelzieher" gibt es auch im Cyclone nicht! Der setzt das dann eben auch in Logik um. Zum Thema synthetisierbare Wurzeln kannst ja mal Google bemühen. Da haben sich schon viele Leute viele Gedanken drüber gemacht... So, dann viel Erfolg Gruß Schlumpf
Hallo Schlumpf Vielen Dank für die Hinweise. So wie ich den aktuellen Fall beurteile wird es noch einige Zeit dauern bis ich es schaffe, meinen c-Algorithmus nach VHDL oder Verilog zu codieren. Deshalb gehe ich das Problem nun mal mit einem ARM9 mit eingebauten Mathematik-Coproessor an. Vielleicht reicht mir die Performance für meine Anwendung auch aus. Parallel dazu werde ich mal ein paar Versuche mit der Standard-Library angegehen. Vielleicht kommt dann nach und nach auch eien Erleuchtung:) Beste Grüsse Geri
Ja wenn du das in einem Arm unterkriegst, dann ist das sicher die deutlich kostengünstigere Alternative und entwickelt ist das auch deutlich schneller.. Gruß Schlumpf
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.