Hallo Leute! Ich möchte nun in der FPGA-Welt (VHDL) Fuß fassen. Dazu habe ich eine kleine Doku, die mir die Syntax etwas näher bringen soll. Da ich mich auch ein Bißchen mit Mikrocontrollern auskenne, gehe ich immer von diesem Wissen aus und muss deshalb umdenken. Ich benutze das XilinX ISE 7.1I-Tool für meine ersten Versuche. Hierzu habe ich ein Board mit einem XC4VFX12. Um mal ein Signal in einem bestimmten Takt ausgeben zu können, möchte ich die WAIT FOR - Anweisung benutzen, die in der genannten Beschreibung vorkommt. Aber der lustige XILINX-Compiler hustet mir was, da er meint, dass dieser WAIT FOR - Befehl nicht supported wird. Ein WAIT; funktioniert, aber das brauch ich zur Zeit nicht. Wie kann ich das Problem umgehen oder warum wird dieser Befehl nicht unterstützt, wenn er sogar auf der XILINX-Homepage dokumentiert wird? Ist XILINX doch keine so gute Wahl gewesen? Danke für eure Hilfe. Tschüss Martin
Hallo Wait-for gibt es in VHDL nicht - was soll das sein? Was willst du machen? Du mußt Dir immer im Klaren sein, daß VHDL eine Hardware - Beschreibungssprache und keine Programmiersprache im herkömmlichen Sinn ist! Alles läuft parallel ab. Wenn Du Takte erzeugen willst, mußt Du das mit Countern, also Flipflops machen. Lies dich am Besten mal in die Xilinx XST User Manual ein
Hallo! Ich habe von einem Bekannten ein kleines Beispiel erhalten, welches ich mir gerade anschaue. architecture Behavioral of main is shared variable a: integer; shared variable b: integer; shared variable y: integer; begin process begin a:=10; b:=15; WAIT FOR 2ns; a:=9; b:=7; wait; end process; process begin wait for 1 ns; y:=a*b; wait for 1 ns; end process; Ich habe eine Doku, die besagt, dass es 3 verschiedene Wait-Anweisungen gibt. wait ON signal_name wait until condition wait for time_expression Leider bin ich es gewohnt sequenziell zu denken und darum bin ich gerade dabei, mich in diese für mich ungewohnte Denkweise einzuarbeiten. Ich möchte für den Anfang einfach nur ein Programm, mit dem ich ein Led blinken lassen kann. Ich weiß, dass im obigen Beispiel keine Outputs definiert sind, aber das kommt noch. Zur Zeit stehe ich bei (wait for) an. Wenn ich jetzt eine SPI-Schnittstelle nachbilden möchte, dann muss ich z.B. ein Clock-Signal generieren, welches die Geschwindigkeit für die SPI vorgibt. Aus diesem Grund benötige ich hier Wartezeiten, um eine bestimmte Frequenz zu erhalten. Tschüss Martin
WAIT FOR gibt es sehr wohl, es ist nur nicht synthese-fähig, d.h. man kann es nur für die Simulation verwenden. Man versetze sich in die Lage des Synthese-Tools: wie soll man "wait for 2ns" realisieren ? Nich ganz so einfach. Wenn eine LED blinken soll, dann nimm einfach einen großen Zähler, z.B. 24 bit und leg die LED auf das MSB des Zählers. Die WAIT-Anweisungen kann das Synthese-Tool wie gesagt nicht in Hardware umsetzen. Du musst versuchen, komplett umzudenken. Vielleicht hilft es Dir, wenn Du zuerst überlegst, wie man die Funktion aus einzelnen Logik-ICs aufbauen würde.
wenn Du das folgende Beispiel verstehst und weisst, was die Synthese daraus machst, hast Du schon einen wichtigen Unterschied zwischen Mikrocontroller und FPGA verstanden: process(clk) begin if rising_edge(clk) then for i in 15 downto 1 loop data(i) <= data(i-1); end loop; data(0) <= din; end if; end process;
Hey Du Schlaubi, nich alles verraten, der Martin wollte dich selber draufkommen - oder? ;-)
Sorry ! Aber die Antwort brannte mir unter den Fingernägeln. Ich konnte nicht anders.
Ich glaube ich muss noch viel lernen. Aber ich verstehe nicht, warum es einen Befehl gibt, den es eigentlich nicht gibt z.B. WAIT FOR. Meine Überlegung ist so, wenn ich vorhabe einen bestimmten Befehl zu benutzen, dann richte ich meine Programmarchitektur nach diesen bestimmten Befehlen aus. Ich verstehe nicht, warum es den Befehl gibt, wenn es nicht möglich ist, diesen in der Hardware zu benutzen. Meiner Meinung nach wäre es dann besser, wenn es den Befehl überhaupt nicht geben würde, weil dann die Verwirrung nicht so groß wäre. Ich habe einen Bekannten, der VHDL auf der Fachhochschule gelernt hat. Auch die haben in ihren Programmbeispielen, welche sie vom Professor erhielten, haufenweise das WAIT FOR ohne auch nur den Hinweis bekommen zu haben, dass dieses Programm nun gar nicht lauffähig ist. Was sagt ihr dazu? Tschüss, Martin
Hi! WAIT FOR hat schon seine Berechtigung. Es ist wie oben geschrieben zwar nicht in Hardware implementierbar aber durchaus nützlich: Zum Beispiel hast du einen vhdl Code der irgendein Protokoll implementiert. Jetzt wilst du das ganze simulieren um es zu testen. Das Protokoll gibt meinetwegen vor dass eine leitung 2ns low sein muss wenn neue Daten anstehen. Dann schreibst du eine testbench wo meinetwegen etwas wie: NEW_DATA_OUT <= '0'; wait for 2ns; NEW_DATA_OUT <= '1'; wait for 200ns; ... drinsteht. Du kannst wirklich das komplette "Programm" durchchecken ohne auch nur eine einzige Platine anzupacken. Als ich letztens einen I2C Master geschrieben habe war ich echt überrascht wie einfach das debuggen war: Eine Testbench geschrieben, simuliert und die einzelnen Pins mit dem Wave Fenster betrachtet. Ohne Simulation hätte ich einen Logicanalyzer gebraucht und endlos rumexperimentieren müssen. Durch den Simulator konnte ich direkt sehen dass ein STOP Command fehlte. Zum Thema wait for implementieren: Wie willst du das in Harware umsetzen ? Wenn ich schreibe wait for 31ps; welche Hardware soll das umsetzen ? Aber es stimmt schon, in Univorlesungen wird darauf oft nicht eingegangen. Ich war auch erstmal überrascht als mein Code mit wait for ... und output <= '1' after 2ns; nicht funktionierte g
Danke erstmal für deine Antwort. Ich habe bitte noch eine Frage: Also du hast hier das I2C-System simulieren können. Aber wie schaffst du es dann das Programm auf dem FPGA zum Laufen zu bringen, wenn diese Befehle danach nicht mehr benutzt werden? Du benötigst ja trotzdem ensprechende Wartezeiten, um dem Signal bestimmte Frequenzeigenschaften geben zu können. Wie werden diese entsprechenden Wartezeiten jetzt realisiert? Kann man diese Eigenschaften nur durch einen Zähler erreichen? Tschüss, Martin
>Wie werden diese entsprechenden Wartezeiten jetzt realisiert?
Takte zählen. Wie beim Mikrocontroller auch.
Je größer die Taktfrequenz desto "feiner" die Zeitauflösung.
Hi! >Ich habe bitte noch eine Frage: >Also du hast hier das I2C-System simulieren können. >Aber wie schaffst du es dann das Programm auf dem FPGA zum Laufen zu >bringen, wenn diese Befehle danach nicht mehr benutzt werden? Ich habe zwei dateien: i2c_controller.vhd i2c_testbench.vhd i2c_controller.vhd ist mein controller, dort verwende ich nur die Syntax die man synthetisieren kann. Dort werden wartezeiten einfahc durch timer behandelt. Also zb um aus 25mhz input takt ein 100khz clock enable signal zu machen zähle ich einfach so: signal count : natural; signal clk100_en : std_logic; process(clk) begin if rising_edge(clk) if (count = 250) then count <= 0; clk100_en <= '1'; else count <= count +1; clk100_en <= '0'; end if; end if; end process; (den reset/initkram habe ich weggelassen hier im beispiel) Die vhdl testbench benutzt dann wait for anweisungen etc um den ganzen kram zu simulieren. Dort ist mein Controller einfach eingebunden und die IOs als signals gemappt.
Hallo Martin, bei der Entwicklung von VHDL hat man sich eben auch überlegt, welche Befehle für eine Simulation wichtig sein könnten. Es reicht ja nicht, Deine Digitalschaltung in VHDL zu beschreiben, Du musst die Funktion auch per Simulation überprüfen können. Die Simulation / Verifikation eines VHDL-Designs ist inzwischen die größte Bremse bei der Entwicklung, das können schon mal 70 Prozent des Gesamtzeitaufwandes sein. Umso wichtiger, dass die Sprache ausreichend Elemente für eine effektive Simulation bietet und da gehören die "Zeitbefehle" wie WAIT... AFTER.... und z.B. Assertions (assert a = b report "blabla") eben mit dazu, auch wenn man das nicht in Hardware realisieren kann. An der UNI kann man nicht erwarten, dass man praxisbezogenes VHDL lernt, da wird zuviel auf Theorie rumgeritten, die bei den meisten, einfachen Designs überhaupt nicht benötigt wird. Viel wichtiger sind m.E. Grundkenntnisse in digitaler Schaltungs- technik. Wenn man die nicht hat, sollte man damit beim VHDL- lernen anfangen.
Das man sich aber nicht immer auf eine Simulation verlassen sollte, habe ich gestern gemerkt. Bei uns ander Uni gibt es ein FPGA-Praktikum, das wirklich gut und umfangreich ist. Gestern haben wir ein einfaches Uhrwerk mit Sek, Min, St, Tag, Woche, Monat, Jahr programmiert. In der Simulation (Quartus) funktionierte aber nur die Sekundenanzeige. Der Rest lieferte Müll. Als wir den Fehler nicht finden konnten, haben wir das Design einfach indas FPGA-Board geladen, die Taktung beschleunigt, und siehe da, es funktionierte alles! Dann nochmal das Ganze in Modelsim simuliert und es kam auch das raus, was wir erwartet haben: ein funktionierendes Uhrwerk. Ist der Simulator von Quartus so viel schlechter als Modelsim (ist beides die kostenlose Version)? Henrik
Man sollte immer bedenken, dass VHDL ursprünglich eine Sprache zur Beschreibung von digitlalen Schaltungen war. Also sowas, was man in einer Spezifikation lesen kann, bloß in formaler Form. Damals hat noch niemand daran gedacht, dass man irgendwann VHDL nutzen würde, um das Design daraus zu synthetisieren. In einer Verhaltensbeschreibung sind Sprachelemente wie WAIT FOR oder AFTER sehr wichtig. Zum Beispiel um anzugeben, wie lange vor der Taktflanke die Daten stabil am Bus liegen müssen, damit sie gültig sind. Der Funktion ist das egal. Aus der funtionellen oder RTL Sicht geht man davon aus, das die Daten gültig sind, wenn der Takt kommt. Aber die Schaltung, die man daraus synthetisiert ist wieder den physikalischen Grenzen unterlegen. Und das Model, das man vom Timing Analyzer bekommt ist dann wieder ein Verhaltensmodel, in das die angenommen Verzögerungszeiten, Setup und Hold Time usw. einfließen.
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.