Hallo allerseits, ich möchte kurz gesagt einen Prozess realisieren, der
per RS232 Daten versendet. Ich hab also einfach mal drauf los gemacht
und unten seht ihr was dabei herausgekommen ist. Problem ist jetzt
folgendes. Wenn ich eine einfache Behavioral Sim mache (ohne
Testbench-Datei) scheint alles zu funktionieren. Jetzt hab ich mal eine
Testbench geschrieben, aber alle Ausgänge behalten in der Simulation
frech einfach ihre Werte, als würde nichts passieren.
Also ich würde mich freuen wenn der ein oder andere mal rüberguckt,
Tipps oder Vorschläge zum Fehler oder auch allgemeiner Natur hat. Danke
soweit :)
Johannes Beyer schrieb:> Wenn ich eine einfache Behavioral Sim mache (ohne> Testbench-Datei) scheint alles zu funktionieren.
??? Simulation ohne Testbench (aka Stimuli) ???
> Jetzt hab ich mal eine> Testbench geschrieben, aber alle Ausgänge behalten in der Simulation> frech einfach ihre Werte, als würde nichts passieren.
Mglw. passiert auch nichts in deiner Testbench. Da die Testbench nicht
vorliegt kann man nichst dazu sagen. Mit welchen Kommandos hast du die
Simulation gestartet?
Dann sollte man sich mal die Variable zähl anschauen ob sich da was in
der gewünschten Art und Weise tut.
MfG
Ohne Testbench, indem ich einfach die Behavorial Simulation, halt ohne
vorher eine Testbench zu erstellen, starte. Im Simulator muss man dann
halt alle Signale manuell setzen. Und so funktioniert es scheinbar auch.
Anschließend habe ich folgende Testbench geschrieben. Die Eingänge
werden in der Simulation auch wie gewünscht gesetzt. Die Ausgänge
reagieren jetzt aber plötzlich überhaupt nichtmehr..
Testbench:
1
LIBRARYieee;
2
USEieee.std_logic_1164.ALL;
3
4
ENTITYTest_BehIS
5
ENDTest_Beh;
6
7
ARCHITECTUREbehaviorOFTest_BehIS
8
9
-- Component Declaration for the Unit Under Test (UUT)
Nur mal so als Frage: warum hast du zaehl als Variable implementiert?
variable zaehl: natural range 0 to FTeiler_Vorwahl-1;
Ich hätte wohl ein Signal genommen. Was spricht für die Variable?
Johannes Beyer schrieb:> Ohne besonderen Grund. Was spricht für ein Signal?
Es ist ein signal. Zaehl ist ein digitaler counter, also ein paar FF mit
Drähten zur Verteilung der elektrischen Signale. Elektrische Signale
sind nicht unendlich schnell sondern haben eine gewisse
Verzögerungszeit. Dementsprechend behandelt sie auch der Simulator, es
wird nicht nur der Wert simuliert (berechnet) sondern auch das zeitliche
Verhalten. So wird ein neu berechneter Wert erst am ende eines prozesses
zugewiesen, bei einer variablen sofort.
Es gibt eine einfache Faustregel für die Verwendung von Variablen:
Benutze keine Variablen!
Wenn man einige Erfahrung hat und VHDL soweit versteht, das man keine
Faustregeln mehr braucht, dann kann man sie in Testbenches verwenden.
Wenn Du zaehl für den process kapseln willst, dann schreib das in einen
Block:
du legst erst nach 20us einen Reset an, bis dahin sind Teile deiner
Signale/Variablen auf einem undefinierten Wert.
Nach dem Reset ist alles in einem definierten Zustand, und du versuchst
mit IntCLK eine Flankenerkennung auf TXDStart zu machen. IntCLK hat aber
eine Periode von 8,6µs, der High-Puls auf TXDSTart ist nur 2,9µs lang ->
du verpasst den Highpuls auf TXDStart uns startest nie den Transmitter.
Deshalb tut sich nichts an den Ausgängen.
Johannes Beyer schrieb:> Was spricht für ein Signal?
z.B. dass man bei der Simulation das folgende Problem vermeidet:
WARNING: Simulation object /test_beh/uut/:FTeiler/zaehl was not
traceable in the design for the following reason:
ISim does not yet support tracing of VHDL variables.
Du kannst dir in einer Simulation nicht nur die Ausgänge sondern auch
die internen Signale anschauen. Damit verstehst du auch sofort, warum
sich die Ausgänge in deiner Simulation nicht ändern. (Interne Variablen
lassen sich hingegen zumindest in meiner ISIM-Version nicht anzeigen.)
Unabhängig von den Simulationsproblemen sollte dir für die Synthese klar
sein, dass du hier ein Logiksignal als Takt missbrauchst:
Johannes Beyer schrieb:> elsif(Intclk'event and Intclk='1') then
Das kann beim Betrieb im FPGA alle möglichen unschönen Effekte geben.
Implementiere sowas als ein Clock Enable, nicht als ein mit Logik
erzeugtes Taktsignal
Hallo,
na ja ohne eine clock läuft da ja auch nichts, mal clk in der simulation
angezeigt?
Für deinen Clk-Stimulus brauchst du noch ein Loop-Statment sonst macht
er das genau einmal.
Mfg
dden schrieb:> na ja ohne eine clock läuft da ja auch nichts, mal clk in der simulation> angezeigt?
CLK läuft in der Simu mit einer Periode von 20ns, so wie sich beyjoh das
gedacht hat.
Lass das doch den Synthesizer rechnen...
> Also ich würde mich freuen wenn der ein oder andere mal rüberguckt,> Tipps oder Vorschläge ... hat
Sieh dir das mal an:
http://www.lothar-miller.de/s9y/categories/42-RS232> ich möchte kurz gesagt einen Prozess realisieren, der per RS232 Daten> versendet.
Das ist eine krude Denkweise. Du kannst Hardware nicht so einfach in
einzelen Prozesse kapseln. Oft geht das gut, zeimlich oft aber auch
nicht, und dann stehst du mit dieser "Prozess=Bauteil" Denkweise sauber
im Regen. Nicht umsonst werden in VHDL ganze Einheiten (entities) als
Bauteil (components) in anderen Einheiten instantiiert...
Johannes Beyer schrieb:> Was spricht für ein Signal?
Alles, was gegen eine Variable spricht. Siehe den Klassiker:
Beitrag "Variable vs Signal"
Achim S. schrieb:> Unabhängig von den Simulationsproblemen sollte dir für die Synthese klar> sein, dass du hier ein Logiksignal als Takt missbrauchst:>> Johannes Beyer schrieb:>> elsif(Intclk'event and Intclk='1') then>> Das kann beim Betrieb im FPGA alle möglichen unschönen Effekte geben.> Implementiere sowas als ein Clock Enable, nicht als ein mit Logik> erzeugtes Taktsignal
kannst du mir bitte konkret zeigen wie ich das mache?
Johannes Beyer schrieb:>> Implementiere sowas als ein Clock Enable, nicht als ein mit Logik>> erzeugtes Taktsignal>> kannst du mir bitte konkret zeigen wie ich das mache?
du findest hier ein Beispiel für die Nutzung eines Clock-Enable Signals:
http://www.mikrocontroller.net/articles/Taktung_FPGA/CPLD
Im Abschnitt "Kombinatorik im Taktpfad" wird auch beschrieben, welche
Nachteile bisheriger Ansatz hat.