mikrocontroller.net

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)


Bewertung
0 lesenswert
nicht 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.
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

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

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

entity Delay is
  port (
    input  : in std_logic := '0';
    taps  : out std_logic_vector (15 downto 0)
  );
end Delay;

architecture Behavioral of Delay is
  signal chain  : std_logic_vector(15 downto 0);
  attribute KEEP : boolean; 
  attribute KEEP of chain : signal is true; 
begin

  process (chain, input)
  begin
    chain <= chain (14 downto 0) & input;
    taps <= chain;
  end process;

end Behavioral;



Hoffentlich liest Lothar das.

von Olga (Gast)


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

von freiberuflicher FPGA Experte (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Da fehlt der Takt!

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

von TickTack (Gast)


Bewertung
0 lesenswert
nicht 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)


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

von bko (Gast)


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

mmmh: ohne reset wirft ise alles weg...
  attribute KEEP : string; 
  attribute KEEP of chain : signal is "true"; 
begin

  chain <= chain (14 downto 0) & not(input)  when reset='0' else (others=>'0');
  
  process ( chain)
  begin
    
    taps <= chain(15);

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
 process (chain, input) 
   begin 
     chain <= chain (14 downto 0) & input; 
     taps <= chain; 
   end process;
Wofür braucht man hier einen Prozess?

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

von TickTack (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.