Xilinx Spartan 6 BUFGP Buffer

Gast #2735526
Lesenswert?
• ▲
▼
Hi Leute!

Folgendes Problem:

Ich habe ein Design in ISE14.1 (Spartan-6) und habe eine Design-Version 
welche komplett durchsimuliert bis post-route und mir dabei als 
Eingangsbuffer für einen gewissen Pin welcher A:FFs clockt und B:in ein 
OR gatter reinläuft.

Er meckert garnicht wenn ich ihn alles machen lasse und realisiert mir 
dann als Eingangsbuffer für diesen Pin ein BUFGP, welches ich im 
Libraries Guide noch nicht mal finden kann (Hilfe!).

Dann wenn ich etwas am Code ändere (was eigentlich nichts damit zu tun 
haben sollte... andere Story), meckert er rum und ich würde ihn nun 
einfach gerne zwingen, nicht ein BUFGP zu synthetisieren sondern ein 
anderes Buffer was ich möchte. Kann man das automatische Buffern für 
einen einzlenen Pin per Attribut oder so deaktivieren? Ich würde lieber 
ein IBUF oder IBUFG nehmen...

Bitte melden! Ist recht zeitkritisch... Danke !!

Gilles
Gast #2735559
Lesenswert?
• ▲
▼
Gilles schrieb:
> Kann man das automatische Buffern für
> einen einzlenen Pin per Attribut oder so deaktivieren? Ich würde lieber
> ein IBUF oder IBUFG nehmen...

Laut XST User Guide, kannst Du Dir so helfen:
1
Declare as follows:
2
attribute buffer_type: string;
3
Specify as follows:
4
attribute buffer_type of signal_name: signal is "
5
{bufgdll|ibufg|bufgp|ibuf|bufr|none}";

Im UG616 auf Seite 72 findest Du übrigens Deinen BUFGP.

Duke
Gast #2735707
Lesenswert?
• ▲
▼
jaja im simulator läuft es post-route schon länger, es gibt nur eine 
kleine sache die im code eignetlich so nicht emhr nötig wäre udn es 
eventuell noch performanter machen würde... muss halt nicht sein aber 
wäre cool... und wenn ich das dann also vereinfache, dann kommt auf 
einmal eine lawine aus so unerklärlichen fehlern... mal allgemein 
gefragt.. bin ich der einzige, der bei der xilinx ise öfter mal auf 
probleme stößt, bzw. sachen die man sich erstmal nicht erklären kann...?
Gast #2735913
Lesenswert?
• ▲
▼
Gilles schrieb:
> eignetlich so nicht emhr nötig wäre udn es
> eventuell noch performanter machen würde... muss halt nicht sein aber
> wäre cool... und wenn ich das dann also vereinfache, dann kommt auf
> einmal eine lawine aus so unerklärlichen fehlern... mal allgemein
> gefragt.. bin ic...

Man sieht dem Beitrag an, wie sehr dich die Sache nervt. Aber um bei dem 
Problem weiter zu kommen, solltest du wieder etwas ruhiger werden.

Laut meiner Version des Libraries Guide 
(http://www.xilinx.com/support/documentation/sw_manuals/xilinx11/spartan6_hdl.pdf) 
ist ein BUFGP einfach eine Kurzbezeichnung: "It is equivalent to an 
IBUFG driving a BUFG". Die ISE nutzt also einen "Dedicated Input Clock 
Buffer" IBUFG und treibt damit über BUFG ein Taktnetz. Genau das sollte 
man mit einem Taktsignal tun. Das ist schon die optimale Kombination, 
"noch performanter" wird es mit den von dir gewünschten Alternativen 
sicher nicht.

Die von dir gewünschten Alternativen sind nicht sehr günstig ausgewählt, 
weil:
IBUFG selbst das Taktnetz wohl nicht direkt treiben kann sondern nur 
über BUFG (und genau das macht BUFGP)
IBUF der Buffer für ein "normales" Logiksignal ist, aber sich nicht für 
Takte eignet.

Die "lawine aus so unerklärlichen fehlern" kommt wohl daher, dass du die 
ISE zwingen willst, einen ungeeigneten Buffer für das Taktnetz zu 
verwenden.

schöne Grüße

Achim
Gast #2736021
Lesenswert?
• ▲
▼
danke für die antwort!

Mittlerweile bin ich mit Mr Xilinx wieder in Frieden...
Aber trotzdem heute schon wieder en Fehler in nem Datenblatt gefunden... 
Irgendwo echt nicht in Ordnung für so nen prestigeträchtigen und teils 
a****h teuren Hersteller...

Naja habe nun mich mal hingesetzt und ne Lösung gefunden, wie man ein 
taktsignal nutzen kann, um ein Signal zu erzeugen, welches genau dann 
auf 1 ist, wenn das taktsignal auf 1 ist:

rising edge in Flipflop1 --> variable1 ändert wert von 0 auf 1 oder 1 
auf 0
falling edge in Flipflop2 --> variable1 ändert wert von 0 auf 1 oder 1 
auf 0

variable1 xor variable2 = dann 1 wenn clk auf 1 ist...

so kann mans dann doch lösen, außer dass dann einiges an gerade bei mir 
tötlichem delay hinzukommt...

Danke.
Gast #2736045
Lesenswert?
• ▲
▼
Es geht darum im FPGA nen Speicher mit mehreren Adressräumen zu 
simulieren.
Das ganze teil sit über 32 bit(pins) an nen EBI (external bus interface) 
von nem 32-bit-MPC von freescale angeschlossen. Auf diesem Bus sind 1. 
Adresse dann 2. Daten zeitlich gemultiplext.

Das ganze läuft mit 66 MHz. Also hab ich genau 15,15 ns Zeit um zwischen 
den beiden Takten zu erkennen welche Adresse er anspricht udn dann zum 
nächsten Takt die Daten am gleichen bidirektionalen Pin wieder 
auszugeben.

Der Takt um den es geht ist ein Hilfssignal (Adress Latch Enable) von 
Freescale, welches ich nutzen muss um einerseits für nen burst-Read nen 
counter zu reseten (das wäre die NICHT-flanken-nutzung) und um zweitens 
mit der flanke des ALE signals die nur kurz anliegende Adresse zu 
speichern um sie dann an einen externen MRAM-baustein länger anlegen zu 
können (das wäre dann die flanken-nutzung)... ;)
#2736075
Lesenswert?
• ▲
▼
Hat der keinen synchronen Modus für den EBI? Solche asynchronen Sachen 
sind meistens ziemlich blöd im FPGA zu realisieren. Am besten arbeitet 
man intern mit einem höheren Takt und tastet dann die Signale 
entsprechend ab. Muss aber dann mindestens díe doppelte Freqenz sein, 
damit das was wird. So kann man intern alles schön synhron machen.
Gast #2738451
Lesenswert?
• ▲
▼
Gilles schrieb:
> Der Takt um den es geht ist ein Hilfssignal (Adress Latch Enable)
Für mich sind Takt und Latch Enable zwei verschiedene Sachen.

Ich würde auch -- wie schon vorgeschalgen -- das Latch Enable mit einem 
hohen internen Takt abtasten und damit die Flanke zu erkennen.

Duke

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren