Forum: FPGA, VHDL & Co. ICE40UP NVCM programmieren


von Mampf F. (mampf) Benutzerseite


Lesenswert?

Guten Abend,

hat zufällig jemand Source-Code (oder Pseudo-Code) zum programmieren des 
NVCMs der ICE40 FPGAs?

In der Configuration-Guide von Lattice heißt es nur:

> The NVCM can be programmed using a processor. For more information
> contact your local Lattice sales office.

Ich hab im Internet nichts dazu gefunden ...

TinyFPGA verwendet auch ICE40, aber auch dazu hab ich nichts gefunden.

Hat jemand eine Idee, außer dass ich mein "local Lattice sales office" 
kontaktieren soll? :)

Viele Grüße,
Mampf

von Andi (Gast)


Lesenswert?

Ich hab auch schon danach gesucht und nichts gefunden.

Du kannst das NVCM aber mit dem Radiant- oder dem Diamond Programmer 
programmieren, dazu brauchst du halt einen FT2232 als Interface.
Wichtig ist, dass du am Vpp Pin etwa 2.5 Volt hast, statt 3.3, meist 
wird einfach eine Diode dafür verwendet um die Spannung zu reduzieren.

Du bist dir aber schon bewusst, dass das NVCM nur einmal programmierbar 
ist, und danach das laden der Konfiguration vom externen Flash nicht 
mehr möglich ist?
Das ist eigentlich nur für Serienproduktion gedacht, wobei dann kein 
Flash mehr nötig ist.
Die RAM Zellen lassen sich allerdings nach wie vor mit der Konfiguration 
beschreiben von einem externen Prozessor, auch wenn das NVCM 
programmiert ist.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Andi schrieb:
> Ich hab auch schon danach gesucht und nichts gefunden.

Schade, dann frag ich doch mal an :)

> Du kannst das NVCM aber mit dem Radiant- oder dem Diamond Programmer
> programmieren, dazu brauchst du halt einen FT2232 als Interface.

Hmm, ach wenn ich nur einen Logik-Analyzer hätte xD

> Wichtig ist, dass du am Vpp Pin etwa 2.5 Volt hast, statt 3.3, meist
> wird einfach eine Diode dafür verwendet um die Spannung zu reduzieren.

Darauf hab ich geachtet - hab die Schaltung quasi dem Dev-Kit 
entsprechend nachgebaut. Die Diode hab ich drinnen :)

> Du bist dir aber schon bewusst, dass das NVCM nur einmal programmierbar
> ist, und danach das laden der Konfiguration vom externen Flash nicht
> mehr möglich ist?

Jup - würde das FPGAchen gerne fertig programmiert verkaufen. :)

Hatte da letztens schon mal nach einem Testsockel gesucht, womit ich mir 
quasi meinen Programmer bauen möchte.

> Die RAM Zellen lassen sich allerdings nach wie vor mit der Konfiguration
> beschreiben von einem externen Prozessor, auch wenn das NVCM
> programmiert ist.

von Andi (Gast)


Lesenswert?

Mampf F. schrieb:
> Jup - würde das FPGAchen gerne fertig programmiert verkaufen. :)

Darf man fragen was dein Chip dann so können wird? So ein FPGA mit OTP 
ist wohl die einfachste Möglichkeit einen eigenen Chip zu erhalten.

> Hatte da letztens schon mal nach einem Testsockel gesucht, womit ich mir
> quasi meinen Programmer bauen möchte.

Von Lattice gibt es so einen Sockel mit Programmer fixfertig, kostet 
halt fast 700 €:
http://www.mouser.de/datasheet/2/225/FPGA-UG-02046-1-1-Smart-Socket-1382039.pdf

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Andi schrieb:
> Mampf F. schrieb:
>> Jup - würde das FPGAchen gerne fertig programmiert verkaufen. :)
>
> Darf man fragen was dein Chip dann so können wird? So ein FPGA mit OTP
> ist wohl die einfachste Möglichkeit einen eigenen Chip zu erhalten.

Das wird ein Proof-Of-Work-Beschleuniger für die Crypto-Währung IOTA. 
PoW wird gebraucht, um Transaktionen zu tätigen und Embedded Systeme tun 
sich damit sehr schwer. Ein Dilemma, das das FPGA lösen soll - IOTA 
zielt eigentlich auf IoT-Devices ab, aber keins kann selbst PoW 
durchführen.

Hier sieht man ein Bild vom funktionierenden Prototyp:

https://twitter.com/ThomasPototsch1/status/1057668967320469504

Der STM32F3 auf der Platine wäre mit einer PoW-Berechnung im Mittel 
länger als 10 Minuten beschäftigt.

Das FPGA macht das in durchschnittlich 8,5s und braucht nur 45mW.

NVCM wäre halt deshalb so interessant, weil man sich den Upload der 
100kB sparen kann, d.h. es können kleinere Controller verwendet werden.

Man könnte dann kleine PoW-Module anbieten, die fix und fertig sind und 
per SPI angesprochen werden - oder das vorprogrammierte FPGA einzeln für 
Entwickler, die ihn in eigene Schaltungen integrieren wollen.

>> Hatte da letztens schon mal nach einem Testsockel gesucht, womit ich mir
>> quasi meinen Programmer bauen möchte.
>
> Von Lattice gibt es so einen Sockel mit Programmer fixfertig, kostet
> halt fast 700 €:
> http://www.mouser.de/datasheet/2/225/FPGA-UG-02046...

Hmm, einen Sockel hab ich für um die $70 schon gefunden - fehlt im 
Prinzip nur noch die Software zum programmieren :)

: Bearbeitet durch User
von Christoph Z. (christophz)


Lesenswert?

Mampf F. schrieb:
>> Du kannst das NVCM aber mit dem Radiant- oder dem Diamond Programmer
>> programmieren, dazu brauchst du halt einen FT2232 als Interface.
>
> Hmm, ach wenn ich nur einen Logik-Analyzer hätte xD

Wenn im Programmer nur ein FT2232 drin ist und sonst keine Logik oder 
Intelligenz, dann brauchst du nicht mal einen Logik-Analyzer.

Datenblatt des FT2232 und der USB Monitor für dein Betriebssystem (oder 
deines VM Hosts) reichen.

Bisschen fummelig das Timing Diagramm aus den USB Transaktionen zu 
rekonstruieren...

Und sonst baust du dir deinen LA halt selber (z. B. den SUMP portieren). 
FPGAs hast du ja rumliegen ;-)

von Mampf F. (mampf) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich glaub ich bin einen Schritt weiter ...

radiant kann NVCM Files erzeugen ...

Die sehen in etwa so aus:
1
#DF 11-2-2018
2
#DC a9a9
3
#SR 2016.08Dev.27837
4
#DN iCE40UP5K
5
#PT SG48
6
#HF 01
7
06
8
02 00 00 00 7e aa 99 7e 51 00 01 05
9
02 00 00 08 92 00 20 62 02 b3 72 01
10
02 00 00 10 50 82 00 00 11 00 01 01
11
02 00 00 50 00 00 00 02 00 16 00 00
12
02 00 00 d8 00 00 00 00 00 10 00 00
13
02 00 00 e8 00 00 00 00 00 00 40 00
14
02 00 00 f0 00 01 00 10 00 00 00 00
15
02 00 00 f8 00 00 00 00 00 06 00 00
16
02 00 01 00 00 00 34 00 00 00 00 00

Im Anhang ist ein Bild mit dem Kommando-Set der 25er EEPROMs ...

Na wer erkennt Zusammenhänge? :-)

Für mich sieht es so aus, als würden schon fertige 
EEPROM-Befehlssequenzen generiert werden - in dem Fall Writes mit 24Bit 
Adresse und 8 Datenbytes.

Mit 06 wird schreiben aktiviert - und ganz am Ende kommt ein 04, welches 
das Schreiben wieder deaktiviert.

So einfach kann es sein^^

Muss ich mal testen :)

: Bearbeitet durch User
von Mampf F. (mampf) Benutzerseite


Lesenswert?

2 Jahre her, das Problem stellt sich mir erneut :)

Gibt es mittlereile mehr Informationen dazu?

Hat von den Bastlern noch niemand herausgefunden, wie man die ICE40 
nichtflüchtig programmiert? :)

