VHDL Coolrunner Delay line wird wegoptimiert trotz keep

Gast #3262527
Lesenswert?

Ich versuche gerade, eigentlich nur um mal kurz was zu testen, eine 
Verzögerungskette in einem Coolrunner zu realisieren.

Natürlich verwende ich das Keep-Attribute um Xilinx-ISE (WebPack 14.3) 
davon abzuhalten seinem Drang "zur reinen Logik" zu folgen ;-) aber das 
klappt nicht. Auch die Variante mit String und "true" geht nicht.
1
----------------------------------------------------------------------------------
2
library IEEE;
3
use IEEE.STD_LOGIC_1164.ALL;
4

5
-- Uncomment the following library declaration if using
6
-- arithmetic functions with Signed or Unsigned values
7
--use IEEE.NUMERIC_STD.ALL;
8

9
-- Uncomment the following library declaration if instantiating
10
-- any Xilinx primitives in this code.
11
--library UNISIM;
12
--use UNISIM.VComponents.all;
13

14
entity Delay is
15
  port (
16
    input  : in std_logic := '0';
17
    taps  : out std_logic_vector (15 downto 0)
18
  );
19
end Delay;
20

21
architecture Behavioral of Delay is
22
  signal chain  : std_logic_vector(15 downto 0);
23
  attribute KEEP : boolean; 
24
  attribute KEEP of chain : signal is true; 
25
begin
26

27
  process (chain, input)
28
  begin
29
    chain <= chain (14 downto 0) & input;
30
    taps <= chain;
31
  end process;
32

33
end Behavioral;

Hoffentlich liest Lothar das.
Gast #3262725
Lesenswert?

@ Olga

>Du hast keinerlei Logik in deiner "Chain" die wegoptimiert werden könnte!
Es ist nich immer "Logik" die wegopimiert wird.

@ freiberuflicher FPGA
>Da fehlt der Takt!

So? Meinst Du? Aha.

Für weitere Antworten wäre ich sehr dankbar.
Moderator (Firma: Titel) Persönliche Seite #3263295
Lesenswert?

bko schrieb:
> mmmh: ohne reset wirft ise alles weg...
Weil ohne Reset keine Logikzellen beteiligt sind, sondern nur Routing. 
Und weil die Synthese Routing mit Laufzeit =0 annimmt, wird alles 
wegoptimiert und parallel verdrahtet. Erst mit dem Reset werden 
Logikzellen eingebaut (als Latches, weil kein Takt beteiligt ist).

TickTack schrieb:
1
 process (chain, input) 
2
   begin 
3
     chain <= chain (14 downto 0) & input; 
4
     taps <= chain; 
5
   end process;
Wofür braucht man hier einen Prozess?

Das ist nutzlos, weil Eingänge sowieso nicht speichernd sind:
1
    input  : in std_logic := '0';
Angehängte Dateien:
Gast #3263299
Lesenswert?

@  bko

Danke auch für Deine Antwort. Aber ich kann die Invertierung am Eingang 
nicht gebrauchen.

@ Lothar Miller

Erstmal herzlichen Dank für Deine Antwort, Lothar.

Ich hoffe ich kriege das linke Bild von Dir selbst hin. Ich werde mal 
den Reset hinzufügen.

>Wofür braucht man hier einen Prozess?

Ganz recht. Ich war auch der Meinung, man bräuchte hier keinen. Das habe 
ich hingeschrieben, als es nicht ging.

>Das ist nutzlos, weil Eingänge sowieso nicht speichernd sind:
>     input  : in std_logic := '0';

Sozusagen vorauseilender Gehorsam, weil in der Vergangenheit, ISE bei 
den verschiedensten Gelegenheiten über fehlende Initialiserung "klagte".

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