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
meistens wird was weggeworfen, wenn funktionalität doppelt vorhanden ist
> 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:
1 | if clk'event and clk='1' then |
2 | if clk_t=5 then |
3 | clk_s<=not clk_s; |
4 | :
|
Takte werden in FPGAs anders erzeugt. Oder wie bekommst du deinen clk_s auf ein Taktnetz?
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
> 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...
Ok ja, und wie macht man das richtig? Bzw wichtig ist erstmal das andere Problem...
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...
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 :(
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.
Dein letzter Post hat den Hinweis gegeben: Im Tiefpass wird der Eingang "signal_in" überhaupt nicht verwendet! ;D
> 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
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 ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.