Hallo,
das ist eigentlich eine Frage für ein Elektronikforum - aber hier scheinen ja genügend Kundige antreffbar zu sein und ich empfinde die Community hier einfach als angenehmer als das, was ich in dem einen oder anderen deutschen Elektronikforum schonmal mitlesen musste... insofern mich bitte sanft und liebevoll darauf hinweisen, wenn das Thema hier gar nicht reinpasst.
Ich bastel ja gerne an FPGA-Zeugs (siehe https://github.com/maikmerten/riscv-tomthumb) und habe für diese billigen ~20 Euro FPGA Boards ("ep2c5 mini board", z.B. Ebay) eine Platine entworfen, die 512Kx8 SRAM, SPI-ROM (nun, eigentlich ist es ja Flash) und ein paar Pins für eine UART-Schnittstelle vorsieht:
Die Idee ist, beim Poweron/Reset den SRAM mit den Daten aus dem SPI-ROM zu initialisieren, damit anschließend der Softcore im FPGA mit vernünftigen (Programm-)Daten loslegen kann. Platine habe ich fertigen lassen und zusammengelötet - und funktioniert.
Ich habe vorgesehen, den SPI-ROM entweder in einen Sockel zu packen (U2) oder auf die Platine selbst zu löten (U3). Im ersteren Falle würde man dann den SPI-ROM zum Programmieren von der Platine ziehen, im zweiten Fall würde man über den Sockel die Programmierung vornehmen - dann müsste ich aber die ganze Platine vom FPGA-Board herunternehmen, da die Leitungen direkt durchverbunden sind und ich die Signale des Programmers nicht einfach so auf den FPGA loslassen will (es ist i.d.R. keine gute Idee, an ICs, die nicht mit Versorgungsspannung versorgt werden, über die Signalleitungen was reindonnern zu lassen) und der Programmer auch nicht die 3,3 Volt-Schiene des FPGA-Boards befeuern soll.
(Eine dritte Möglichkeit wäre natürlich, einen Programmer in den FPGA zu laden und dem dann z.B. über UART die Daten reinzureichen, dazu hatte ich aber bisher keine Lust.)
Für eine eventuelle Weiterentwicklung möchte ich aber eigentlich das Teil über In System Programming (ISP) beschreiben - also SPI-ROM drauflöten, rauf auf das FPGA-Board und dann über eine Programmierpinleiste die Daten draufpumpen. Hier muss man natürlich aufpassen, dass nicht versehentlich sowohl Programmierer wie auch FPGA mit voller Kraft in entgegengesetzter Richtung an derselben Leitung ziehen - da verliert u.U. der weniger robuste und hat anschließend einen GPIO weniger.
Ist es prinzipiell vertretbar, das wie folgt zu lösen?
Für R würde ich sowas wie 1K vorsehen - dann fließen im schlimmsten Fall 3,3 Milliampere zwischen Programmer und FPGA, was sowohl Programmer wie auch FPGA locker verkraften dürften. Ein Tauziehen müsste der Programmer im Zweifel immer gewinnen.
Das Ganze soll insbesondere auch dann funktionieren, wenn der FPGA läuft, damit ich den nicht dauernd von der Spannungsquelle abstöpseln muss - deshalb kann auch weiterhin das Board den SPI-ROM mit Energie versorgen. Soll auch der Programmer Energie liefern dürfen, dann müsste ich eine Schottky-Diode für VCC vorsehen, um zu verhindern, dass das FPGA-Board über den Programmer gespeist wird. Dann habe ich da aber im Normalbetrieb einen Spannungsabfall auf der Versorgungsleitung des SPI-ROM und die Datensignale vom FPGA hätten auf einmal ein höheres Spannungsniveau als VCC am SPI-ROM. Das Datenblatt des SPI-ROM erlaubt "nur" VCC+0,4 Volt als "Absolute Maximum Rating", was mit einer einer gut gewählten Schottky-Diode einzuhalten sein müsste - aber ich kann gut damit leben, wenn ich nur bei betriebsbereitem FPGA-Board den SPI-ROM beschreiben kann.
Habe ich da irgendwo einen fatalen Fehler in meinen Überlegungen, oder passt das vermutlich soweit? Danke!