Hallo Leute, Ich hab in einem VHDL-Modul eine Komponente(pipeline aufgebaut) einbinde. Und in diesem Modul wird diese Komponent vielmalig aufrufen. Ich möchte z.B am ersten Takt diese Komponent aufrufen,und am nächsten Takt wieder aufrufen(neue Daten rein),so schreib ich wie folgend: COMPO: COMPONENT_PIPELINE PORT MAP(CLK, X1_TO_CO,X2_TO_CO, X1_OUT_CO,X2_OUT_CO ); PROCESS1:process(CLK,ENABLE) begin if CLK'EVENT and CLK = '1' then if ENABLE = '1' then -- 1.Takt X1_TO_CO <= E_RE_REG(k)(3); X2_TO_CO <= E_RE_REG(k)(0); -- 2.Takt X1_TO_CO <= E_RE_REG(k-2)(3); X2_TO_CO <= E_RE_REG(k-2)(1); end if; end if; end process; Aber ich finde dass die alle Daten gleichzeitig getaktet wurden. so kann mir jemand helfen um diese Problem zu lösen? Also am 1.Takt X1_TO_CO <= E_RE_REG(k)(3); X2_TO_CO <= E_RE_REG(k)(0); am 2.Takt X1_TO_CO <= E_RE_REG(k-2)(3); X2_TO_CO <= E_RE_REG(k-2)(1); Danke euch im voraus!!
ich versteh noch nicht genau was das soll aber vllt. so Das Signal X1_TO_CO und X2_TO_CO über einen Multiplexer steuern. Das select Signal mit jeder Taktflanke toggeln
vendi schrieb:
1 | if CLK'EVENT and CLK = '1' then |
2 | if ENABLE = '1' then |
3 | -- 1.Takt <--- Das ist der gleiche Takt ...
|
4 | X1_TO_CO <= E_RE_REG(k)(3); |
5 | X2_TO_CO <= E_RE_REG(k)(0); |
6 | -- 2.Takt <--- ... wie der hier.
|
7 | X1_TO_CO <= E_RE_REG(k-2)(3); <--- Achtung: die letzte Zuweisung an ein Signal im Prozess gewinnt |
8 | X2_TO_CO <= E_RE_REG(k-2)(1); |
9 | end if; |
10 | end if; |
Du hast hier erst mal das Problem, dass der Synthesizer Kommentare nicht auswertet. Deshalb ist es ihm schnurzegal, wenn du da 1. Takt und 2. Takt hinschreibst. Das zweite Problem ist, dass in einem Prozess die letzte Zuweisung an ein Signal gewinnt. Weil hier hintereinander verschiedene Werte an X1_TO_CO zugewiesen werde, gewinnt dei die letzte Zuweisung. Es wurde schon erwähnt, was du brauchst: einen Multiplexer. Und dann vermutlich noch einen Zähler, der mitzählt, in welchem Zyklus du bist. Allerdings habe ich wegen dieser Beschreibung noch sehr grundlegende Bedenken, dass du nicht weißt, was du tust: vendi schrieb: > Ich möchte z.B am ersten Takt diese Komponent aufrufen,und am nächsten > Takt wieder aufrufen(neue Daten rein) Ein Komponente wird nicht "aufgerufen", eine Komponente ist IMMER da. Sie kann nur evtl. gerade inaktiv oder aktiv sein. Du hast offenbar noch eine sehr softwareorientierte Denkweise, das geht auf der Hardware schief. Schreib also besser mal, WAS du machen willst und WOFÜR du diese verketteten Komponenten verwenden willst...
Hallo Lothar, Danke dir. Meine Komponente(COMPONENT_PIPELINE) hat eine Pipeline Struktur, und sie braucht 10 Takte.E_RE_REG ist beispielsweise eine 4X4 Matrix.Am ersten Takt möchte ich die 2 Elemente ( E_RE_REG(k)(3), E_RE_REG(k)(0))in k-ter Zeile, und am zweiten Takt die 2 Elemente ( E_RE_REG(k-2)(3),E_RE_REG(k-2)(1)) in (k-2)-ter Zeile in diese Komponente eingeben, so werden diese Elemente durch die Komponente berechnet,also die Berechnung für k-te Zeile fängt am ersten Takt an und für (k-2)-te Zeile am zweiten Takt, sie brauchen jeweils 10Takte.So am 10ten und 11ten Takt werden die Ergebnisse für die beide Zeile (k-te und (k-2)-te Zeile) hintereinander bekommt und wieder in dieser zwei Zeile gespeichert. Kann mir noch mal helfen? Danke sehr!! Gruß!
vendi schrieb: > Meine Komponente(COMPONENT_PIPELINE) hat eine Pipeline Struktur, und sie > braucht 10 Takte.E_RE_REG ist beispielsweise eine 4X4 Matrix.Am ersten > Takt möchte ich die 2 Elemente ( E_RE_REG(k)(3), E_RE_REG(k)(0))in k-ter > Zeile, So oder so empfiehlt sich eine State-Machine. Was mir aber noch nicht ganz klar ist: Du startest die Komponente mit 2 Werten. Jetzt dauert es zehn Takte bis das Ergebnis rauskommt. So weit ok, aber: Kannst Du im zweiten Takt schon die nächsten zwei Werte anlegen, oder musst Du erst 10 Takte warten und das Ergebnis wegspeichern? Duke
Hallo vendi, Ich empfehle dir dich mit den Grundlagen der digitalen Schaltungstechnik auseinander zusetzen. Dann kannst du formulieren was für eine Art von Schaltung du in VHDL beschreiben möchtest.
Duke Scarring schrieb: > So oder so empfiehlt sich eine State-Machine. Danke Duke, ich hatte eine State-Machine schon bearbeitet,aber es benötigt zu viele zustände,und kostet zu viel Zeit,so wird nicht bevorzugt. > Was mir aber noch nicht ganz klar ist: Du startest die Komponente mit 2 > Werten. Jetzt dauert es zehn Takte bis das Ergebnis rauskommt. So weit > ok, aber: Kannst Du im zweiten Takt schon die nächsten zwei Werte > anlegen, oder musst Du erst 10 Takte warten und das Ergebnis > wegspeichern? Also ich kann im zweiten Takt schon die nächsten zwei Werte anlegen.So können die alle Werte parallel bearbeitet werden.
vendi schrieb: > Danke Duke, ich hatte eine State-Machine schon bearbeitet,aber es > benötigt zu viele zustände,und kostet zu viel Zeit,so wird nicht > bevorzugt. Egal, wie du das Kind nennen wirst, es wird eine Statemachine sein. Denn wenn du den Index nicht einfach berechnen kannst, dann mußt du das Ganze manuell abarbeiten. Natürlich könntest du auch eine Tabelle mit dem Index aufbauen... Übrigens: wie laufen diese Indices weiter? Oder war das schon alles?
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.