Forum: FPGA, VHDL & Co. Lattice ispLever/Aldec active-HDL Timing Simulation ?


von Heiko B. (2deep)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe probleme mit dem richtigem Timing in meinem Design und leider 
wenig bis keine Erfahrung mit Timing Simulationen. Zwar bekomme ich mein 
Design timing-simuliert aber kann mit dem Report leider nicht viel 
Anfangen.

Zum einen wollte ich fragen ob mir jemand ein gutes Buch oder Tutorial 
oder ähnliches zu diesem Thema empfehlen kann?

Zum anderen wollte ich mein Problem darstellen, vielleicht kann mir 
jemand direkt weiterhelfen.

Also:
In der Grafik kann man das Verhalten meines Designs innerhalb der 
Timing-Simulation erkennen. Wie man sieht ändern sich die 
Zählerstände/Ausgaben, allerdings sollten diese konsistent auf einem 
ermittelten Wert bleiben.
Diese Fehler tritt auch nur in der Timing-Simulation auf, in der 
funktionalen/logik Simulation tut das Design genau was es soll.

Hier noch ein Auszug aus meinem Code, folgender Prozess ermittelt z.B. 
den Wert für "totalPix" :
1
process (analysisClk, analysisReset, analysisHSync)
2
    variable var_analysisHSync  : std_logic;
3
    variable pixCounter      : std_logic_vector (11 downto 0);
4
    variable var_enableCtr    : std_logic; 
5
    variable var_oldEnableCtr   : std_logic; 
6
    variable ctrStarted      : std_logic;
7
  
8
  begin
9
    
10
    -- Rücksetzen der Variablen und Signale wenn Reset = '1'
11
    if analysisReset = '1' then
12
      tempTotalPix    <= (others=> '0');
13
      pixCounter      := b"000000000000";
14
      var_analysisHSync  := '0';
15
      internTotalPix    <= (others => '0');
16
      var_enableCtr     := '0';
17
      var_oldEnableCtr  := '0';  
18
      ctrStarted      := '0';
19
    -- erhöht pixCounter um "1" solange kein VSync
20
    elsif analysisClk = '1' and analysisClk'event then
21
      if analysisHSync = '1' and var_analysisHSync= '0' and ctrStarted = '0' then  
22
        var_enableCtr  := '1';
23
        ctrStarted    := '1';
24
      elsif analysisHsync = '1' and var_analysisHSync = '0' and ctrStarted= '1' then
25
        var_enableCtr  := '0';
26
        ctrStarted    := '0';
27
      end if;
28
      
29
      if var_enableCtr = '1' then
30
        pixCounter      := pixCounter +1;
31
        internTotalPix    <= pixCounter;
32
        -- wenn H-Sync von 1 auf 0 wechselt(Zeilenende) wird Zählerstand in tempTotalPix übernommen
33
        -- und der Pixel-Zähler wird zurückgesetzt
34
      --elsif analysisHSync = '0' and var_analysisHSync = '1' then 
35
      elsif var_enableCtr = '0' and var_oldEnableCtr = '1' then
36
        tempTotalPix    <= internTotalPix;
37
        pixCounter      := b"000000000000";
38
      end if;

Ein weiterer Prozess sorgt dafür das der Wert des Signals "tempTotalPix" 
erst nach einer definierten Anzahl von "V-Sync's"(Ende des Frames) an 
den Out-Port weiter gereicht wird.

Für jede Hilfe wäre ich sehr dankbar ebenso wie für entsprechende 
Buch-Empfehlungen :)

viele Grüße

Heiko

von Lupinus Digitalus (Gast)


Lesenswert?

Hallo Heiko,

versuch doch in der Timing Simulation auch die Enable Signale aus deinem 
Prozess mit einzubinden. Auch wenn diese in der Timing Simulation ab und 
zu etwas kryptische Namen haben, findet man diese in den meisten Fällen 
wieder. Um die Signale hinzuzufügen gehst Du in die Structure Ansicht 
des Aldec Designbrowsers und wählst die enstprechende Hierarchie Stufe 
aus.

Dann kannst Du die Signale wie gewohnt in das Simulationsfenster ziehen.

Vergiss nicht, anschliessend ein restart und run 10 us in das 
Konsolenfenster einzugeben.

Dadurch siehst Du etwas besser, was in deinem Design verkeht läuft.

Viele Grüsse

Lupi

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.