Synchroner Rest will nicht (Spartan 3e)

#3878152
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
#3878184
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.
Moderator (Firma: Titel) Persönliche Seite #3878842
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.
Gast #3884288
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren