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. (Firma: Titel) (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!

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.