VHDL-Forum

 
Sie sind nicht eingeloggt.
LoginLogin Kostenlos anmeldenKostenlos anmelden
BeiträgeBeiträge MembersMitglieder SucheSuche HilfeHilfe
VotesUmfragen FilesDateien CalendarKalender BookmarksBookmarks
Parallele Signalzuweisung

Anfang   zurück   weiter   Ende
Autor Beitrag
mary chain
Gast
New PostErstellt: 27.05.08, 09:40  Betreff:  Parallele Signalzuweisung  drucken  Thema drucken  weiterempfehlen Antwort mit Zitat  

Hallo,

ich würde gerne folgendes Schaltbild mit VHDL nachbilden. Diese Maschine macht nichts sinnvolles, es geht um das prinzipielle Verständnis:



Ich habe dazu zwei Prozesse geschrieben, einen für das Bauteil P1 und einen für das Bauteil P2.

Der Wert, der am Eingang I bei einer steigenden Taktflanke anliegt, soll in P1 an X und an S ausgegeben werden. Dieses X soll gleichzeitig P2 empfangen und an Y ausgeben.

Mit meinem Modell verhält es sich nun leider so, dass X erst einen Takt später zugewiesen wird und nicht gleichzeitig.

Ich dachte eigentlich, dass die Signale so lange die Deltazyklen durchlaufen, bis der richtige Wert eingestellt ist.

Hier ist meine Architektur. (Anzumerken ist, dass ich oben im Schaltbild den Reset vergessen habe, ist natürlich in der Architektur enthalten)

ARCHITECTURE rtl OF tsm IS
SIGNAL X : STD_LOGIC := '0';
BEGIN -- ARCHITECTURE rtl

proc1: PROCESS (clk, reset) IS
BEGIN -- PROCESS proc1
IF reset = '0' THEN -- asynchronous reset (active low)
X <= '0';
ELSIF clk'event AND clk = '1' THEN -- rising clock edge
X <= I;
S <= I;
END IF;
END PROCESS proc1;

proc2: PROCESS (clk, reset) IS
BEGIN -- PROCESS proc2
IF reset = '0' THEN -- asynchronous reset (active low)
Y <= '0';
ELSIF clk'event AND clk = '1' THEN -- rising clock edge
Y <= X;
END IF;
END PROCESS proc2;

END ARCHITECTURE rtl;

Kann man diese Architektur noch retten? Habe ich etwas falsch verstanden und wie würde man so eine Schaltung besser modellieren?

Vielen Dank für die Hilfe
mary chain
nach oben
Gast
New PostErstellt: 24.06.08, 10:23  Betreff: Re: Parallele Signalzuweisung  drucken  weiterempfehlen Antwort mit Zitat  

Das Verhalten ist so wie von Dir beschrieben in VHDL beabsichtigt.

Durch die Verwendung des zweiten FFs für Y verzögerst Du das Signal um einen Takt. Wenn die beiden Ausgänge sich zeitgleich ändern sollen, dann ist das 2. FF obsolete und X = Y.

Zum Delta-Delay:
Bei parallelen (asynchronen) Signalzuweisungen gilt das so wie beschrieben
Beispiel (parallele Signalzueisungen)
Sig1 <= A + B;
Sig2 <= A + Sig1;
Sig3 <= C + Sig2:

Wenn sich A oder B ändert, dann ändert sich Sig1 (die Änderung wird ein Delta-Delay später wirksam). Diese Änderung bedingt dann wiederum eine Änderung an Sig2, diese dann eine an Sig3, d.h. am Ende hat Sig3 den Wert von A+A+B+C - nach 3 Deltazyklen (sind trotzdem 0 ns)

Allerdings ist in Deiner Schaltung ja ein Clock definiert, der wiederum ein definiertes Timing hat. Also nach der ersten Taktflanke ändern sich alle parallelen Signale, bis das System stabil ist, und wartet dann auf den nächsten Zeitevent (hier auf den Takt, das kann aber auch eine Anweisung sein, die um eine bestimmte Zeit (10 ns oder was auch immer) verzögert wurde.

BTW, wenn obiges Beispiel (Sig1-3) in einem getakteten Prozess stehen würde, dann würde Sig2 den alten Wert von Sig 1 verwenden und Sig3 den alten von Sig2, und die neuen Werte erst einen bzw. 2 Takte später berücksichtigt werden.
nach oben
Sortierung ndern:  
Anfang   zurück   weiter   Ende
Seite 1 von 1
Gehe zu:   
Search

powered by carookee.com - eigenes profi-forum kostenlos

Design © trevorj