Spartan3 BUFGMUX

OP #388400
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:
1
library UNISIM;
2
use UNISIM.VComponents.all;
3

4
...
5

6
  --select between front/back
7
  mux1 : BUFGMUX  port map(
8
    O  => mux1_out,      --output
9
    I0 => cam_f_vclk,    --input0
10
    I1 => cam_b_vclk,    --input1
11
    S  => current_cam(1) --select
12
  );
13
  
14
  --select left/right
15
  mux2 : BUFGMUX  port map(
16
    O  => mux2_out,      --output
17
    I0 => cam_r_vclk,    --input0
18
    I1 => cam_l_vclk,    --input1
19
    S  => current_cam(1) --select
20
  );
21

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

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:
1
Conflict 1, detected on wire:DUMMY(617,57608)
2
Net:cam_l_vclk_IBUFG
3
on pin I1 on location BUFGMUX4 has a routing conflict with
4
Net:cam_f_vclk_IBUFG
5
on pin I0 on location BUFGMUX5 
6

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

13
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
Gast
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.
OP
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
Gast
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.
Gast
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
OP
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

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.