Forum: FPGA, VHDL & Co. Vivado-Post-Synthesis Simulation liefert falsche Werte


von Empa (Gast)


Lesenswert?

Hey,
ich muss mich bezüglich meiner Diplomarbeit in VHDL einarbeiten. Leider 
hatten wir nie etwas in der Richtung gehabt, also musste ich es mir 
selber beibringen.
Nun habe ich Code für ein VGA Controller geschrieben, welcher leider 
nicht funktionierte. Also reduzierte ich die komplexität auf nur einen 
einfachen Counter, welcher nach 2 sekunden die LEDS toogelt. Lauft 
Behavior Simulation funktioniert das alles ohne Problem. Leider machen 
die Post-Synthesis und Post-Implemantation Simulation nicht mit (daher 
beim aufspielen auf den FPGA passiert auch nichts außer dem standard 
Leuchten). Habe auch schon eine andere Software fürs Simulieren probiert 
ohne Erfolg
Könnte mir bitte einen Stoß in die richtige Richtung geben bzw. mir 
sagen warum das nicht funktioniert?
Sitze jetzt schon nen Stück dran und verzweifle langsam...

FPGA: Zynq-7000 series (Zedboard)
Suite: Vivado 2013.3 / ModelSim zur überprüfung


PS: Hier habe ich schon gepostet jedoch konnte keiner helfen aber evt 
sind Fragen die ihr habt dort beantwortet 
http://www.computerbase.de/forum/showthread.php?t=1301303
1
    library IEEE;
2
    use IEEE.STD_LOGIC_1164.ALL;
3
     
4
     
5
    use IEEE.NUMERIC_STD.ALL;
6
     
7
     
8
     
9
    entity ClockLED is
10
    Port (
11
    --CLK : in std_logic; -- only in non-Simulation
12
    LEDS : out std_logic_vector(7 downto 0)
13
     
14
    );
15
    end ClockLED;
16
     
17
    architecture Behavioral of ClockLED is
18
     
19
    type state_LEDS is (CNT1, CNT2, SETLEDS); -- defines the states
20
    signal state_LED : state_LEDS;
21
     
22
    signal LEDACTIVE : std_logic_vector(7 downto 0) := "11100011";
23
    signal SUM:integer range 0 to 2000005 := 0;
24
    signal CLK: std_logic;
25
     
26
    begin
27
     
28
    ---------------CLK Simulation------------
29
    process
30
    begin
31
    wait for 500 ns;
32
    CLK <= '1';
33
    wait for 500 ns;
34
    CLK <= '0';
35
    end process;
36
     
37
     
38
    -------------Counter and toogle--------------
39
    process(CLK)
40
    begin
41
     
42
    if rising_edge(CLK)THEN
43
     
44
     case state_LED is
45
      When CNT1 =>
46
       if SUM>2000000 then
47
        state_LED<=SETLEDS;
48
       else
49
        SUM <= SUM+1;
50
     
51
       end if;
52
     
53
      When SETLEDS =>
54
       SUM<=0;
55
       LEDACTIVE<= not LEDACTIVE;
56
       state_LED<=CNT1;
57
58
      When others =>
59
       state_LED<=CNT1;
60
61
      end case;
62
63
     end if;
64
    end process;
65
66
    LEDS<=LEDACTIVE;
67
     
68
    end Behavioral;

von pks (Gast)


Lesenswert?

Hallo,

Vergiss das mit der PostXY-Simulation mal. In der Regel brauchst Du die 
nicht. Wichtig ist erstmal, dass:
1. Die Logik-Simulation funktioniert (tut sie ja)
2. Du alle IOs und Clocks richtig constraint hast
3. Das Synthese-Tool keine Fehler auswirft

Ich vermute jetzt Dein Problem eher bei 2.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Empa schrieb:
> Leider machen die Post-Synthesis und Post-Implemantation Simulation
> nicht mit (daher beim aufspielen auf den FPGA passiert auch nichts außer
> dem standard Leuchten).
Ja, ist klar.
In ein synthetisierbares VHDL-Modul gehört keine Takterzeugung mit "wait 
for 500 ns;" Wie soll denn das in Hardware umgesetzt werden können? 
Welches Bauteil soll der Synthesizer da hernehmen? Die legendäre 
500ns-Verzögerungsleitung?


Richtig: er hat keines, und deshalb ignoriert er einfach die gesamte 
Takterzeugung. Heraus kommt: eine dauerleuchtende LED.

