Forum: FPGA, VHDL & Co. kleiner FPGA zur konfig. via 3-wire Serial Interface


von Andreas B. (loopy83)


Lesenswert?

Hallo,

ich bin auf der Suche nach einem kleinen (!) FPGA (o.Ä.) der folgende 
Aufgaben erfüllen kann:

- er soll seine Grundkonfig. aus einem Flash/EPROM laden

- er soll die Konfiguration von drei weiteren Geräten übernehmen

- die Konfig. der Teilnehmer erfolgt über ein 3-wire serial interface, 
in dem SDATA und SCLOCK parallel geschaltet sind und mit drei 
verschiedenen SLOAD Signalen der jeweilige Teilnehmer ausgewählt wird 
(also insgesamt 5 Signalwege)

- der FPGA und der dazugheörige EPROM sollen sehr sehr klein sein (aus 
Platzgründen auf dem PCB, vielleicht gibt es eine überlegenswerte 
Alternative mit integriertem EPROM?)

- der EPROM soll sich über JTAG beschreiben lassen und bei jeder 
Änderung holt sich der FPGA die neue Konfig von dort

- Es soll möglich sein, die "Konfigurationstakte" von einem weiteren 
Spartan 3A DSP durchzuschleifen. Entweder parametriert der Spartan die 
drei Devices oder eben der kleine, gesuchte FPGA

Mit welcher Chipgröße muss ich rechnen? (FPGA + EPROM)

Ich wäre für Hilfe sehr dankbar, denn so richtig blicke ich da noch 
nicht durch... bin noch am Einarbeiten und lernen.

VIELEN DANK !

MfG Andreas

von Andreas B. (loopy83)


Lesenswert?

Würde ein kleiner
Xilinx XC2C32A CoolRunner-II CPLD (XC2C32A-4QFG32C) im FG32 package 
(5x5mm)
die Aufgabe erfüllen können?

DANKE

von Arndt B. (Firma: Helion GmbH) (bussmann)


Lesenswert?

Hallo Andreas,

was meinst Du mit:
" er soll die Konfiguration von drei weiteren Geräten übernehmen"

im Detail?
Soll er die anderen konfigurieren, oder durch diese konfiguriert werden 
oder einfach nur durchleiten?

Der Code in diesem FPGA wäre fix?

Viele Grüße
Arndt

von Andreas B. (loopy83)


Lesenswert?

Hallo Arndt,

der FPGA/CPLD soll die drei anderen Geräte konfigurieren, das bedeutet, 
dass er die Konfigurationsregister dieser drei Geräte beim Start 
beschreibt. Diese erste Initialisierung ist fix... also Standardwerte, 
mit denen das System lauffähig ist und funktioniert.

Danach soll er umschalten auf Durchgang, dass dann ein weiterer, 
größerer FPGA (Spartan 3A DSP) die Konfiguration übernehmen kann. Es 
sollen dann im Detail die hinterlegten Standardwerte in den Endgeräten 
(nicht im kleinen FPGA) überschrieben werden und so feinere Anpassungen 
vorgenommen werden.

Ich kann aktuell nur sehr schwer abschätzen, wieviel Logikzellen für 
eine solche Aufgabe benötigt werden. Da ich mich aktuell noch in VHDL 
einarbeite, bin ich gerade noch nicht in der Lage, den Code schnell 
fertig zu stellen und zu synthetisieren, damit ich genaue Angaben 
bekomme, welchen Chip ich brauche. Parallel soll der Hardwarentwurf 
weitergehen und dazu brauche ich den passenden FPGA/CPLD zwecks 
Anschlussbelegung und Package.

Vielen Dank!

MfG Andreas

von Andreas (Gast)


Lesenswert?

Hallo Andreas,

>ich bin auf der Suche nach einem kleinen (!) FPGA (o.Ä.) der folgende
>Aufgaben erfüllen kann:

Von der Größe wäre wohl mittlerweile jeder FPGA in der Lage deine 
Aufgabe zu erfüllen... Gegebenfalls ist hier ein CPLD 
einsetzbar/sinnvoll.
Ebenfalls wäre über einen kleinen Microcontroller nachzudenken ( 
Microchip/Atmel o.ä. )

>- er soll seine Grundkonfig. aus einem Flash/EPROM laden

Nur bei FPGAs notwendig

>- er soll die Konfiguration von drei weiteren Geräten übernehmen

Ggfls. sind weitere Fragen zu beantworten ( Booten nacheinander, wie 
weiss der Baustein wann das Konfigurieren beendet wurde ( zus. 
Init-Done???)

>- die Konfig. der Teilnehmer erfolgt über ein 3-wire serial interface,
>in dem SDATA und SCLOCK parallel geschaltet sind und mit drei
>verschiedenen SLOAD Signalen der jeweilige Teilnehmer ausgewählt wird
>(also insgesamt 5 Signalwege)

weitere Leitungen ???

>- der FPGA und der dazugheörige EPROM sollen sehr sehr klein sein (aus
>Platzgründen auf dem PCB, vielleicht gibt es eine überlegenswerte
>Alternative mit integriertem EPROM?)

Alternativen mit Eprom sind mir nicht mehr bekannt, gabs mal früher ( 
EPROM + RAM + CPLD ) ist ausgestorben...
Beste Alternative: Microcontroller(MCU) + Serial Flash

>- der EPROM soll sich über JTAG beschreiben lassen und bei jeder
>Änderung holt sich der FPGA die neue Konfig von dort

EPROM mit JTAG => EXOT
JTAG via MCU : In der Industrie üblich, verlangt aber zus. Software ( > 
einige hundert $)
JTAG via CPLD, z.B. von Altera verfügbar, bedingt aber einen Altera CPLD 
gewisser Grösse und ein ParallelFlash mit CFI. Das Bootinterface 
wiederum ist dann auf Altera FPGAs abgestimmt ( Serial oder parallel 
Slave ). Mit ein wenig Anpassung könnte das für Dich allerdings 
anpassbar sein. die von Altera gelieferte IP unterstützt das Neuladen 
mit Konfigurationen aus definierbaren Speicherbereichen, was Du wiederum 
nutzten kannst um unterschiedliche Bausteine zu beschicken...

>- Es soll möglich sein, die "Konfigurationstakte" von einem weiteren
>Spartan 3A DSP durchzuschleifen. Entweder parametriert der Spartan die
>drei Devices oder eben der kleine, gesuchte FPGA

MCU fällt hier aus. Beim FPGA muss das Timing genauer untersucht und 
beachtet werden. CPLD fürde ich hier für problemlos erachten...

>Mit welcher Chipgröße muss ich rechnen? (FPGA + EPROM)

Dein Vorschlag XC2C32A dürfte zu klein sein.
Als Vergleich gibt es einen kleinen Opensource Core welcher eine 
SD-Karte ( im SPI-Interface Mode ) nutzt um einen FPGA via SerialSlave 
zu booten. Die effektive Coregröße in einem CPLD liegt meiner Erinnerung 
nach bei ca. 34-40 Register.
Da mehrere Bausteine konfiguriert werden sollen, brauchts ein Paar 
register mehr, so dass Du über die 32Register deines Vorschlages 
hinausgeschossen bist...

Mein Vorschlag an dieser Stelle wäre allerdings tatsächlich eine MCU mit 
JTAG Schnittstelle zu verwenden. Zusätzlich einen Hard oder SoftwareUART 
plus SPI-Flash.
Während der Entwicklung lässt sich via JTAG debuggen und via UART ( ohne 
zus. JTAG-Tols und $Software) Eprominhalte transferieren.
In der Produktion wird der Eprominhalt dann via JTAG transferiert...



Gruß

Andreas

von Christian R. (supachris)


Lesenswert?

Andreas B. wrote:
> Hallo Arndt,
>
> der FPGA/CPLD soll die drei anderen Geräte konfigurieren, das bedeutet,
> dass er die Konfigurationsregister dieser drei Geräte beim Start
> beschreibt. Diese erste Initialisierung ist fix... also Standardwerte,
> mit denen das System lauffähig ist und funktioniert.

Hm, also ich glaub mit konfigurieren meinst du etwas anderes als das 
übliche Konfigurieren eines FPGA. Kann das sein?

Du willst interne Register, die Teil des FPGA-Design sind, auf 
Standard-Werte setzen? Normal bedeutet Konfigurieren eines FPGA, dass 
der Bitstream, der erst mal die interne Logik überhaupt erst "zusammen 
baut", irgendwie in den FPGA gelangt. Im einfachsten Fall macht das das 
FPGA beim Einschalten von alleine aus einem Platform Flash über Serial 
Master Mode.
Wird auch manchmal als Booten bezeichnet.

Das was du meinst, ist ja schon eine Kommunikation mit dem fertig 
gebooteten bzw. konfigurierten FPGA.
Meiner Meinung nach ist das aber unnötig, weil man jedes einzelne 
FlipFlop und jede Block-Ram Speicherstelle über den Bitstream vorbelegen 
kann. Das kann gleich ins Design einfließen, und wird automatisch nach 
dem Laden des Bitstream ausgeführt.

von Oli (Gast)


Lesenswert?

Schau dich mal nach Actel FPGAs um. Die brauchen kein externes EPROM für 
die eigene Konfiguration, da das FPGA selbst in einem Flash Prozess an 
Stelle der sonst üblichen SRAM Prozesse gefertigt wird. Zusätzlich sind 
da 1024bit internes Flash-EEPROM für die Konfiguration der anderen 
Bausteine vorhanden (reicht das?).

Gruss Oli

von Andreas B. (loopy83)


Lesenswert?

> Hm, also ich glaub mit konfigurieren meinst du etwas anderes als das
> übliche Konfigurieren eines FPGA. Kann das sein?
Ich meine nicht die Konfiguration des FPGA selber, sondern die der 
anderen drei Devices.
Meiner Meinung sollte es ablaufen:
- der FPGA/CPLD bootet nach zuschalten der Vcc. Entweder hat er seine 
eigene Konfiguration behalten, oder holt sie sich erneut aus einem 
externen, nicht flüchtigen Speicher.

- dann beginnt er die drei externen Devices der Reihe nach zu 
konfigurieren. Dazu verwendet er 5 Siganle (SCLOCK, SDATA, SLOAD_1, 
SLOAD_2, SLOAD_3).

- SLOAD_1 wird auf LOW gelegt und danach wird begonnen, zuerst die 
Adressdaten des entsprechenden Registers auf den SDATA Kanal zu legen 
und dann die entsprechenden Datenbits.

- Danach wird SLOAD_1 wieder High gesetzt und SLOAD_2 wird aktiviert 
)low aktiv) und das Spiel mit Adress- und Datenbits beginnt von Neuen.

