Forum: FPGA, VHDL & Co. Synchroner Rest will nicht (Spartan 3e)


von Patrick B. (p51d)


Lesenswert?

Hallo

Ich stehe mal wieder vor einem undefinierbaren VHDL Problem: Ich möchte 
ein kleiner Empfänger für ein EM4095 bauen, doch leider läuft nicht 
einmal der Reset.
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
USE ieee.numeric_std.ALL;
4
5
entity EM4095_Reader is
6
   Generic (
7
    delay_cnt_max : integer := 2500000);
8
    
9
    Port ( reset : in  STD_LOGIC;
10
           clk2 : in  STD_LOGIC;
11
           Demod : in  STD_LOGIC;
12
           RDY_CLK : in  STD_LOGIC;
13
           nMOD : out  STD_LOGIC;
14
           nSHD : out  STD_LOGIC;
15
        row_0 : out STD_LOGIC_VECTOR(3 downto 0);
16
         row_1 : out STD_LOGIC_VECTOR(3 downto 0);
17
         row_2 : out STD_LOGIC_VECTOR(3 downto 0);
18
         row_3 : out STD_LOGIC_VECTOR(3 downto 0);
19
         row_4 : out STD_LOGIC_VECTOR(3 downto 0);
20
         row_5 : out STD_LOGIC_VECTOR(3 downto 0);
21
         row_6 : out STD_LOGIC_VECTOR(3 downto 0);
22
         row_7 : out STD_LOGIC_VECTOR(3 downto 0);
23
         row_8 : out STD_LOGIC_VECTOR(3 downto 0);
24
         row_9 : out STD_LOGIC_VECTOR(3 downto 0);
25
        testport : out std_logic_vector(7 downto 0));
26
end EM4095_Reader;
27
28
architecture Behavioral of EM4095_Reader is
29
begin
30
31
  process(clk2)
32
  begin
33
    if rising_edge(clk2) then    
34
      -------------------------------------------------------------------------
35
      -- Reset
36
      -------------------------------------------------------------------------
37
      if (reset = '1') then
38
        testport <= (others => '0');
39
        
40
      -------------------------------------------------------------------------
41
      -- Normaler Betrieb
42
      -------------------------------------------------------------------------
43
      else
44
        testport <= "10101010";
45
      end if;
46
    end if;
47
  end process;
48
end Behavioral;

Die Ledanzeige (testport) bleibt konstant auf "10101010" und wechselt 
nie, egal ob ich den Taster drücke, oder ein Schalter nehme oder sonst 
was. Wo ist hier mein Fehler?
Eigentlich wäre noch eine ganze Statemachine dabei, doch die habe ich 
mitlwereile komplett auskommentiert und der Reset läuft immer noch 
nicht.
Bei der Synthese gibts zwar irgendwelche Warnungen (optimierung von 
testport, da gewisse Bits konstant sind) aber in der Simulation läufts 
und anhand der Beispiele sollte das doch richtig sein?

Besten Dank
Gruss
Patrick

von Ottmar (Gast)


Lesenswert?

Der Reset liegt auch auf dem richtigen Pin?

von Patrick B. (p51d)


Lesenswert?

1
NET "Reset"  LOC = "K17" | PULLDOWN  | IOSTANDARD = LVCMOS33 ;

Der ist 100% richtig, da das selbe Reset-Signal auf anderen Modulen im 
gleichen Schema asynchron wunderbar funktioniert. Es läuft auch, wenn 
ich im Prozess einfach eine if-else abfrage auf den Reset mache 
(ausserhalb von if rising_ege(clk2)), nur synchron in der if-Bedingung 
des Clk gehts nicht.

von daniel__m (Gast)


Lesenswert?

Patrick B. schrieb:
> nur synchron in der if-Bedingung
> des Clk gehts nicht.

ist der Takt vorhanden? Oder steht der während des Resets auch?

von Patrick B. (p51d)


Lesenswert?

Ach, darauf hätte ich auch kommen können.
Ich habe mir die 50MHz heruntergeteilt, damit der Logikanalyzer nicht so 
schnell abtasten muss. Und dieser Vorteiler hat natürlich auch einen 
Reset und blockiert den neuen Clock.
Danke, Problem gelöst. Wenigstens weiss ich jetzt, dass meine 
Überlegungen nicht ganz falsch waren.

von Jonny (Gast)


Lesenswert?

Das hättest du in einer Simulation gesehen

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


Lesenswert?

Jonny schrieb:
> Das hättest du in einer Simulation gesehen
Ich behaupte: Nein. Denn schon auf den ersten Blick sieht man, dass das 
Problem nicht im VHDL-Code sein kann. Dann kommt es darauf an, wie gut 
die Umgebung moddelliert ist. Und ich bin mir sicher, dass das Modell 
nicht hinreichend gewesen wäre, um die verdrehten Parameter (gegateter 
heruntergeteilter Takt) mit abzubilden.

von Markus F. (Gast)


Lesenswert?

Jonny schrieb:
> Das hättest du in einer Simulation gesehen
Den Vorteiler, also dessen Resetverhalten, simuliert aber mancher 
Simulator auch nicht richtig ...

von Jonny (Gast)


Lesenswert?

>simuliert aber mancher Simulator auch nicht richtig ...

In welcher Hinsicht?

von Markus F. (Gast)


Lesenswert?

Wer er nur die Logik des Buffers / der PLL simuliert, nicht aber deren 
Physik. Dass sie nicht startet, simuliert er z.B. nicht. Umgekehrt habe 
ich massenhaft Beispiele, wo die Simulation bei Verwendung eines 
originalen Xilinx PLL Modells (CoreLib) nicht ging, (weder mit ISIM noch 
mit MODELSIM) real der Baustein aber prima funzte.

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.