Wenn ein "wait for" synthetisierbar wäre, könnte man eine LED mit
"LED <= not LED after 500 ms;" zum Blinken bringen:
http://www.lothar-miller.de/s9y/archives/80-Hello-World!.html

: Bearbeitet durch Moderator
von Empa (Gast)


Angehängte Dateien:

Lesenswert?

Die IOs sind alle richtig constraint, da die LEDS funktionieren. Habe 
sie auch mit den SWS ein/aus geschaltet. Soweit klappt das ganz gut.

Die Clocks dürfte auch richtig gehen. Habe mal ein Bild von der 
Einstellung angehängt.

von pks (Gast)


Lesenswert?

Lothar Miller schrieb:
> Ja, ist klar.
> In ein synthetisierbares VHDL-Modul gehört keine Takterzeugung mit "wait
> for 500 ns;" Wie soll denn das in Hardware umgesetzt werden können?

Ups, den code hab ich mir gar nicht wirklich angeschaut :)
Was macht denn ISE überhaupt damit? Gibts da keine Meldung?

von Empa (Gast)


Lesenswert?

Die CLK erzeugung ist ja nur für die Simulation. Wenn ich den Code auf 
den FPGA bringe, wird natürlich ein richtiger Clock von der IO PLL 
angelegt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Empa schrieb:
> Die CLK erzeugung ist ja nur für die Simulation.
Das geht aber normalerweise anders...
Dafür schreibt man üblicherweise eine Testbench, die den Prüfling als 
Komponente einbindet und stimuliert.

> Wenn ich den Code auf den FPGA bringe, wird natürlich ein richtiger
> Clock von der IO PLL angelegt.
Nicht einfach ein Takt von einem Takteingang? Wozu die PLL?

: Bearbeitet durch Moderator
von Empa (Gast)


Lesenswert?

Bei vivado hat man einen eigenen IO PLL. Diesen Clock kann man dann über 
devider verändern. Oben haben ich ein Bild gepostet, in dem man dies 
erkennen kann.

Das mit der extra testbench, wie auf deiner Homepage, werde ich 
implementieren.

von Empa (Gast)


Angehängte Dateien:

Lesenswert?

Anbei der aufbau der Schaltung. Hier ist jetzt der extra clock dran und 
es wird nichts mehr simuliert(aus dem Code entfernt). Aber die 
Post-Synthesis toogelt einfach den Ausgang nicht.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Empa schrieb:
> Bei vivado hat man einen eigenen IO PLL. Diesen Clock kann man dann über
> devider verändern.
Aber irgendwo muss ein Oszillator angeschlossen sein. Das Vivado (oder 
eher das FPGA) saugt sich den Takt ja nicht aus den Knochen...

von Empa (Gast)


Lesenswert?

Es sind 2 Oscillatoren drauf.
Die PS section hat einen mit 33.3333 Mhz
Die PL section hat einen mit 100 Mhz

von Empa (Gast)


Lesenswert?

habe eben auch mal den Counter auf den LEDS ausgang geschaltet ist aber 
konstant auf 0 geblieben. Liegt also vermutlich am Takt.

von Fpgakuechle K. (Gast)


Lesenswert?

deiner statemachine fehlt die initialisierung, das mindeste ist

signal state_LED : state_LEDS := CNT1;

der state CNT2 ist zwar definiert, wird aber nie benutzt.

MfG,

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Empa schrieb:
> Die PS section hat einen mit 33.3333 Mhz Die PL section hat einen mit
> 100 Mhz
Würde mir sehr zu denken geben, dass das so gar nicht zu den Zahlen im 
Beitrag "Re: Vivado-Post-Synthesis Simulation liefert falsche Werte" passt...

Empa schrieb:
> Liegt also vermutlich am Takt.
Sehr wahrscheinlich. Du kannst auch einfach mal den Takt an einem Pin 
ausgeben und mit einem Oszi kontrollieren, ob da was kommt.

von Fpgakuechle K. (Gast)


Lesenswert?

U.U. hast du einen port und ein signal gleichen namens, nämlich clk.

für eine simulation "erzeugt" man keinen Takt in dem Modul, sondern 
ausserhalb der top-level entity.

MfG.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Fpga Kuechle schrieb:
> deiner statemachine fehlt die initialisierung, das mindeste ist
> signal state_LED : state_LEDS := CNT1;
Das macht der Synthesizer von sich aus: er nimmt bei uninitialisierten 
Signalen den linkesten Wert der Typdefinition. Die Verhaltenssimulation 
würde diesen Fehler aber aufzeigen...

