mikrocontroller.net

Forum: FPGA, VHDL & Co. Spartan3 BUFGMUX


Autor: Ssss Ssssss (sssssss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich versuche auf einem Spartan3 zwischen zwei externen Clocksignalen
umzuschalten.
Die Signale kommen allerdings über normale I/O Pins herein (<=25Mhz).
(lässt sich beim Prototypen nicht ändern da nicht genügend Clock inputs
da sind)

Nun möchte ich daraus immer nur eine Clock auswählen.
Dazu habe ich folgenden Code geschrieben:
library UNISIM;
use UNISIM.VComponents.all;

...

  --select between front/back
  mux1 : BUFGMUX  port map(
    O  => mux1_out,      --output
    I0 => cam_f_vclk,    --input0
    I1 => cam_b_vclk,    --input1
    S  => current_cam(1) --select
  );
  
  --select left/right
  mux2 : BUFGMUX  port map(
    O  => mux2_out,      --output
    I0 => cam_r_vclk,    --input0
    I1 => cam_l_vclk,    --input1
    S  => current_cam(1) --select
  );

  --now select the right output of both muxes:
  mux3 : BUFGMUX  port map(
    O  => out_vclk,   --output
    I0 => mux1_out,      --input0
    I1 => mux2_out,      --input1
    S  => current_cam(0) --select
  );

Sprich ich möchte mit dem 2stelligen std_logic_vector current_cam
auswählen welche clock ich auf out_vclk ausgebe.

Die BUFGMUXe sind ja immer im zweierpaar an denselben Inputs.

ISE8 meldet beim Routen:
Conflict 1, detected on wire:DUMMY(617,57608)
Net:cam_l_vclk_IBUFG
on pin I1 on location BUFGMUX4 has a routing conflict with
Net:cam_f_vclk_IBUFG
on pin I0 on location BUFGMUX5 

Conflict 2, detected on wire:DUMMY(617,57624)
Net:cam_r_vclk_IBUFG
on pin I0 on location BUFGMUX4 has a routing conflict with
Net:cam_b_vclk_IBUFG
on pin I1 on location BUFGMUX5 

End of routing conflict report

Sehe ich das richtig dass BUFGMUX 4 und 5 beide immer dieselben inputs
haben müssen ? Laut datasheet haben sie ja gemeinsame I0/I1.

Wie sage ich dem ISE denn dass ich jeweils einen eigenen 2er Block
brauche für meine 3 MUXe ?
Ich hab per Google nichts zu dem Thema gefunden :(
Also zum Thema BUFGMUX zwar schon aber nicht wie ich in VHDL sage dass
ich 3 muxe mit unterschiedlichen inputs möchte.

Danke & Gruss,
Simon

Autor: Ssss Ssssss (sssssss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
err meinte natürlich "zwischen vier externen ..." ;)

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, müssen es BUFGMUX sein, reichen nicht normale Muxe? Wenn Du die
takte nicht intern verwendest, gehen auch normale Muxe. Irgendwo bei
xilinx (TechNotes(?)) gibts eine Schaltung wie man diese auch
glitchfrei umschalten kann.

Autor: Ssss Ssssss (sssssss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem ist dass ich die Takte bzw jeweils einen davon zum
synchronen einlesen der Datenleitungen brauche (sind 4 CMOS
Kameramodule).
Momentan läuft das zwar mit automatisch erzeugten Muxen aber er wirft
dann immer ne Warnung vonwegen
kombinatorische Logik erzeugt Taktsignal.
Mit den BUFGMUX macht er das nicht. Leider bekomme ich mit denen aber
beim routen den oben genannten Fehler...

Bye, Simon

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der BUFGMUX nach dem BUFGMUX könnte das Problem sein. oder er versucht
vor die BUFGMUX noch IBUFG zu klemmen. Mach doch mal eine Testschaltung
ohne mux3 und klemm die ausgänge vom mux1 und mux2 auf Ausgangspins. Das
ist zwar nicht, was es sein soll, aber wir haben das Problem
eingekreist.

Autor: Sven Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin...

dünnes Eis, was du da machen willst. SEHR dünn.
Woher kommt die gewissheit, das der Rest deiner Logik diesen
Taktwechsel  klaglos übersteht, selbst wenn die Muxe keinen Glitch
machen?

Deine BUFGMUX kannst du evtl. mit Place-Constraints manuell so
platzieren das sie mit unterschiedlichen Eingangssignalen angesprochen
werden können. Der Placer legt die Muxe 1 und 2 jetzt nebeneinander und
wundert ich hinterher, dass er nicht genügend Resourcen hat um die
verschiedenen Signale da ran zu führen.

--
 SJ

Autor: Ssss Ssssss (sssssss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

So habe jetzt mal testweise ein neues Projekt angelegt wo ich nur den
Muxkram drinhabe.
Da gehts...

Ich vermute bei meinem gesamten Projekt klappt das ganze nicht mehr
da er zuwenige freie BUFG muxe hat und das ise ist nur einfach nicht in
der lage ist das mitzuteilen (hab je nur den 400k Spartan3).

Ich habe ja noch einen GCLK mit 50mhz und noch zwei interne
Clocksignale aus ner DCM mit 25 und 12.5 Mhz. Bei der DCM gehen ja auch
muxe drauf. Ich glaub der 400k hat auch nur 8 BUFGMUX. Muss ich mal
nachlesen ;)

@Sven:
Die Logik dahinter bekommt noch weitere Syncsignale (end of line + end
of frame). Ausserdem wird sichergestellt dass erst dann umgeschaltet
wird wenn die zielkamera gerade beim end of frame ist.

Wie gesagt, so wie es jetzt ist funktioniert es auch...
Wollte es aber aufräumen :-\
Wird beim Prototypen dann halt so bleiben müssen, der hat nur 4 CLK
Eingänge :( (bräuchte aber 5)

Danke Euch ;)

Bye, SImon

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.