Hallo,
ich kann mir das reject-inertial-Modell irgendwie sehr schwer
vorstellen.
Reject xy ns heisst ja, dass alle Impulse die mindestens xy Nanosekunden
lang anlagen nicht unterdrückt werden, auch wenn sie kürzer als die
Verzögerungszeit des Gatters sind. Nun folgendes Beispiel:
Ich habe ein Gatter mit einer Verzögerungszeit von 12 ns, will aber
Impulse mit einer Impulsdauer von 3 ns nicht mehr unterdrücken (also nur
alle die kleiner 3 ns anliegen).
Das könnte ja bspw. ein Takt sein, dessen Phasen jeweils 3 ns lang
anliegen (also Wert 1 liegt 3 ns lang an, Wert 0 liegt 3 ns lang an,
usw.).
Angenommen zum Zeitpunkt 0 ns liegt am Eingang des Gatters der Wert 1
an. Nach 3 ns liegt der Wert 0 an. Nach 6 ns der Wert 1. NAch 9 ns der
Wert 0 und nach 12 ns der Wert 1.
Wenn also nach 12 ns das dritte mal der Wert 1 anliegt, ändert sich der
Ausgangswert des Gatters aufgrund des 1-Wertes zum Zeitpunkt 0 ns. Das
heisst wiederum, dass die Werte 0, 1, 0 zu die zu den Zeitpunkten 3 ns,
6 ns, 9 ns am Eingang anlagen ja irgendwie im Gatter gespeichert werden
müssen... Und das obwohl doch so ein Gatter keine internen Zustände hat.
Ich versuch mir grad den Zusammenhang zwischen VHDL und der Hardware
(die ja in VHDL beschrieben werden soll) klar zu machen.
Hoffe irh versteht was mein Problem ist und könnt mir helfen. Vllt hab
ich auch nur einen groben Denkfehler drin.
Mfg
Guest
Du verknotest hier zwei Mechanismen:
1. eine Art "Massenträgheit":
nur Impulse ab einer bestimmten Dauer werden überhaupt etwas bewirken
2. eine Verzögerungszeit:
jedes Gatter hat eine (angenommen konstante) Durchlaufzeit
In der Praxis sieht das so aus:
1
1 Zeichen = 1ns
2
_ = 1ns low
3
- = 1ns high
4
reject 3ns: Änderungen kleiner 3ns werden ignoriert
Hallo,
danke für deine Antwort.
Also wenn ich das richtig verstehe, gibt reject x ns an, wie lange ein
Signal mindestens am Eingang anliegen muss. Und after y ns gibt an, wie
lange das Gatter braucht, bis eine Wertänderung am Ausgang zu beobachten
ist.
Beim inertial-Modell gibt after dann sozusagen beides gleichzeitig an.
Zum einen, dass ein Signal, das kürzer als die angegebene Zeit anliegt,
unterdrückt wird. Zum anderen, wie groß die Durchlaufzeit des Gatters
ist.
Dann sind also folgende Anweisungen äquivalent:
1
s<=inertialaafter10ns;
und
[vhdls <= reject 10 ns inertial a after 10 ns;[/vhdl]
Was mir dennoch nicht klar ist, ist wie das ganze in Hardware
funktionieren kann. Denn bspw. bei
1
input<='0','1'after2ns,'0'after3ns;
2
output<=reject2nsinertialinputafter8ns;
Die '0'-Phase am Anfang wird um 8 ns verzögert output zugewiesen, weil
das Gatter eine (baulich bedingte) Verzögerungszeit/Durchlaufzeit von 8
ns hat. Zum Zeitpunkt 2 ns liegt aber schon der Wert '1' am Eingang an.
Das Gatter ist doch aber noch mit dem Wert '0' beschäftigt. Müsste sich
das Gatter dann nicht in einer Art Puffer alle am Eingang anliegenden
Signale merken?
MfG
Guest schrieb:> Müsste sich das Gatter dann nicht in einer Art Puffer alle am Eingang> anliegenden Signale merken?
Wieviele Bits haben auf 100m Kupferkabel beim 10BaseT Ethernet Platz?
Dann haben wir eine Signallaufzeit 0,59×c (100m -> 0,565µs) und eine
Bitdauer von 0,1us. Somit passen auf 100m Leitung 565 Bits...
Die Leitung kann sich die Bits "merken" und verzögert ausgeben.
Guest schrieb:> Was mir dennoch nicht klar ist, ist wie das ganze in Hardware> funktionieren kann
Das wirst du nicht in Hardware gegossen bekommen!
Diese ganzen Sprachkonstrukte funktionieren nur andersrum:
Wenn du an einem real existierenden Baustein (oder der angesprochenen
Ethernetleitung) so ein Verhalten beobachtet hast, dann kannst du es mit
VHDL beschreiben.
Denn das ist VHDL in erster Linie: eine Hardwarebeschreibungssprache.
Bestenfalls 1% vom Sprachumfang von VHDL taugt auch für die Synthese und
kann für den umgekehrten Weg (VHDL nach Hardware) verwendet werden...
:-(
Lothar Miller schrieb:> Wieviele Bits haben auf 100m Kupferkabel beim 10BaseT Ethernet Platz?> Dann haben wir eine Signallaufzeit 0,59×c (100m -> 0,565µs) und eine> Bitdauer von 0,1us. Somit passen auf 100m Leitung 565 Bits...> Die Leitung kann sich die Bits "merken" und verzögert ausgeben.
Achso, ok. Also kann sich so ein Baustein durchaus einige Bits merken.
Allerdings ist die Anzahl der Bits, die sich die Leitung/der Baustein
merken kann, nun auch durch die Leitungslänge und die Signallaufzeit
bestimmt. Das heisst, das Ganze ist ein Maß für den maximalen Takt?
Lothar Miller schrieb:> Diese ganzen Sprachkonstrukte funktionieren nur andersrum:> Wenn du an einem real existierenden Baustein (oder der angesprochenen> Ethernetleitung) so ein Verhalten beobachtet hast, dann kannst du es mit> VHDL beschreiben.
Ja, das ist mir klar. In VHDL gibt es ja Sprachkonstrukte, die
synthetisierbar sind und solche, die es nicht sind (bspw. File,
assert,...). Ich dachte halt nur, dass reject zu den synthetisierbaren
gehört. Bzw.: reject soll ja ein, in einem real existierendem Baustein,
beobachtetes Verhalten beschreiben. Und ich hatte mich halt gefragt, wie
dieses beobachtete Verhalten aussehen mag.
MfG
Guest schrieb:> Achso, ok. Also kann sich so ein Baustein durchaus einige Bits merken.
Jein, eine Leitung kann das, ein Gatter wahrscheinlich nicht...
> dass reject zu den synthetisierbaren gehört.
Nein. Sicher nicht.
Nicht mal sowas wirklich einfaches wie ein
output <= input after 3ns;
kann synthetisiert werden.
> Bzw.: reject soll ja ein, in einem real existierendem Baustein,> beobachtetes Verhalten beschreiben.
Richtig.
So herum stimmt es: das Verhalten wurde zuerst beobachtet, dann in
einem (Simulations-)Modell beschrieben.
> dass reject zu den synthetisierbaren gehört.
Was synthetisiert werden kann, wird in entsprechenden
Synthesis-Guidelines beschreiben.
Lothar Miller schrieb:> Jein, eine Leitung kann das, ein Gatter wahrscheinlich nicht...
Ok, das heisst man müsste bei der Synthese darauf achten/sicherstellen,
dass der Takt nicht schneller am Eingang anliegt, als das Gatter Zeit
benötigt, bis sich am Ausgang eine Änderung einstellt?
Oder anders gesagt: Das Gatter muss genug Zeit haben (after y ns), um
eine Wertänderung am Eingang zu verarbeiten.
Also ist
1
out<=reject3nsinafter10ns;
zwar simulierbar (es ergibt sich ein um 10 ns verschobenes Signal, das
nur die Impulse enthält die nicht kleiner 3 ns sind), aber es ist nur
realisierbar, wenn der Takt entsprechend langsam gewählt wird?
Guest schrieb:> Ok, das heisst man müsste bei der Synthese darauf achten/sicherstellen,> dass der Takt nicht schneller am Eingang anliegt, als das Gatter Zeit> benötigt, bis sich am Ausgang eine Änderung einstellt?
Ja, aber das mußt (zumindest bei FPGAs) nicht du machen, sondern du
sagst der Toolchain, wie das Timing aussieht (Timing Constraints), und
die Toolchain sorgt dann dafür, das es mit den verfügbaren Mitteln geht.
Oder sie gibt eine Fehlermeldung aus, wenn sie es nicht schafft, das von
dir gewünschte Timing einzuhalten.
> aber es ist nur realisierbar,
Es ist nicht realisierbar. Diese Richtung von VHDL nach Hardware gibt es
nicht! Es ist eine Beobachtung, die an der Hardware gemacht und mit VHDL
beschreiben wurde.
> wenn der Takt entsprechend langsam gewählt wird?
Welchen Takt meinst du?
Ein Takt ist da doch gar nicht involviert...