von Empa (Gast)


Lesenswert?

Leider habe ich gerade kein Osci da :(
Werde mir eins nächste woche ausleihen.

Die Osci auflistung steht hier
http://www.zedboard.org/sites/default/files/ZedBoard_HW_UG_v1_3.pdf
Seite 3

von Fpgakuechle K. (Gast)


Lesenswert?

Empa schrieb:
> Anbei der aufbau der Schaltung. Hier ist jetzt der extra clock dran und
> es wird nichts mehr simuliert(aus dem Code entfernt). Aber die
> Post-Synthesis toogelt einfach den Ausgang nicht.

Der port FCKL_RESET0_N ist ein unbeschalteter Eingang??

von Empa (Gast)


Lesenswert?

ja ich benutzte derzeit den Reset nicht.

von 123 (Gast)


Lesenswert?

Empa schrieb:
> ja ich benutzte derzeit den Reset nicht.

Solltest du vielleicht. Der Reset ist laut Bezeichnung "active low", 
d.h. das Modul ist immer im Reset.

von Empa (Gast)


Lesenswert?

Prinzipiell kann ich diese ja nur abfragen und nicht ändern.
Wird das regestriert wenn ich den abhole?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Empa schrieb:
> Prinzipiell kann ich diese ja nur abfragen und nicht ändern.
> Wird das regestriert wenn ich den abhole?
Wen? Wie? Wo?
Besorg dir mal das Buch "VHDL-Synthese" in der nächsten Bücherei...

Empa schrieb:
> Leider habe ich gerade kein Osci da :(
> Die Osci auflistung steht hier
Bitte niemals das selbe Wort für ganz was anderes verwenden, ohne vorher 
den Kontext geklärt zu haben. Das verwirrt nur unnötig!

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Empa schrieb:
> ich muss mich bezüglich meiner Diplomarbeit in VHDL einarbeiten. Leider
> hatten wir nie etwas in der Richtung gehabt, also musste ich es mir
> selber beibringen.
Das finde ich aber reichlich seltsam. Die meisten Studenten lernen doch 
Digitaltechnik und werden im Zuge dessen auch mit den einschlägigen 
Beschreibungssprachen bekannt gemacht. Bei mir ist das schon 20 Jahre 
her und heute ist das definitiv nicht anders.

Da VHDL Stand der Technik ist, hätte ich die Erwartungshaltung, dass 
jeder Studi, der sich mit Digittechnik befasst, genau das lernt und 
diejenigen, die das nicht haben, nicht ausgerechnet eine DA anfertigen, 
bei der das abverlangt wird.

Wie kommt's, dass Du nun auf eine solche DA gestossen bist / wurdest?

von Empa (Gast)


Lesenswert?

Nunja wir hatten ja Digitaltechnik sowie Computerarchitektur. Beides 
habe ich mit einer 1.3 abgeschlossen, habe also aufgepasst. Problem war 
jedoch, das unser Prof. von DIgitaltechnik das im 6 semester in 
Computerarchitektur drannehmen wollte. Jedoch hat er die FH gewechselt 
und der neue Prof. war nur aushilfe mäßig da und hat natürlich was 
anderes drangenommen... Desswegen setzte ich mich derzeit erneut in die 
Vorlseungen bei wieder einen neuen Prof. rein...
So war das bei uns auch bei anderen Fächern. Extrem frustrierend...

von Grendel (Gast)


Lesenswert?

Bei uns hatte damals zwar nicht andauernd der Prof. gewechselt (der 
Dozent war sowieso nur ein Herr Doktor und der Übungsleiter nur 
Dipl-Ing. ;-) ) aber wirklich viel VHDL kam auch nicht dran - wenn man 
wollte(!) dann waren es zwei Vorlesungen sonst wars nur eine wo aber zu 
75% Konzepte und Architektur im Vordergrund standen...
da musste man schon direkt ein Projekt in der passenden Arbeitsgruppe 
mitmachen um mehr Praxis zu erhalten.

Also so ungewöhnlich ist das nicht.

von Marten W. (goldmomo) Benutzerseite


Lesenswert?

Lass dich bloß nicht verrückt machen :-)

Schau einfach mal in der Top-Level Entity ob bei deiner PLL auch alle 
Eingänge gesetzt sind (bzw. Poste sie mal, vielleicht auch die 
Warning/Error-Ausgaben). Das Pin-Assignment kann ja nicht so falsch sein 
(siehst ja, dass die LEDs deinen Default-State anzeigen).

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.