Forum: FPGA, VHDL & Co. Dual Clock FIFO, wie Reset richtig verbinden? VHDL, Atrix7, Vivado


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Matze (Gast)


Lesenswert?

Hallo,

Ich möchte einen FIFO eines ARTIX7 unter vivado nutzen,

Bei "Generate Bitstream" gibts jedoch den Fehler:
[DRC 23-20] Rule violation (REQP-38) connects_RST_ACTIVE - 
G5_FIFO_RAM/FIFO_DUALCLOCK_MACRO_inst/bl.fifo_36_inst_bl.fifo_36_bl: RST 
pin should always have ACTIVE signal for FIFO operation.

Was ist in diesem Fall ein Aktives Signal?
Eine feste 0 oder 1 scheinbar nicht?

Im falle einer PLL habe ich einfach '0' auf den Reset gegeben und es 
funktionert.

Der FIFO sieht so aus:
1
    FIFO_DUALCLOCK_MACRO_inst : FIFO_DUALCLOCK_MACRO
2
    generic map (
3
       DEVICE => "7SERIES",            -- Target Device: "VIRTEX5", "VIRTEX6", "7SERIES" 
4
       ALMOST_FULL_OFFSET => X"0080",  -- Sets almost full threshold
5
       ALMOST_EMPTY_OFFSET => X"0080", -- Sets the almost empty threshold
6
       DATA_WIDTH => 18,   -- Valid values are 1-72 (37-72 only valid when FIFO_SIZE="36Kb")
7
       FIFO_SIZE => "36Kb",            -- Target BRAM, "18Kb" or "36Kb" 
8
       FIRST_WORD_FALL_THROUGH => FALSE) -- Sets the FIFO FWFT to TRUE or FALSE
9
    port map (
10
       ALMOSTEMPTY => ALMOSTEMPTY,   -- 1-bit output almost empty
11
       ALMOSTFULL => ALMOSTFULL,     -- 1-bit output almost full
12
       DO => DO,                     -- Output data, width defined by DATA_WIDTH parameter
13
       EMPTY => EMPTY,               -- 1-bit output empty
14
       FULL => FULL,                 -- 1-bit output full
15
       RDCOUNT => RDCOUNT,           -- Output read count, width determined by FIFO depth
16
       RDERR => RDERR,               -- 1-bit output read error
17
       WRCOUNT => WRCOUNT,           -- Output write count, width determined by FIFO depth
18
       WRERR => WRERR,               -- 1-bit output write error
19
       DI => DI,                     -- Input data, width defined by DATA_WIDTH parameter
20
       RDCLK => CLK100MHZ,           -- 1-bit input read clock
21
       RDEN => RDEN,                 -- 1-bit input read enable
22
       RST => '0',                   -- 1-bit input reset
23
       WRCLK => SCLK,                -- 1-bit input write clock
24
       WREN => WREN                  -- 1-bit input write enable
25
    );

Habt ihr eine Idee?

von Duke Scarring (Gast)


Lesenswert?

Bau doch einen kleinen Reset-Generator.
Der hier ist z.B. nötig um einen Marvell-Phy richtig starten zu lassen:
1
    signal reset_shreg              : std_ulogic_vector(9 downto 0) := (others => '1');
2
    signal reset                    : std_ulogic := '1';
3
    signal reset_n                  : std_ulogic := '0';
4
    --
5
6
    reset_generator_p: process
7
    begin
8
        wait until rising_edge( clk100);
9
        reset_shreg <= reset_shreg(reset_shreg'left-1 downto 0) & '0';
10
        reset       <= reset_shreg(reset_shreg'left);
11
    end process;
12
    reset_n <= not reset;

Duke

von Matze (Gast)


Lesenswert?

Danke,

wusste nicht dass der FIFO beim "Start" resettet werden muss, dein 
Reset-Generator löst das Problem.

von J. S. (engineer) Benutzerseite


Lesenswert?

Matze schrieb:
> Danke,
>
> wusste nicht dass der FIFO beim "Start" resettet werden muss, dein
> Reset-Generator löst das Problem.

Eigentlich müsste man das applikationsseitig regelmäßig machen, wenn man 
beginnt, reinzuschreiben, um den Fifo zu synchronisieren, weil man ja 
nicht sicher weiß, wieviel abgeholt wurde. Umgekehrt kann es sinnvoll 
sein, nur den Abholer zu resetten, um ihn neu zu starten, damit die 
Daten nicht verloren gehen.

Aufpassen muss man mit den Initialwerten für die fifo-full-Signale nach 
dem Resetten und deren Auswerung durch den Abholter, sonst läuft gfs der 
Leseprozess los, ohne was richtiges zu haben!

von Ente (Gast)


Lesenswert?

Ja, der Reset ist bei den Xilinx-FIFOs wichtig und auch recht kritisch: 
Er muss mindestens 5 Zyklen des langsameren der beiden Takte lang sein. 
Da habe ich auch mal eine Weile gesucht...

Ente

von Christian R. (supachris)


Lesenswert?

Hehe, stimmt das ist eine spannende Sache. Ich hatte dann schon mal voll 
und leer gleichzeitig obwohl der Reset wieder weg war.

von Michael W. (Gast)


Lesenswert?

Ente schrieb:
> Ja, der Reset ist bei den Xilinx-FIFOs wichtig und auch recht kritisch:
> Er muss mindestens 5 Zyklen des langsameren der beiden Takte lang sein.
> Da habe ich auch mal eine Weile gesucht...
Das finde ich interessant. Ist das irgendwo dokumentiert?

von Matze (Gast)


Lesenswert?

Ente schrieb:
> Ja, der Reset ist bei den Xilinx-FIFOs wichtig und auch recht kritisch:
> Er muss mindestens 5 Zyklen des langsameren der beiden Takte lang sein.
> Da habe ich auch mal eine Weile gesucht...

Dass habe ich inzwischen auch herausgefunden ;)

Bei mir tauchte es bei der Synthese in einer Warnung auf.

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.