Forum: FPGA, VHDL & Co. FIFO Spartan3 bei Programmstart IP CORE Generator


von Ole (Gast)


Lesenswert?

Hallo

Ich habe mit dem „IP CORE Generator & Architecture Wizard“, speziell mit
dem „Fifo Generator 8.2“ der „ISE 13.2“ von Xilinx, einen FIFO für einen
Spartan3 FPGA erzeugt. Der FIFO hat unabhängige lese und schreib Clocks
eine eingangsbreite von 32Bit und am Ausgang 16Bit. Die Option 
First-Word Fall-Through habe ich aktiviert, ansonsten wurde mit Fifo mit 
Standard Einstellungen generiert.
Das Lesen und schreiben funktioniert soweit auch, über die Enable 
Eingänge. Mein Problem ist, dass der FIFO nach dem einschalten nicht 
leer ist sondern beim einschalten mit Default-Werten (bzw. mit dem 
Initialisiertn Wert der Übergabevariablen) vollständig gefüllt wird. Ich 
frage mich nun ob das ein normales verhalten ist, ob das ein 
Programmierfehler von mir sein kann oder ob es irgendwo einen Schalter 
gibt um einen lehren FIFO nach dem Programmhochladen zu haben.

Ich beschäftige mich noch nicht lange mit FPGAs, genaugenommen ist es 
mein erstes VHDL Projekt. Ich bin daher für alle konstruktiven 
Vorschläge und Ideen dankbar. Wahrscheinlich ist mein Problem trivial 
aber es ist auch schon späht und kann meinen Denkfehler einfach nicht 
finden.
Ein FIFO-RESET vor meinem Programmstart hilft seltsamerweise auch nicht.

Danke

Mit diesem Prozess schreibe ich in FIFO:
(zum testen werden Werte von 0 bis 655359 in den FIFO geschrieben, wenn 
die Messung über den externen Pin START angefordert wurde. Nach dem 
auslesen der Daten hab ich dann aber abhängig von der FIFO Größe 0-Werte 
vor der eigentlichen Messung)
1
  DATA_recording: process (CLK0, RESET, START)
2
  begin
3
    -- reset
4
    if RESET = '1' 
5
    then
6
      MESS_RUN_FLAG <= '0';
7
      FIFO_WRITE_EN <= '0';
8
      
9
    elsif START = '1'
10
    then
11
      GEN_CNT <= ( others => '0' );
12
      INT_CNT <= ( others => '0' );
13
      MESS_RUN_FLAG <= '1';
14
      FIFO_WRITE_EN <= '1';
15
      
16
    -- CLK0
17
    elsif rising_edge(CLK0) 
18
    then
19
      -- Write 
20
      if FIFO_FULL = '0' and MESS_RUN_FLAG = '1' then
21
        GEN_CNT <= GEN_CNT + '1';
22
        
23
        if INT_CNT >= conv_std_logic_vector(655359,20) then 
24
          FIFO_WRITE_EN <= '0';
25
          MESS_RUN_FLAG <= '0';  -- close measurement  
26
        else  
27
          INT_CNT <= INT_CNT + '1';  -- measurement counter
28
        end if;
29
        
30
      end if;
31
      
32
    end if;
33
  end process DATA_recording;

von Ole (Gast)


Lesenswert?

Fehler gefunden lag doch nicht am FIFO oder sonst im VHDL-Code. Der 
Fehler lag in der Initialisierung des USB-Moduls, speziell an der 
Initialisierung des START-Pins.

SORRY :-)

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.