Guten Abend zusammen! Ich habe ein Altera Cyclone 4 E FPGA Board gekauft. Ich programmiere mit Verilog HDL (finde es persönlich angenehmer als VHDL). Mein Wunsch ist über den GPIO (36Pin) ein Signal einzulesen und ein anderes auszugeben. Die Verbindungen vom GPIO zum FPGA und wieder raus konnte ich der User_Manual schon entnehmen. Jetzt ist aber die Frage wie ich das ganze im Verilog Code einbinden muss, damit ich auch Signale in den FPGA bekomme. Sinn dahinter soll sein, dass ich von aussen eine Frequenz und Amplitude vorgebe, mit der ich einen Sinus innerhalb meines FPGA generiere. Der Sinus wird dann mit einem Sägezahn verglichen und die so entstehende PWM möchte ich für einen Motor-Umrichter verwenden. Die PWM-Signale werden also logischerweise über Pins am GPIO wieder ausgegeben. Das habe ich bisher: module test_3( // CLOCK CLOCK_50, CLOCK2_50, CLOCK3_50, // GPIO deklarieren GPIO ); // Ports input CLOCK_50; input CLOCK2_50; input CLOCK3_50; inout [35:0] GPIO; //HauptCode endmodule Ja und hier haperts nun. Ich weis ich kann die GPIO einzeln über "GPIO[X]" mit X={0..35} ansprechen. Wie kann ich ein Signal von Aussen über den GPIO ins FPGA bekommen? Was muss das Signal für digitale Eigenschaften haben? Wie kann ich das getaktete Signal über eine Art Assign wieder aus dem FPGA bekommen? Sorry wenn die Fragen sehr plump erscheinen, ich bin leider Neuling und versuche mich aktuell einzuarbeiten. Vielen Dank im Voraus!
Wie kann dir Verilog angenehmer sein, wenn du noch nicht einmal ein Signal an einem PIN ausgeben kannst? Prinzipiell (ich kann nur VHDL): Du hast digitale Inputs und Outputs. Genau so musst du sie deklarieren. Aus deinen "Inout GPIO" solltest du bei den Inputs ein Input machen, bei den outs ein out. Den Sinn von mehreren 50MHz Clocks erkenne ich auch nicht. Willst du die Amplitude und Frequenz parallel an den Port anlegen? So kann kapier ich das nicht mit dem vergleichen und Sägezahn und weiß der Geier was.
Tommm schrieb: > Ich programmiere mit Verilog HDL (finde es ... angenehmer als VHDL). Und warum nochmal? > Wie kann ich ein Signal von Aussen über den GPIO ins FPGA bekommen? Du musst die Pins über "Location Constraints" zuweisen. > Was muss das Signal für digitale Eigenschaften haben? Das steht im Datenblatt deines FPGAs und evtl. im Schaltplan deines Boards. > Sinn dahinter soll sein, dass ich von aussen eine Frequenz und Amplitude > vorgebe, mit der ich einen Sinus innerhalb meines FPGA generiere. Ich würde das in VHDL so machen: http://www.lothar-miller.de/s9y/archives/57-Sinusausgabe-mit-PWM.html Wenn du die Idee dahinter verstanden hast, dann kannst du das leicht nach Verilog portieren...
Die Vorgehensweise für die Pins ist grob gesagt wie folgt: Du nennst die Pins in deinem Top-level module so wie du willst und deklarierst diese als input bzw output: module meinspielzeug(clock, signal, led); input clock; input signal; output led; // hier kommt dann dein Code endmodule; Dann simulierst Du das ganze erst mal in ModelSim, so dass alles zur Zufriedenheit funktioniert. Hierzu musst Du noch eine Testbench schreiben in der das top-level modul (meinspielzeug) eingebunden und mit Testsignalen versorgt wird. Wenn das alles funktioniert gehts daran, das Ganze fürs FPGA zu synthetisieren. Hierzu wird das Design in Quartus II (von Altera) geladen und nach einstellung welches FPGA du verwendest synthetisiert. Dabei landen dan die Ein- und Ausgänge auf mehr oder weniger zufälligen Pins. Um nun festzulegen, auf welchen Pins diese Signale wirklich liegen sollen, öffnest Du den Pin Planner und und legst dort die Signale auf die gewünschten pins. Nochmal auf compile drücken und fertig.
>> Ich programmiere mit Verilog HDL (finde es ... angenehmer als VHDL). >Und warum nochmal? Ich habe bisher nur kleine Experimente mit LEDs und HEX Anzeigen gemacht und dabei fiel mir die Arbeit mit Verilog leichter. Ich merke aber das ich mich damit unbeliebt mache :D >Aus deinen "Inout GPIO" solltest du bei den Inputs ein Input machen, bei >den outs ein out. Okay das Verstehe ich, aber was dann? Wenn ich über einen GPIO Pin, Sagen wir mal GPIO[1] ein Signal einlesen will, wie würde die Kommandozeile in VHDL oder Verilog HDL heißen? Ich brauch nur ein Beispiel das ich es verstehe. >Den Sinn von mehreren 50MHz Clocks erkenne ich auch nicht. Das Board hat drei Clocks, ich hab einfach alle angemacht. Erstmal ohne wirklichen Grund. >Willst du die Amplitude und Frequenz parallel an den Port anlegen? So >kann kapier ich das nicht mit dem vergleichen und Sägezahn und weiß der >Geier was. Die Vorgaben für Amplitude (Wert zw. 0 und 1) sowie Frequenz (Wert zw. 0 und 100) sollen an Zwei Pins anliegen. Die Beiden Vorgaben lasse ich im FPGA zu einem Sinus mit vorgegebener Amplitude und Frequenz zusammenbauen. Das Vergleichen mit dem Sägezahn dient der PWM Erzeugung. Diese PWM Signale benötigt ein Frequenzumrichter um die Halbleiter so zu Takten, dass ein Sinusförmiger Strom am Ende entsteht. >> Wie kann ich ein Signal von Aussen über den GPIO ins FPGA bekommen? >Du musst die Pins über "Location Constraints" zuweisen. Habe da nichts brauchbares in der Hilfe gefunden. Kannst du bitte dazu noch ein paar Worte verlieren? >> Was muss das Signal für digitale Eigenschaften haben? >Das steht im Datenblatt deines FPGAs und evtl. im Schaltplan deines >Boards. Also ich meine nicht die Spannung. Ich meine: Ist es Ratsam eine Dezimalzahl (die ich ja für die Frequenz habe) als z.b. 6-Bit Binärzahl getaktet in den FPGA zu geben oder gibt es da andere Möglichkeiten? >> Sinn dahinter soll sein, dass ich von aussen eine Frequenz und Amplitude >> vorgebe, mit der ich einen Sinus innerhalb meines FPGA generiere. >Ich würde das in VHDL so machen: >http://www.lothar-miller.de/s9y/archives/57-Sinusa... >Wenn du die Idee dahinter verstanden hast, dann kannst du das leicht >nach Verilog portieren... Die Idee dahinter hab ich noch nicht ganz verstanden aber ich arbeite daran :) werd ich mal schauen wie ich das in Verilog portiere oder ich lerne halt VHDL. Sehr lehrreiche Internetseite hast du da wenn ich das anmerken darf, steht echt viel drin. Vielen Dank schonmal für die Antworten!
Verilog ist in Ordnung. In Europa wird VHDL gelehrt während die Amis und die Asiaten eher Verilog bevorzugen. Ich persönlich habe nun in zwei internationalen Firmen nichts anderes als Verilog gemacht und ich empfinde es ebenfalls als angenehmer als VHDL (ohne hier die Gründe diskutieren zu wollen). Kann also nicht so schlimm sein ,-) "location constraints" entspricht dem, was ich in meinem posting mit dem Pin Planner beschrieben habe. Der Pin Planner erzeugt im Hintergrund die entsprechenden constraints so dass Du diese nicht extra von Hand editieren musst. Ist fuer den Anfang einfacher. Wenn du eine Zahl von aussen brauchst (z.B. die Frequenz) gibst du sie am einfachsten parallel ein. Also z.B. mit 7 pins mit denen Du dann Zahlen zwischen 0 und 127 darstellen kannst. Auf dem FPGA-board sind möglicherweise ein paar DIP-Schalter, welche sich hierzu verwenden lassen. Oder du verwendest zwei 16-Stufige Binärschalter mit denen du eine 8-bit Hex-Zahl einstellen kannst und welche dann 8 Eingangspins belegen. Ganz luxoriös wäre ein Drehencoder, welcher beim Drehen nur hoch/runter Impulse erzeugt. Mit diesem wird dann intern ein Zähler hoch bzw runter gezählt und das Ergebnis wieder über einen 7-Segment encoder nach draussen auf zwei 7-Segment Anzeigen gelegt. Dann kan man die Zahl per Hand einstellen. Schau mal auf fpga4fun.com - ich meine die haben da ein paar Beispiele für sowas.
andi6510 schrieb: > Ganz luxoriös wäre ein Drehencoder, welcher beim Drehen nur hoch/runter > Impulse erzeugt. Den Luxus gäbe es dort auch: http://www.lothar-miller.de/s9y/archives/53-Drehgeber,-Encoder,-Quadraturdecoder.html Tommm schrieb: > Ich meine: Ist es Ratsam eine Dezimalzahl (die ich ja für die Frequenz > habe) als z.b. 6-Bit Binärzahl getaktet in den FPGA zu geben Hört sich irgendwie seltsam und exklusiv an... > oder gibt es da andere Möglichkeiten? Eine serielle Schnittstelle (RS232) wäre da meine erste Wahl... Tommm schrieb: > Sehr lehrreiche Internetseite hast du da wenn ich das anmerken darf, > steht echt viel drin. Danke, es ist einiges drin, ich brauche manchmal selber die Suche... ;-)
Tommm schrieb: > . . . > > Die Vorgaben für Amplitude (Wert zw. 0 und 1) sowie Frequenz (Wert zw. 0 > und 100) sollen an Zwei Pins anliegen. Die Beiden Vorgaben lasse ich im > FPGA zu einem Sinus mit vorgegebener Amplitude und Frequenz > zusammenbauen. Das Vergleichen mit dem Sägezahn dient der PWM Erzeugung. > Diese PWM Signale benötigt ein Frequenzumrichter um die Halbleiter so zu > Takten, dass ein Sinusförmiger Strom am Ende entsteht. > > . . . Du kannst an einem Pin keinen Wert zwischen 0 und 1 oder 0 und 100 einlesen. Du kannst nur digitale Signale (High- / Low Pegel) einlesen. Das selbe bei der Ausgabe, nur digitale Signale. Wenn Du eine PWM Ausgeben möchtest, dann musst Du diese PWM selber generieren. Gruß Martin
andi6510 schrieb: > Verilog ist in Ordnung. In Europa wird VHDL gelehrt während die Amis und > die Asiaten eher Verilog bevorzugen. Ich persönlich habe nun in zwei > internationalen Firmen nichts anderes als Verilog gemacht und ich > empfinde es ebenfalls als angenehmer als VHDL (ohne hier die Gründe > diskutieren zu wollen). Kann also nicht so schlimm sein ,-) Vielen Dank andi6510 :D So, also neues von mir: erstmal Danke für die tollen Ideen. Habe die prellfreien Taster auf dem Board genutzt um mir aus einer Key rising edge & Clock rising edge einen Zähler gebaut. Zählt prima hoch und runter. Das Ergebnis lass ich mir binär mit LEDs anzeigen. 8 Bit, das langt erstmal. Zum Sinus: Also die Idee habe ich hoffentlich richtig verstanden - ich nehme entweder eine Tabelle die Sinuswerte des ordinären Sinus beinhaltet, oder ich nutze den CORDIC Algorithmus. Ich finde den CORDIC super, weil er schnell aber vor allem ressourcensparend ist, aber ich hab dazu leider keine Quelle gefunden die alles vollends erklärt. Gibt es sowas in der Richtung? Vielleicht sogar auf deutsch? Die Grundidee mit der Koordinatentransformation ist schon nachvollziehbar aber der Schritt vom Dynamischen Systen zur Sinusberechnung ist es noch nicht. Also nochmal besten Dank! Ich hoffe auf weitere fruchtbare Ergüsse :)
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.