Forum: FPGA, VHDL & Co. CPLD: Funktionsblöcke und Pins


von larsp (Gast)


Lesenswert?

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?

von P. K. (pek)


Lesenswert?

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.

von larsp (Gast)


Lesenswert?

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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von larsp (Gast)


Lesenswert?

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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von W.S. (Gast)


Lesenswert?

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.

von larsp (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

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.

von K. L. (Gast)


Lesenswert?

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.

von larsp (Gast)


Lesenswert?

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?

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.