VHDL Coolrunner Delay line wird wegoptimiert trotz keep

Gast #3262527
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
@ 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
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
@  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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.