- So geschieht es dann auch beim dritten Schaltkreis.

- So bekommen nach und nach (serial) alle drei Teilnehmer ihre 
Konfigurationsdaten zugesendet und können dann anhand der Inhalte in 
ihren Registern anfangen zu arbeiten.

- danach werden die 5 Konfigurationskanäle mit 5 Eingängen verknüpft und 
das serielle Interface wird von einem weiteren FPGA gesteuert bzw. mit 
Adress- und Datenbits versorgt.

@Oli:
1024bit könnten fast reichen. Zwei geräte haben 3 bit Adressen und 11 
bit Daten und das eine Gerät hat 4 bit Adressen und mit unterschiedlich 
egroßen Registern, isgesamt glaube ich 518bit oder sowas. Also könnte 
hinkommen.
Du meinst also, dass sich dieser FPGA selbst konfiguriert und booten 
kann und dann der 1024bit ROM genutzt werden kann, um die drei Devices 
nacheinander zu konfigurieren. Ich schau mir das mal an, ob ich dann 
auch jederzeit sämtliche Parameter, sowohl für die Konfiguration des 
FPGA, als auch die Daten des 1024bit ROMs ändern kann.. meinetwegen über 
JTAG.

@Andreas:
Einen Init-Done gibt es meiner Meinung nach nicht. Wenn das letzte 
Datenbit eines Registers (definierte Größe und Anzahl von Bits) 
geschrieben wird, ist die Konfiguration dieses einen Registers 
austomatisch beendet.

Vielen Dank!

von Christian R. (supachris)


Lesenswert?

Achso, die 3 "Geräte" sind keine FPGAs sondern normale SPI Slaves. Da 
hab ich viel zu kompliziert gedacht. Naja, du musst im Prinzip nur einen 
SPI-Master bauen und mit einem Zähler die Adressen und Chip-Selects 
durchschalten. Die Werte kannst du ja im VHDL gleich als Konstanten 
angeben. Die brauchen dann höchstens Logik-Zellen, aber keine FlipFlops. 
Das sollte dann mit einem kleinen Cool-Runner schon funktionieren. Die 
Konstanten, die per SPI raus geschrieben werden sind dann Teil des 
Designs....

