www.mikrocontroller.net

Forum: FPGA, VHDL & Co. VHDL XILINX Komponenten werden ohne Grund wegreduziert


Autor: Thomas Thomas (warhammerth)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich habe folgendes Problem.
Ich habe einen Lockin Filter gebaut, welcher 2 Signale Multipliziert, 
anschließend 2 fach über einen Tiefpass filtert und anschließend über 
den CORDIC IP Core Ampltide und Phase erkennt.
In Simulink habe ich die einzelnen VHDL Modelle als Blackbox eingebunden 
und bereits Simuliert (maht genau das was es soll)

Wenn ich jetzt die Komponenten in VHDL verbinde (per portmap), siehe 
LockInThomas.vhd, dann wird bei der synthese jeweils der Multiplikator 
und der erste Tiefpass weggeworfen und die ganze Sache funktioniert 
nicht.
(siehe lockin.png, das ist das Ergebniss der Synthese)  warum schmeißt 
er die Komponenten raus?

Ich habe im Portmap keinerlei Fehler gefunden.

Die Multiplikationen sind mit den verschobenen Bits so gewollt
(die Eingänge sollen wie (0 downto -15) behandelt werden, also quasi 
alles Nachkommastellen.

Im Anhang befinden sich alle 3 VHD Datein. die Komponente ampha ist der 
Cordic Block (IP)

Ich benutze Xilinx ISE 11.5 und habe einen Virtex 4 LX 60

Autor: user (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
meistens wird was weggeworfen, wenn funktionalität doppelt vorhanden ist

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> meistens wird was weggeworfen, wenn funktionalität doppelt vorhanden ist
Aber die Synthese ist so freundlich, zu sagen, was da doppelt auftaucht.
Such mal nach dem Schalter "Keep Hierarchy"...
Beitrag "keep hierarchy verändert Funktion?"

BTW:
  if  clk'event and clk='1' then
    if clk_t=5 then
      clk_s<=not clk_s;
      :
Takte werden in FPGAs anders erzeugt.
Oder wie bekommst du deinen clk_s auf ein Taktnetz?

Autor: Thomas Thomas (warhammerth)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> BTW:  if  clk'event and clk='1' then
>     if clk_t=5 then
>       clk_s<=not clk_s;
>       :


ehm naja das ging bisher immer so :) er macht halt den clk / 10 oder 
nicht? bei allen anderen modellen klappt das.

 das keep hierachie änder nichts

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> er macht halt den clk / 10 oder nicht?
Ja, aber dann wird dieser Takt mit normalen Routingressourcen (also 
nicht über ein Taktnetz) an die beteiligten Komponenten weitergeleitet. 
Das führt dazu, dass der Takt deutliche Laufzeiten (Skew) aufweisen kann 
und nicht mehr das gesamte FPGA wirklich synchron arbeitet...

Autor: Thomas Thomas (warhammerth)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok ja, und wie macht man das richtig?

Bzw wichtig ist erstmal das andere Problem...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas Thomas schrieb:
> Ok ja, und wie macht man das richtig?
Du hast Glück, die Synthese hat das automatisch erkannt und korrigiert. 
Sie hat einen Zähler bis 10 eingefügt und ein Clock-Enable draus 
gemacht...
Allerdings ist das nicht das, was du beschrieben hast  :-o

Und sowas ähnliches passiert dir vermutlich auch mit dem 
Multiplizierer...

Autor: Thomas Thomas (warhammerth)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich einen zusätlichen 16 bit ausgang mache und folgende zeile 
einfüge am ende:
tt<=signal_multcos+signal_multsin-sigsinlp1-sigcoslp1;
dann erzeugt er mir alle komponenten, siehe bild.
Aber wie man sieht verbindet er auch die komponenten richtig. Wenn ich 
die zeile wieder entferne, fliegt wieder alles raus :(

Autor: dr.Schmock (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Wegreduzieren von Komponenten kann mehrere Ursachen haben:
- Die Ausgangsports sind nicht verbunden oder werden von den folgenden 
Instanzen ignoriert.
- Die Eingangsports sind nicht verbunden oder nur mit konstanten 
Signalen verbunden
- Die Komponente funktioniert nicht (was von dir ja schon durch 
Simulation ausgeschlossen ist)

Der Synthesebericht sollte einen Hinweis auf das Problem geben können.

Autor: dr.Schmock (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein letzter Post hat den Hinweis gegeben:
Im Tiefpass wird der Eingang "signal_in" überhaupt nicht verwendet! ;D

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wenn ich einen zusätlichen 16 bit ausgang mache und folgende zeile
> einfüge am ende:
Dann kann er die lokalen Signale nicht mehr wegoptimieren, weil sie ja 
an einen IO-Port müssen. Aber irgendwie findet die Synthese, dass sich 
dein Design gut verkleinern liesse...

Man sieht übrigens wieder schön, wie die Sache mit den Clock-Enables 
gelöst wurde...   :-o

Autor: Thomas Thomas (warhammerth)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dr.Schmock schrieb:
> Im Tiefpass wird der Eingang "signal_in" überhaupt nicht verwendet! ;D



oh man, so eine lapalie^^

entity tiefpass is

  Port ( ...
  signal_in : in std_logic_vector(15 downto 0):= (others => '0');
... );

...
signal sig_in  :   std_logic_vector(15 downto 0) := (others => '0');
...

prod1_low<=(lowpass_coef1)*sig_in;




das war der fehler, man warum hab ich das nicht gesehn ;)
jetzt dauert die synthese auch bedeutend länger^^
danke es geht jetzt super ;)

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.