Forum: FPGA, VHDL & Co. Spartan3 BUFGMUX


von Ssss S. (sssssss)


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:
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

von Ssss S. (sssssss)


Lesenswert?

err meinte natürlich "zwischen vier externen ..." ;)

von FPGAküchle (Gast)


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.

von Ssss S. (sssssss)


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

von FPGAküchle (Gast)


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.

von Sven Johannes (Gast)


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

von Ssss S. (sssssss)


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

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
Noch kein Account? Hier anmelden.