Bei Google hab ich wieder nichts gefunden.

Die letzte Erkenntnis war, dass Radiant Files zum Programmieren erzeugen 
kann (25xx EEPROM kompatibel) und man sie nur reinschieben muss.

Aber das Schalten der ICE40 in den non-volatile Programmiermodus hab ich 
nie herausgefunden und war im Schaltplan auch nicht dokumentiert.

: Bearbeitet durch User
von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Im Zweifel wuerde ich einfach mal ein Ticket an Lattice schicken. Der 
Support bei denen ist wirklich gut, zumindest habe ich die Erfahrungen 
gemacht. :-D

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Mampf F. schrieb:
> Hat von den Bastlern noch niemand herausgefunden, wie man die ICE40
> nichtflüchtig programmiert? :)

Ich denke, die Bastler sind dabei das falsche Zielpublikum: nachdem du 
den NVCM programmiert hast, kannst du nicht mehr vom externen Flash 
konfiguriere (bestenfalls noch vom RAM), d.h. aus Sicht des Bastlers ist 
das Teil dann "bricked".

Industriepublikum wäre da wohl eher relevant, denn letztlich ist das 
Feature ja dafür da, dass du in einer industriellen Fertigung ein FPGA 
(fast) genauso einfach benutzen kannst wie einen 7400: einlöten, fertig. 
(Konfiguriert muss der Flash vorher woanders worden sein, aber sowas 
machen ja bspw. auch die Distris bereits, entsprechende Stückzahl 
vorausgesetzt.)

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Industriepublikum wäre da wohl eher relevant, denn letztlich ist das
> Feature ja dafür da, dass du in einer industriellen Fertigung ein FPGA
> (fast) genauso einfach benutzen kannst wie einen 7400: einlöten, fertig.
> (Konfiguriert muss der Flash vorher woanders worden sein, aber sowas
> machen ja bspw. auch die Distris bereits, entsprechende Stückzahl
> vorausgesetzt.)

Jau genau - ich würde den gerne als ASIC-Ersatz benutzen und ihn dann in 
einem DFN48-Sockel vorprogrammieren wollen.

Vlt versuche ich es nochmal bei Lattice - letztes mal war ich wohl nicht 
persistent genug^^

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ansonsten: deren Devboard sollte es zusammen mit ihrer Software auf 
jeden Fall können. An die Pins einen LA dranhängen und zugucken. ;-)

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Ansonsten: deren Devboard sollte es zusammen mit ihrer Software
> auf
> jeden Fall können. An die Pins einen LA dranhängen und zugucken. ;-)

Meinst du wirklich "auf jeden Fall"?

Ich hab so das Gefühl, dass das Feature gar nicht für normale Entwickler 
gedacht ist sondern echt nur supported wird, wenn es Richtung 
Massenproduktion geht.

Mal schauen, was die Hardware kostet 🤔

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Mampf F. schrieb:
> Meinst du wirklich "auf jeden Fall"?

Naja, irgendwie muss der Kram ja vom FT2232 ins Device kommen.

> Mal schauen, was die Hardware kostet 🤔

Das Devboard? 40 oder 50 Euro, habe ich hier als Spiel-Plattform, um 
überhaupt mal einen Einstieg in die Thematik zu bekommen.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Mampf F. schrieb:
>> Meinst du wirklich "auf jeden Fall"?
>
> Naja, irgendwie muss der Kram ja vom FT2232 ins Device kommen.

Naja, ich wollte damit sagen - die Software kann den NVCM vielleicht gar 
nicht programmieren.

Ist das was anderes als Radiant?

>> Mal schauen, was die Hardware kostet 🤔
>
> Das Devboard? 40 oder 50 Euro, habe ich hier als Spiel-Plattform, um
> überhaupt mal einen Einstieg in die Thematik zu bekommen.

Ich spar mir Devboards immer und mach gleich Custom-Designs mit den ICs, 
die ich dann benutzen möchte. Hat bisher immer gut funktioniert. 🤔

Extra dafür eins zu kaufen, widerstrebt mir irgendwie 🙈

: Bearbeitet durch User
Beitrag #6567839 wurde vom Autor gelöscht.
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Mampf F. schrieb:
> Ist das was anderes als Radiant?

