Hallo zusammen Meine Aufgabe ist mit einem Altera Ausgänge auf Eingänge zurückzuschalten. Meine Idee ist nun die Soll Ausgänge und die Soll Eingänge in einer array / tabelle abzuspeichern, in einer dritten spalte möchte ich noch erwähnen wenn der ausgang nicht auf den eingang geschaltet wird. Und diese tabelle wird in einer schleife immer wieder aufgerufen. Kann ich meine Idee einfach mit VHDL realisieren? Und wie?
R. M. schrieb: > in einer dritten spalte möchte ich noch > erwähnen wenn der ausgang nicht auf den eingang geschaltet wird. Gegenüber wem? > Und diese tabelle wird in einer schleife immer wieder aufgerufen. Schleife? Aufgerufen? Hoppala, da hat aber noch jemand eine sehr softwarelastige Denkweise... Zeichne doch einfach mal einen Schaltplan, wie du das mit ICs machen würdest. Und dann machst du eine VHDL-Beschreibung, bei der das selbe rauskommt. Denn für VHDL musst du in Hardware denken... > mit einem Altera Ach so, mit dem Altera. Zum Glück gibts nur einen... > Ausgänge auf Eingänge zurückzuschalten. Ich sehe einen (bzw. viele) Multiplexer vor mir. Was siehst du?
Ich sehe vor mir leider gar keine Hardware nur ein bischen Software code. Aber ich werde mir es mal mit Harware überlegen. Aber es gibt doch möglich keiten eine Array / Tabelle mit VHDL zu machen oder nicht?
Gast
#2622720
Es gibt Arrays. Aber beachte das nur eindimensionale (in Ausnahmefällen auch zweidimensionale) Arrays synthetisierbar sind (zumindest nicht ohne kleine Tricks).
Vi schrieb: > Aber beachte das nur eindimensionale (in Ausnahmefällen auch > zweidimensionale) Arrays synthetisierbar sind (zumindest nicht ohne > kleine Tricks). Schon ein std_logic_vector ist ein eindimensionales Array... Und ein Array von std_logic_vectoren (das kann jeder Synthesizer) ist ein zweidimensionales Array. Aber auch höhere Dimensionen gehen inzwischen problemlos: http://www.lothar-miller.de/s9y/categories/32-Arrays
Gast
#2623983
Wie gesagt nicht ohne Trick (synthetisierbar!). Du musst den Umweg über eine Typdeklaration gehen sonst macht dir dein Synthesewerkzeug einen Strich durch die Milchmädchenrechnung.
Ok ich werde es mal ausprobieren, danke für eure hilfe
vI schrieb: > Du musst den Umweg über eine Typdeklaration gehen Welchen Umweg? Und natürlich "muss" ich über eine Typdefinition gehen. Das ist VHDL. Zeig doch mal an einem Beispiel, wie du direkter zum Ziel kommst...
Gast
#2625610
Der Umweg über eine Typdeklaratation. Der direkte wäre dieser: type foobar is array (0 to 7, 0 to 3) of std_logic; Das nimmt dir aber in der Regel der Synthetisierer nicht.
Vi schrieb: > Das nimmt dir aber in der Regel der Synthetisierer nicht. Ich nehm dann mal XST und diesen Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
Ergebnis:
1 | |
2 | |
3 | |
4 | |
Kurz: das RAM/ROM wird wie gewünscht realisiert...
Gast
#2625897
Ausnahmen bestätigen die Regel :)
Vi schrieb: > Ausnahmen bestätigen die Regel :) Die nächste Ausnahme wäre dann offenbar auch Synplify (Lattice). Auch das Ding setzt die obenstehende Beschreibung um und meldet:
1 | |
Gast
#2630290
Altera QuartusII mag die Datei auch:
Info: Implemented 16 device resources after synthesis - the final
resource count might be different
Info: Implemented 4 input pins
Info: Implemented 8 output pins
Info: Implemented 4 logic cells
Info: Quartus II Analysis & Synthesis was successful. 0 errors, 4
warnings
Gast
#2634393
@ Lothar Miller Verstehe ich das richtig, das man in das o die Konstanden Zahlen aus dem Array ausliest? Wie kann ich jetzt den den Array Wert eingeben? (dies müsste ich nach mir mit dem x und dem y machen.) Aber diesen Variablen kann ich ja nur 0 oder 1 zuweisen oder nicht?
R.M. schrieb: > Verstehe ich das richtig, das man in das o die Konstanden Zahlen aus dem > Array ausliest? Richtig, abgesehen davon, dass es konstan-t-e Werte sind... > Wie kann ich jetzt den den Array Wert eingeben? (dies müsste ich nach > mir mit dem x und dem y machen.) Wie meinst du das? Du willst Werte nicht nur auslesen (=ROM), sondern auch welche reinschreiben (=RAM)? Das geht so:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
Das ist ein Dual-Port-RAM. Für die praktische Umsetzung in einm FPGA wäre jetzt aber noch ein Takt angeraten, damit das Ganze auf einen RAM-Block abgebildet werden kann. > Aber diesen Variablen kann ich ja nur 0 oder 1 zuweisen oder nicht? Naja, am Ende werden das immer nur Nullen und Einsen sein. Nur eben nicht nur eine einzelne. Mach 8 nebeneinander dann hast du ein Byte, mach 16 nebeneinander dann hast du ein Wort, mach 32 nebeneinander dann hast du ein Doppelwort...
Gast
#2634740
1 | |
2 | |
3 | |
4 | |
5 | |
Wie kann ich jetzt z.B. genau die Zelle auslesen in welcher die hex Zahl 23 steht?
R.M. schrieb: > Wie kann ich jetzt z.B. genau die Zelle auslesen in welcher die hex Zahl > 23 steht? Ich würde sagen, es gibt 2 Möglichkeiten: foo(2,1) oder foo(1,2) Und nur eine davon ist richtig. Auf welche würdest du tippen? Mein Tipp: erst nachdenken und dann ausprobieren...
Gast
#2648466
Gibt es eine Möglichkeit, die Ausgänge direkt in das Array zu schreiben? Oder könnte man den Ausgang indirekt aus dem Array ansprechen?
R.M. schrieb: > Gibt es eine Möglichkeit, die Ausgänge direkt in das Array zu schreiben? Nicht, wenn es ein RAM ist, sieh dir ein RAM einfach mal an: das hat nach aussen nur Adress-, Daten und ein paar Steuerleitungen. Du könntest as natürlich trotzdem machen, dann wird im FPGA aber kein RAM mehr verwendet, sondern viele einzelne Flipflops... :-o
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.