von Andreas B. (loopy83)


Lesenswert?

Die Logikzellen... sind das in den Datenblättern angegebenen Macrocells?

Ich habe ja meine Adressbits und meine Datenbits, die ich ausgeben 
möchte. Diese sind Konstanten... ändern sich also nur in der Entwicklung 
und ändern sich dann nicht mehr.

Ich habe mir nur einen weiteren FPGA als Vorschlag herausgesucht:
http://www.actel.com/products/igloonano/default.aspx
(weiter unten auf der Seite die Tablle: Product Table)

Entweder der AGLN010 im UC36 (3x3mm) package... oder, sollte ich 
wirklich pro Konfigurationsbit eine Macrocell benötigen, dann der 
AGLN060 im CS81 (5x5mm) package.

Oder ich gehe den Weg und lege die Konfigurationsdaten in dem 1024bit 
FlashROM ab, sofern es möglich ist. Dann wäre auch die kleinste Variante 
ausreichend, oder?

Der Takt wird mit 80MHz von einem Quarz bereitgestellt und dann auf 
40MHz in einem Timinggenerator herabgesetzt. Dieser Takt wird dann den 
Spartan 3A DSP versorgen und dort erzeuge ich dann den erforderlichen 
Takt zur Konfiguration der SI Slaves. Er beträgt auf meinem Evaluation 
Board 5MHz. Diese 5MHz bilden dann gleichzeitig den SCLOCK, mit dem die 
Daten übertragen werden. Sind 5MHz eine realistische Größe, oder sollte 
ich es lieber etwas gemächlicher angehen?

BESTEN DANK!

von Christian R. (supachris)


Lesenswert?

Nee, Logikzellen sind keine Makrozellen, jedenfalls nicht 1:1. Bei einem 
CPLD ist eine Makrozelle ein FlipFlop mit jeder Menge Kombinatorik 
davor. Beim FPGA gibts dann eher Slices und Slice FlipFlips, die LUTs 
davor haben. Die Konstanten belegen meines Wissens keine FlipFlops, wenn 
überhaupt dann Kombinatorik. Du kannst also theoretisch alle 
FlipFlops/Makrozellen für den SPI-Master verwenden.

Am besten wird es sein, du machst dir das VHDL Design und simulierst es, 
bis es funktioniert und lässt dann beim ISE (bei Xilinx) die Synthese 
und das Fitting auf den kleinen Coolrunner machen. Dann zeigt der dir 
an, wieviel Ressourcen belegt sind. Das ist die sichere Variante. So ein 
Design ist ja schnell zusammen gestellt, das sollte nur 2 Tage incl. 
Simulation dauern. Dann kannst du immer noch entscheiden, welchen Chip 
du nimmst.

5MHz sind völlig OK, wenn du ein synchrones Design hast, kannst du den 
CoolRunner gut und gerne mit 200MHz betreiben.

von Andreas B. (loopy83)


Lesenswert?

Christian R. wrote:
> So ein
> Design ist ja schnell zusammen gestellt, das sollte nur 2 Tage incl.
> Simulation dauern. Dann kannst du immer noch entscheiden, welchen Chip
> du nimmst.
Das habe ich mir schon so gedacht, dass ich erst das Design fertig 
machen muss. 2 Tage sind sicher machbar für einen erfahrenen 
VHDL-"Programmierer". Ich aber arbeite mich erst in die Thematik ein.... 
da wird es sicher eine ganze Weile länger dauern.

Aber ich gebe mein Bestes und versuche mal, das hinzubekommen.

Habe schon angefangen das Buch VHDL-Synthese zu lesen und 
nachzuempfinden, nur leider weiß ich seit dem nicht so richtig, wo ich 
ansetzen soll. Die Designs dort sind verständlich und recht einfach, 
aber die ganze Sache auf das reale Problem zu projezieren, ist nicht 
gerade einfach :)

Ich danke dir für deine Hilfe! Den anderen natürlich auch!

MfG andreas

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.