 |
 |
|
Anfang
zurück
weiter
Ende
|
Autor |
Beitrag |
mary chain
Gast
|
Erstellt: 27.05.08, 09:40 Betreff: Parallele Signalzuweisung
drucken
Thema drucken weiterempfehlen
|
|
|
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
|
Erstellt: 24.06.08, 10:23 Betreff: Re: Parallele Signalzuweisung
drucken
weiterempfehlen
|
|
|
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 |
|
 |
|
powered by carookee.com - eigenes profi-forum kostenlos
Design © trevorj
|