Forum: FPGA, VHDL & Co. Lattice Mico8 auf iCE40 FPGA?


von Janis E. (janis_e)


Lesenswert?

Hallo,

ich bin dabei mich in die FPGA Welt einzuarbeiten. Dazu würde ich gerne 
einige kleinere Projekt, die ich eigentlich eher mit einem AVR bestückt 
hätte, stattdessen mit einem kleinen FPGA realisieren (zu Übungszwecken, 
nicht weil es sinnvoller ist).

Für die komplexeren Aktionen würde ich dabei gerne zusätzlich zu reiner 
Logik auf einen Softcore zurückgreifen. Wenn ich mir den Mico8 Core 
ansehe, der auf einem MachXO2 in minimaler Ausführung keine 200 LUTs 
benötigt, dann spricht doch eigentlich nichts dagegen, diesen auch auf 
einem iCE40, bspw. dem ICE40LP1K mit 1280 LUTs zu verwenden. Für den 
Programmspeicher des Softcores müsste ich halt noch bspw. ein externes 
EEPROM verwenden, aber für den reinen Core müsste der kleine FPGA doch 
auch reichen, oder? Gibt es vielleicht etwas, dass ich nicht bedacht 
habe?

Danke im Voraus!

: Bearbeitet durch User
von Bürovorsteher (Gast)


Lesenswert?

Nein es spricht nichts dagegen.
Allerdings ist der iCE40 mit seinem außen angeflanschten 
Konfigurationsspeicher nicht ganz so problemlos handhabbar wie der 
MachXO2.
Die Dinger sind zwar preiswerter, mir gefielen sie aber schon deswegen 
nicht,
weil sie immer zwei Spannungen brauchen.
Für den Programmspeicher könntest du allerdings einen Flash-Bereich 
benutzen.
Für Massenproduktion ist das Teil schön, für Kleinserien und Versuche 
eher nicht.
Ist aber Ansichtssache.

von Janis E. (janis_e)


Lesenswert?

Vielen Dank für deine Antwort!

Bürovorsteher schrieb:
> mir gefielen sie aber schon deswegen
> nicht,
> weil sie immer zwei Spannungen brauchen

stimmt, danke für den Hinweis!

Bürovorsteher schrieb:
> Für den Programmspeicher könntest du allerdings einen Flash-Bereich
> benutzen.

gute Idee, danke!

von Lattice User (Gast)


Lesenswert?

Geht nicht direkt.

Der Mico8 implementiert seine 16 Register im Distributed RAM. Der ICE40 
unterstützt das nicht.

Der Programmspeicher lässt sich auch nicht optimal abbilden da die 
Befehle 18bit breit sind. Die EBR des ICE40 lassen sich im Gegensatz zu 
XO2 nicht ohne Verschnitt 18bit breit konfigurieren.

von Janis E. (janis_e)


Lesenswert?

Lattice User schrieb:
> Der Mico8 implementiert seine 16 Register im Distributed RAM. Der ICE40
> unterstützt das nicht.

Gut, aber 16 * 8 Bit dürfte sich ja auf den ICE40 trotzdem gut über EBR 
abbilden lassen, zur Not in der Größenordnung sogar direkt über Logic 
Cells, falls Ersteres knapp wird, oder?

Lattice User schrieb:
> Der Programmspeicher lässt sich auch nicht optimal abbilden da die
> Befehle 18bit breit sind. Die EBR des ICE40 lassen sich im Gegensatz zu
> XO2 nicht ohne Verschnitt 18bit breit konfigurieren.

Das ist ein interessanter Hinweis, danke! Was ich mir (wahrscheinlich 
wieder zu naiv) initial überlegt habe ist aber Folgendes: Ich benötige 
für den ICE40 ja sowieso einen Konfigurationsspeicher, da er - anders 
als bspw. der MACHXO2 - über keinen integrierten Flash für die 
Konfiguration verfügt. Wenn ich den Speicher entsprechend dimensioniere, 
müsste ich doch diesen Baustein auch direkt für den Programmspeicher 
nutzen können. Was meinst Du dazu?

von Duke Scarring (Gast)


Lesenswert?

