Hallo,
ich möchte zum ersten Mal einen CPLD einsetzen, um zahlreiche 74-ICs zu
ersetzen. Allerdings verstehe ich die Aufteilung in Funktionsblöcke
nicht so richtig.
Wenn ich etwa einen STD_LOGIC_VECTOR(7 downto 0) habe, sollen/müssen
dann alle Signale den Pins innerhalb des gleichen FBs zugewiesen werden?
Oder gilt das eher für die Beziehung zwischen Eingangs- und
Ausgangssignalen? Also angenommen, ich berechne C <= A and B, sollen
dann die Pins von A, B und C im gleichen FB liegen?
Ich würde mich erst mal nicht drum kümmern. Beschreibe Dein 74-er-Grab
geeignet in VHDL, simulier das Ganze und wenn es passt synthetisierst Du
es. Dann findest Du raus ob es passt oder nicht.
Sich um die CPLD-Internas zu kümmern macht erst dann Sinn, wenn Du beim
obenstehenden Vorgehen Probleme hast, z.B. wenn Du das Timing nicht
zukriegst.
Und wie gehe ich mit unbenutzen Pins um?
Zum einen gibt es solche, die gar nicht verbunden sind. Laut Xilinx soll
man diese auf Masse legen und mit UPG deklarieren, richtig?
Aber was mache ich mit Pins, die an einem Signal hängen, aber intern
nicht (mehr) benötigt werden und von ISE herausoptimiert werden? Ich
würde nämlich gerne ein paar Pins als "Reserve" halten.
Kann man diese einfach ignorieren?
larsp schrieb:> Und wie gehe ich mit unbenutzen Pins um?
Beschalte Sie als Ausgang. Oder beschalte sie als Eingang und lege sie
auf definiertes Potential.
> Laut Xilinx soll man diese auf Masse legen und mit UPG deklarieren
Welche denn? Welches CPLD?
> Aber was mache ich mit Pins, die an einem Signal hängen, aber intern> nicht (mehr) benötigt werden und von ISE herausoptimiert werden?
Was ist denn dann extern an diesem "Signal"?
> Ich würde nämlich gerne ein paar Pins als "Reserve" halten.
Wie gesagt: definiere unbelegte Pins als Ausgang oder lege sie
anderweitig auf definiertes Potential. Auf jeden Fall darf kein
Eingang unbeschaltet in der Gegend "herumfloaten". Denn dann fließt
u.U. ein Strom durch die Eingangstreiberstufe und das CPLD wird warm.
> Kann man diese einfach ignorieren?
Nur dann, wenn man weiß, was man tut, und das auch will. Aber idR. ist
es sicherer, keine "herausoptimierten" Signale zu haben...
Lothar M. schrieb:> larsp schrieb:>> Und wie gehe ich mit unbenutzen Pins um?>> Laut Xilinx soll man diese auf Masse legen und mit UPG deklarieren> Beschalte Sie als Ausgang. Oder beschalte sie als Eingang und lege sie> auf definiertes Potential.
Im Xilinx-Dokument "Bulletproof CPLD Design Practices" steht zu "No
floating input pins":
"[...] The most flexible [way] is to use "user programmable ground"
which is available as a software switch. External attachment to ground
is also fine."
Das zweite hast Du auch gesagt. Beim ersten steht im 9500XL-Datenblatt
"use UPG to deliver low driven output signal to internal input". Das
verstehe ich nicht: muß ich die Pins mit irgendwas verbinden, oder sind
solche Pins Eingänge die immer '0' liefern?
> Wie gesagt: definiere unbelegte Pins als Ausgang oder lege sie> anderweitig auf definiertes Potential.
Ich habe Pins, die mit einem (sich ändernden) Signal S verbunden sind,
welche aber durch Änderungen am VHDL-Code gar nicht mehr benötigt
werden. Meine Frage war nun, ob man das einfach als Eingang lassen kann,
ob man den Pin aus dem Code entfernt, oder ob es da was besseres gibt.
Ginge UPG?
Und wo wir gerade bei Pins sind: In Bulletproof und Datenblatt steht,
daß man alle Vcc und GND mit 100nF und 10nF entkoppeln soll. Gilt das
auch für Vccio?
larsp schrieb:> Ich habe Pins, die mit einem (sich ändernden) Signal S verbunden sind,> welche aber durch Änderungen am VHDL-Code gar nicht mehr benötigt> werden. Meine Frage war nun, ob man das einfach als Eingang lassen kann,> ob man den Pin aus dem Code entfernt, oder ob es da was besseres gibt.> Ginge UPG?
Wenn an diesen Pins irgendwelche externe Signale angeschlossen sind,
dann darfst du diese Pins und die angeschlossenen Signale natürlich
nicht auf Masse legen. Dann sind diese Pins aber auch nicht undefiniert.
> Und wo wir gerade bei Pins sind: In Bulletproof und Datenblatt steht,> daß man alle Vcc und GND mit 100nF und 10nF entkoppeln soll. Gilt das> auch für Vccio?
Ja. Je nach Last sogar noch eher. Denn aus dieser Spannung müssen
externe Lasten getrieben werden.
larsp schrieb:> Wenn ich etwa einen STD_LOGIC_VECTOR(7 downto 0) habe, sollen/müssen> dann alle Signale den Pins innerhalb des gleichen FBs zugewiesen werden?
Wenn du was von Xilinx benutzt:
Die tatsächliche Zuordnung von Pins zu den Signalen in deiner Logik
machst du mit einem User Constraint File (myproject.ucf). Das ist ein
simples Textfile, wo du auch die sonstigen Parameter des Pins
(Geschwindigkeit, Logikpegel, Schmitttrigger usw.) festschreiben kannst.
Ansonsten kannst du mit der ISE oder Webpack immer noch deinen Chip per
Schematics programmieren. Beim Übertragen einer TTL-Schaltung in ein
CPLD würde ich dieses als erstes ins Auge fassen. Schließlich hast du ja
bereits eine Schaltung, wenngleich auch mit 74xx-Gattern.
W.S.
Lothar M. schrieb:>> Und wo wir gerade bei Pins sind: In Bulletproof und Datenblatt steht,>> daß man alle Vcc und GND mit 100nF und 10nF entkoppeln soll. Gilt das>> auch für Vccio?> Ja. Je nach Last sogar noch eher. Denn aus dieser Spannung müssen> externe Lasten getrieben werden.
OK, verstehe ich. Aber sind die 10nF wirklich nötig (bei weniger als 5
MHz Takt)?
Ich habe hier ein XC9572XL-VQ44 Dev-Board vor mir liegen, das hat nur
einen Kondensator pro Vcc/Vccio.
larsp schrieb:> Aber sind die 10nF wirklich nötig (bei weniger als 5 MHz Takt)?
Da kommt es nicht auf die Taktfrequenz, sondern nur auf die
Flankensteilheit an. In der stecken nämlich die zu puffernden hohen
Frequenzen. Und natürlich nützt es nichts, wenn der Kondensator über
lange Leiterbahnen angeschlossen oder nur irgendwie in der Nähe sitzt.
Der gehört dicht ans IC zwischen Vcc und GND.
larsp schrieb:> OK, verstehe ich. Aber sind die 10nF wirklich nötig (bei weniger als 5> MHz Takt)?
Für die Bemessung von Abblockkondensatoren usw. ist nicht die
tatsächliche Taktfrequenz entscheidend, sondern die maximale
Flankensteilheit. Viel wichtiger als der konkrete Kapazitätswert sind
eine induktivitätsarme Anbindung und die interne Induktivität des
Kondensators. Heutzutage gibt es aber auch sehr viele hochkapazitive
Kondensatoren in Fliegenschissgehäusen, d.h. 0402, 0201 oder gar noch
kleiner. Manche ältere Empfehlung stammt daher ggf. aus einer Zeit, in
der 100nF auf jeden Fall 0603 oder gar noch größere Gehäusebauformen
bedeutet hätten.
larsp schrieb:> Und wie gehe ich mit unbenutzen Pins um?
Wenn Du die im Design nicht brauchst, dann lege sie auf GND, allerdings
nur, wenn sich das auch mit der realen Beschaltung verträgt.
Um noch mal zur eigentlichen Frage zurückzukommen:
"Unable to map all desired signals into function block, FB8, because too
many function block product terms are required. Buffering output signal
OUT<6> to allow all signals assigned to this function block to be
placed."
Ich habe wohl zuviele LOC-Vorgaben gemacht.
Aber ist die Meldung des Fitters schlimm? Sollte ich das Signal woanders
ausgeben?