Naja, der Radiant-Programmer halt.

Aber ich wollte meins nicht bricken, probiert habe ich es selbst nicht. 
;-)

Außerdem gibt's noch ein opensource-Tool …

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Außerdem gibt's noch ein opensource-Tool …

iceprog

Aber bei dem bin ich mir nicht sicher, ob das überhaupt dazu in der Lage 
wäre, den Upload in den NVCM durchzuführen.

Beitrag #6567899 wurde vom Autor gelöscht.
von Gerd E. (robberknight)


Lesenswert?

Frag mal im 1bitsquared Discord:
https://1bitsquared.com/pages/chat

Das sind die, die den Icebreaker gemacht haben. Vermutlich weiß jemand 
dort wie es geht.

Ich hatte irgendwas in Erinnerung daß man mit der NVCM-Spannung 
aufpassen muss. Die darf nicht bei 3.3V liegen damit das geht, die muss 
niedriger sein. Schau Dir das nochmal genauer im Datenblatt an.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Gerd E. schrieb:
> Ich hatte irgendwas in Erinnerung daß man mit der NVCM-Spannung
> aufpassen muss. Die darf nicht bei 3.3V liegen damit das geht, die muss
> niedriger sein.

Lustig, darüber bin ich gestern im Datenblatt gestolpert und hatte das 
verwundert zur Kenntnis genommen!

Vielen Dank für den Tipp - dann frag ich mal bei denen nach :)

von Andi (Gast)


Lesenswert?

Mampf F. schrieb:
> Gerd E. schrieb:
>> Ich hatte irgendwas in Erinnerung daß man mit der NVCM-Spannung
>> aufpassen muss. Die darf nicht bei 3.3V liegen damit das geht, die muss
>> niedriger sein.
>
> Lustig, darüber bin ich gestern im Datenblatt gestolpert und hatte das
> verwundert zur Kenntnis genommen!
>
> Vielen Dank für den Tipp - dann frag ich mal bei denen nach :)

Steht eigentlich schon in der ersten Antwort dieses Threads, und du hast 
es ja auch berücksichtigt, wie du geschrieben hast.

Andi

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Ich glaub ich hab es gefunden!

https://github.com/YosysHQ/icestorm/pull/271/files

🥳🥳🥳🥳🥳

Der Code hat eine `nvcm_mode_entry` funktion :)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Mampf F. schrieb:
> Ich glaub ich hab es gefunden!

Hoho, dann hat das jemand nachgereicht. Cool.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Mampf F. schrieb:
>> Ich glaub ich hab es gefunden!
>
> Hoho, dann hat das jemand nachgereicht. Cool.

Nicht ganz - man konnte den NVCM nicht programmieren, aber eine ID 
darüber abfragen.

Hab den Programmierer von dem PR angeschrieben und er meinte, dass jede 
Diamond Programmer installation ein "embedded_systems" Verzeichnis mit 
C-Code enthält. 🤯🤯🤯

Das ist genau das, was ich vor 2 Jahren schon versucht hab,von Lattice 
zu bekommen und wo sie mich einfach ignoriert hatten.

Muss ich mir gleich mal anschauen 🥳

: Bearbeitet durch User
von Mampf F. (mampf) Benutzerseite


Angehängte Dateien:

Lesenswert?

Zur Dokumentation ...

Radiant Programmer hat ein Deployment-Tool dabei, das "Slave SPI 
Embedded" Files erzeugen kann. Dafür gibts auch gleich einen Source-Code 
dazu und man muss nur das Interface sozusagen implementieren.

Damit das Deployment-Tool aber funktioniert, braucht man ein gültiges 
XCF File, das man nur mit einem funktionierenden USB-Programmer erzeugen 
kann (den ich natürlich nicht habe).

Wenn man diese Klippe umschifft hat, kann man aus NVCM-files, wie 
Radiant sie erzeugt, "Slave SPI Embedded" files erzeugen.
.
1
thomas@ryzen():/tmp/y$ "/home/thomas/programme/lscc/programmer/bin/lin64/ddtcmd" -oft -sspi -if "/tmp/lat2/impl1.xcf" -nocompress -hex -ofa "/tmp/lat2/impl1_algo.sea" -ofd "/tmp/lat2/impl1_data.sed"
2
Lattice Radiant Deployment Tool R2.0.0 Command Line
3
Loading Programmer Device Database...
4
Generating Slave SPI.....
5
Reading Input File: /tmp/lat2/impl1.xcf
6
XCF file: /tmp/lat2/impl1.xcf is for the old version. It might not compatible with this version.
7
8
Algorithm Output File: /tmp/lat2/impl1_algo.sea
9
Data Output File: /tmp/lat2/impl1_algo.sea
10
Generate Hex (.c) File: ON
11
Compress: OFF
12
Device1 iCE40UP5K:Program,Verify,Secure
13
14
The following file(s) generated:
15
 /tmp/lat2/impl1_algo.c
16
/tmp/lat2/impl1_data.c
17
18
19
Build Slave SPI Embedded File Operation: Successful.
20
21
Lattice Radiant Deployment Tool has exited successfully.
.
Den Kommandozeilenaufruf bekommt man natürlich nur, wenn die GUI-Version 
des Deployment-Tools sauber durchläuft und das geht nur, wenn man das 
richtige XCF-File hat ...

Im Anhang noch das XCF, dann kann ich das nicht mehr verlieren :)

: Bearbeitet durch User
von Mampf F. (mampf) Benutzerseite


Angehängte Dateien:

Lesenswert?

So, mein Raspi-HAT zum NVCM-programmieren ist fertig :) Hab noch 2 
PMODs, paar LEDs und Taster draufgebaut - why not 🤷

Versorgungsspannung für den ICE40 ist abschaltbar und alle Signale, die 
zum Sockel gehen, werden mit einem (bidirektionalen) Bus-Switch 
abgeschaltet. Gemeinerweise muss man den Bus-Switch mit 5V betreiben, da 
sonst von den 3,3V Pegeln kaum was übrig bleibt (gibt einen anderen 
Thread, wo man mich auf die Eigenheiten dieser aufgepimpten 
Analog-Switche aufmerksam gemacht hat und das TTL-kompatibel ebenfalls 
heißt, dass bei 5V Eingang am Ausgang keine 5V rauskommen müssen sondern 
zB 4V ebenfalls reichen, um TTL-kompatibel zu sein^^)

Hab lange nach einem QFP48 Sockel gesucht - einen der günstigsten hab 
ich dann tatsächlich bei Digikey gefunden.

$80 kostet er trotzdem 🙈

: Bearbeitet durch User
von Gerd E. (robberknight)


Lesenswert?

Mampf F. schrieb:
> Hab lange nach einem QFP48 Sockel gesucht - einen der günstigsten hab
> ich dann tatsächlich bei Digikey gefunden.

Sind die nicht in QFN48?

> $80 kostet er trotzdem 🙈

Wieviel Pins braucht man zum programmieren? Ist das nicht nur SPI und 
Reset oder so?

Wenn es nur wenige Pins sind, würde ich die FPGAs eher unprogrammiert 
einlöten und dann dort programmieren als einen Sockel zu verwenden.

Wenn das Programmieren durch andere Hardware auf der Platine gestört 
wird - evtl. Lötbrücken vorsehen, über die man nach dem Programmieren 
einmal mit dem Lötkolben drübergeht?

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Gerd E. schrieb:
> Mampf F. schrieb:
>> Hab lange nach einem QFP48 Sockel gesucht - einen der günstigsten hab
>> ich dann tatsächlich bei Digikey gefunden.
>
> Sind die nicht in QFN48?

Jau, hab ich mich verschrieben :/ Genau QFN48^^

>> $80 kostet er trotzdem 🙈
>
> Wieviel Pins braucht man zum programmieren? Ist das nicht nur SPI und
> Reset oder so?

Doch ziemlich ...

> Wenn es nur wenige Pins sind, würde ich die FPGAs eher unprogrammiert
> einlöten und dann dort programmieren als einen Sockel zu verwenden.

Ich wollte die vorprogrammiert zum Kauf anbieten 🙈

Quasi als würde man einen richtigen Chip kaufen :)

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.