Janis E. schrieb:
> Wenn ich den Speicher entsprechend dimensioniere,
> müsste ich doch diesen Baustein auch direkt für den Programmspeicher
> nutzen können. Was meinst Du dazu?
Prinzipiell ja, allerdings muß Dir das FPGA nach erfolgter Konfiguration 
Zugriff auf die Pins geben.
Ob und wie das beim gewählten Baustein funktioniert, siehst Du im 
Datenblatt.

Duke

von Lattice User (Gast)


Lesenswert?

Janis E. schrieb:
> Lattice User schrieb:
>> Der Mico8 implementiert seine 16 Register im Distributed RAM. Der ICE40
>> unterstützt das nicht.
>
> Gut, aber 16 * 8 Bit dürfte sich ja auf den ICE40 trotzdem gut über EBR
> abbilden lassen, zur Not in der Größenordnung sogar direkt über Logic
> Cells, falls Ersteres knapp wird, oder?

Als Register ist es teuer, 16 * 8 sind 128 LE, dazu kommt noch 
Addressierung und Multiplexer zu lesen.

EBR geht natürlich, wober aber zu beachten ist, dass 2 benötigt werden. 
Die Register im Mico8 sind als triple Port RAM ausgeführt, ein Port zum 
Schreiben, 2 Ports zum Lesen verbunden mit den beiden Eingängen der ALU.
Implementiert ist das einfach als 2 parallele DualPort RAMs. Braucht auf 
dem MachXO2 das equivalent von 24 LUTs (12 Slices als distrubutet RAM 
konfiguriert.

>
> Lattice User schrieb:
>> Der Programmspeicher lässt sich auch nicht optimal abbilden da die
>> Befehle 18bit breit sind. Die EBR des ICE40 lassen sich im Gegensatz zu
>> XO2 nicht ohne Verschnitt 18bit breit konfigurieren.
>
> Das ist ein interessanter Hinweis, danke! Was ich mir (wahrscheinlich
> wieder zu naiv) initial überlegt habe ist aber Folgendes: Ich benötige
> für den ICE40 ja sowieso einen Konfigurationsspeicher, da er - anders
> als bspw. der MACHXO2 - über keinen integrierten Flash für die
> Konfiguration verfügt. Wenn ich den Speicher entsprechend dimensioniere,
> müsste ich doch diesen Baustein auch direkt für den Programmspeicher
> nutzen können. Was meinst Du dazu?

Der externe Flash ist ein SPI Flash, d.h. direkt geht da gar nichts, und 
indirekt ist es sehr langsam, mindestens 56 Takte wenn bei jedem Zugriff 
die Addresse übertragen wird (das lässt sich auf 24+ reduzieren wenn man 
ausnutzt dass meistens sequentiell gelesen wird.

Alternativ kann man den ROM auch einfach in LUTs implementieren, (1 LUT 
pro 16 bit programmspeicher, also etwas mehr als eine LUT pro 
Instruction)

von Andi (Gast)


Lesenswert?

Da ich mich in den letzen Wochen intensiv mit den ICE40 FPGAs 
beschäftigt habe, hier ein paar Anmerkungen:

- Die ICE40 FPGAs haben durchaus einen internen Konfigurationsspeicher, 
dieser lässt sich aber nur einmal beschreiben (OTP), so dass zum 
Entwickeln ein externes SPI Flash benötigt wird. Normalerweise 
entwickelt man sowieso mit einem gekauften fertigen Board (z.B. 
Lattice's Breakout-Board), da ist Programmer und externes Flash schon 
drauf.

- 18bit breites RAM lässt sich mit 9 parallelen Block-RAMs à 2048 x 2 
Bits erzeugen. Ergibt dann ein 2k x 18 RAM.
Da 16 Blocks vorhanden sind kann man gut noch 2 für die Register 
spendieren.

- Dass 2 Spannungen benötigt werden ist dank dualen Spannungsreglern 
kein grosses Problem, man braucht dann wirklich nur einen Kondensator 
mehr, und davon hat man sowieso eine ganze Menge auf einem FPGA Print. 
Der Strombedarf dieser FPGAs is so klein dass schon kleine SOT 
Spannungsregler reichen.

Falls du es also schaffst den Mico8 auf dem ICE40 zu portieren würde 
mich das auch sehr interessieren. Ich arbeite derzeit an meinem eigenen 
kleinen Softcore...
Per Gooogle findest du auch eine ZPU Implementation für den ICE40, die 
benötigt allerdings relativ viele LUTs.

Andi

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.