Forum: FPGA, VHDL & Co. VHDL Coolrunner Delay line wird wegoptimiert trotz keep


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 TickTack (Gast)


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.

von Olga (Gast)


Lesenswert?

Da wird gar nichts wegopimiert. Du hast keinerlei Logik in deiner 
"Chain" die wegoptimiert werden könnte!

von freiberuflicher FPGA Experte (Gast)


Lesenswert?

Da fehlt der Takt!

Das passt wieder herrlich zu dem hier:
Beitrag "Chancen Freiberufler FPGA/CPLD"

von TickTack (Gast)


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.

von Bürovorsteher (Gast)


Lesenswert?

So was komisches habe ich noch nie gesehen.
Klärt mich bitte auf!

von bko (Gast)


Lesenswert?

Schau und lern bei Lothar:
http://www.lothar-miller.de/s9y/categories/29-Ringoszillator

mmmh: ohne reset wirft ise alles weg...
1
  attribute KEEP : string; 
2
  attribute KEEP of chain : signal is "true"; 
3
begin
4
5
  chain <= chain (14 downto 0) & not(input)  when reset='0' else (others=>'0');
6
  
7
  process ( chain)
8
  begin
9
    
10
    taps <= chain(15);

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

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';

von TickTack (Gast)


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".

von TickTack (Gast)


Lesenswert?

@ Lothar Miller

Was steht man doch manchmal auf der Leitung.
Jetzt geht's. Vielen Dank für's an der Leitung ruckeln, Lothar. :-))))))

von Bürovorsteher (Gast)


Lesenswert?

> Schau und lern bei Lothar:

Von Lothar lernen heißt siegen lernen!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [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 Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.