component stufenweise (Takt bei Takt) aufrufen

Gast #2391294
Lesenswert?

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!!
Moderator (Firma: Titel) Persönliche Seite #2392257
Lesenswert?

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...
Gast #2393407
Lesenswert?

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ß!
Gast #2393988
Lesenswert?

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
Gast #2394422
Lesenswert?

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.
Moderator (Firma: Titel) Persönliche Seite #2394989
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren