Forum: FPGA, VHDL & Co. ZPU: Opensource Softcore CPU Projekt für Xilinx Spartan-3 FPGA Board


von Johannes S. (jayjohn)


Lesenswert?

Hallo zusammen,

ich habe soeben im Rahmen eines Studienprojekts erfolgreich eine 
Opensource Softcore CPU auf dem Xilinx Spartan-3 FPGA Board 
implementiert.
Verwendet habe ich hierfür die 32-Bit ZPU (erhältich auf opencores.org). 
An diese ist ein Wishbone-Bus angeschlossen, über den Peripherie-Geräte 
angeschlossen werden können. Bereits angeschlossen ist eine UART, ein 
Interrupt-Controller, ein SRAM-Controller (für einen der beiden 
onboard-SRAM-Chips), ein Controller der die 
Onboard-LEDs/-Schalter/-Taster/-7-Segment-Anzeigen steuert, eine 
einfache PS/2-Schnittstelle und ein VGA-Controller, der die Funktion der 
VGA-Schnittstelle demonstriert.

Des Weiteren habe ich als Bericht ein Tutorial erstellt, dass die 
Inbetriebnahme dieses Projekts auf dem Board relativ leicht und schnell 
ermöglicht, sowie auch das Anbinden weiterer Peripheriegeräte erläutert.

Da ich dieses Projekt natürlich nicht nur für mich geschrieben habe, 
würde ich es gerne der Mikrocontroller.net-Community zur Verfügung 
stellen und bin auch jederzeit offen für Fragen oder Support.

Ich bin mir nur nicht sicher, an welcher Stelle ich das Projekt inkl. 
Tutorial hier auf Mikrocontroller.net einstellen kann/darf. Insofern bin 
ich über Tipps sehr erfreut.
Ansonsten kann ich das Projekt natürlich auch jedem per Mail schicken.

Wenn jemand genauere Details dazu wünscht, einfach fragen!

Gruß.

von Dimi (Gast)


Lesenswert?

Hallo,

ich habe starke Interesse daran!
Damit kann ich mein altes T80 (Z80 mit VHDL) gegen was
schnelleres ersetzen!

Mein E-Mail: ilovespeccy[et]speccyland[punkt]net

MfG

von Johannes S. (jayjohn)


Lesenswert?

Hi,

freut micht. Ich schicke dir ein ZIP-File, dass den Bericht enthält 
(PDF), die ZPU mit allen nötigen Dateien (und einem funktionierenden 
Projekt für Xilinx ISE WebPack 10.1) und einem Ordner future_use (dieser 
enthält eine funktionierende PS/2-Schnittstelle für das Board Spartan-3, 
einmal für Tastatur und einmal für Maus, hatte nur bisher keine Zeit, 
dass zu implementieren).
Wie gesagt, das Projekt wurde für das Spartan-3 von Xilinx erstellt, 
dementsprechend wurde auch das Projekt mit einer Xilinx-Umgebung 
erstellt. Ich weiß nicht, was du nutzt, aber die VHDL-Dateien sollten 
relativ leicht portabel sein. Anpassen muss man dann auf jeden Fall das 
UCF-File, dass die Signale auf die FPGA-Ports mapped. Des Weiteren macht 
jeder Entwicklungsumgebungshersteller sein eigenen "Mist", was das 
Füllen der BlockRAMs mit Programm angeht - ich weiß nicht, was du da 
benutzt. Im Zweifelsfall einfach nochmal melden.
--> das ZIP-file ist etwa 5 MB groß, dein Email-Postfach kann das?

Gruß

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Ich hatte mir die ZPU auch mal angeschaut. Mich hat die Rechenleistung 
nicht überzeugt. Es ist eine Stackmaschine. Der Datendurchsatz ist 
dadurch gering, da die Daten mehrfach umgestapelt werden.

>>The medium version provides aprox. 2.6 DMIPS @ 50 MHz and the small 0.5 >>DMIPS 
@ 50 MHz.

Das sind 0,05DMIPS pro MHz
Die Größe ist ein Vorteil der ZPU.




Der Plasma Mips Core ist momentan mein Favorit mehr Datendurchsatz.
Laut Angaben soll der Plasma Core auf 0,5DMips pro MHz kommen. Das ist 
deutlich mehr. Für Mips gibt es auch bereits den GCC.


Ich würde deine Arbeit mir auch gerne anschauen, da ich bei der Mips 
auch gerade Probleme habe, wie ich den externen RAM als Programmspeicher 
nutzen kann. Es kann auch ein Denkproblem sein. Beim Anschalten ist der 
exteren Ram leer. Also muss ich den Programmcode im Flash vorhalten und 
mir einen Bootloader bauen, der aus dem Flash in den Ram die Daten 
kopiert. Oder wie realisiert man das im FPGA?
Ich habe auch keine Erfahrung mit dem Microblaze.

von Johannes S. (jayjohn)


Lesenswert?

Hallo René,

das stimmt, dass die ZPU nicht besonders schnell ist.
Aber erstens bietet das Spartan-3 Board sowieso nicht viel mehr und 
zweitens liegt der Vorteil bei der ZPU darin, dass sie besonders klein 
und "platzsparend" ist und trotzdem eine 32-Bit CPU ist. Aber darüber 
kann man sich natürlich streiten.
Des Weiteren ist sie aufgrund ihrer Einfachheit relativ leicht zu 
implementieren, gerade wenn man wie ich, neu in VHDL und 
FPGA-Programmierung (bzw. Konfigurierung ;) ) ist.

Ich möchte deine Hoffnungen nicht zerstören: aber als Programmspeicher 
nutze ich den (internen) BlockRAM des FPGAs. Was ich gemacht habe, ist 
den SRAM, der auf dem Board ist, als weitere Peripherie mitanzubinden. 
Man könnte natürlich einen Bootloader schreiben, was deine Idee ist und 
darüber aus dem Flash die Daten in den SRAM schreiben. Der Bootloader 
würde dann im BlockRAM stehen und nachher die CPU auf den SRAM 
umschalten.
Aber warum willst du nicht den internen BlockRAM als Programmspeicher 
nutzen?
Das ist sehr viel schneller, da du nicht aus dem FPGA raus, zum SRAM und 
dann wieder zurück in den FPGA musst.
Weiterer Vorteil vom BlockRAM ist, du kannst dir den Bootloader sparen: 
du schreibst beim Konfigurieren deines FPGAs, was du sowieso bei jedem 
"Neustart" machen musst einfach deinen BlockRAM gleich mit voll - du 
legst also quasi in einem VHDL-File deinen Programmcode mit ab.

Wenn du mir eine Emailadresse gibst, kann ich dir das Projekt schicken 
(5MB als ZIP-File)

von Michael E. (cuby)


Lesenswert?

Die ZPU ist wirklich arg langsam, dafür aber als Lernobjekt sehr 
nützlich - und auch für ernsthafte Anwendungen, die wenig Rechenleistung 
benötigen. Dank der kleinen Größe passen 98 Cores auf ein XUPV5-LX110T 
:-). Ein Tutorial dazu fände ich auf jeden Fall nützlich, das sollte gut 
zu den sonstigen hier veröffentlichten Artikeln (schau mal unter 
"Artikelübersicht") passen.

Der Plasma MIPS läuft ganz gut, auch wenn früher so einige Bugs hatte. 
Steve Rhoads ist aber fleißig dabei, sie zu beheben. In der Klasse ist 
evtl. auch noch der mb-lite interessant.

Ich denke, dass die PDP11 heutzutage einen guten Embedded Controller 
abgeben würde - vielleicht ist das PDP 11/70-Projekt auf opencores 
(http://opencores.org/project,w11) ja  interessant. Läuft auf einem 
Nexys2-Board hier problemlos. Alternativ ist vielleicht auch einer der 
MSP430-Cores interessant. Die sind allerdings alle in Verilog 
implementiert.

von Sym (Gast)


Lesenswert?

Die ZPU ist nicht nur sehr langsam pro MHz, sondern auch so schlecht 
kodiert, dass nur sehr bescheidene Taktraten möglich sind. Laut 
Timinganalyse hat die ZPU eine Maximalfrequenz < 20 MHz auf einem 
schnellen Stratix II - ein Armutszeugnis finde ich.

von Manuel K. (manuel1139)


Lesenswert?

Ich find das Projekt super und würde es mir auch gerne ansehen.
manuel.kampert [et] googlemail [punkt] com

Man sollte das ganze Projekt nicht wegen der vielleicht etwas langsamen 
ZPU in Frage stellen. Immerhin wird hier weit mehr geboten als eine CPU. 
So komplett habe ich noch nichts im Netz gefunden.

Viele Grüße
  Manuel Kampmert

von Johannes S. (jayjohn)


Lesenswert?

Hi,

schön, dass nicht alle mein Projekt sch* finden...

Nur noch mal als Hinweis: Als VHDL- und FPGA-Neuling ist es erst mal 
egal, in welcher Quali das kodiert ist und wenn du eine supertolle 
willst, dann kannst du ja auch eine kostenpflichtige z.B. von Altera 
kaufen - die sollte dann auch gut kodiert sein.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Ich war auch anfangs von der ZPU sehr angetan.
Doch dann gab es ein paar Zweifel.

Die Lizenz von Plasma gefällt mir besser.

The Plasma CPU project has been placed into the public domain by its 
original author and is free for commercial and non-commercial use.

 Momentan ist es Hobby. Beruflich kann ich auch meine gesammelte 
Erfahrung dadurch in einem späteren Projekt nutzen. Das ist mit GPL 
leider nicht möglich.
Außerdem habe ich mein 1000Mbit Lan erfolgreich mit VHDL gecodet. 
Hierfür suche ich eine Softcpu, die mir die ganzen Netzwerkpakete 
packen kann und auch alles andere quittiert. Hier bin ich auf einen 
möglichst hohen Datentransfer aus.

> Die ZPU ist wirklich arg langsam, dafür aber als Lernobjekt sehr
> nützlich -

Die Mips eignet sich auch sehr gut als Lernobjekt. Bis jetzt habe ich 
mit Akkumulator Prozessoren zu tun und konnte auch sehr viel hier 
lernen.


> Dank der kleinen Größe passen 98 Cores auf ein XUPV5-LX110T
Bei so vielen Cores möchte ich die Daten nicht sortieren.


> Der Plasma MIPS läuft ganz gut, auch wenn früher so einige Bugs hatte.
> Steve Rhoads ist aber fleißig dabei, sie zu beheben. In der Klasse ist
> evtl. auch noch der mb-lite interessant.

Ich habe  von DENX die EDK installiert und nutze daraus die GNU Tools. 
Ich scheitere gerade am Linker.

 $(LD_MIPS) -Ttext 0 -eentry -Map test.map -s -N -o test.axf opcodes.o

Die Option -Ttext ruft das Linkerskript text auf. Oder bin ich da 
falsch? Diese Datei gibt es leider nicht. Die restlichen Optionen habe 
ich noch nicht aufgeschlüsselt. Mit Linker Skripte habe ich noch keine 
Bekanntschaft geschlossen. Aber es ist eben immer mal das erste mal.


> Ich denke, dass die PDP11 heutzutage einen guten Embedded Controller
kenne ich nicht

> MSP430-Cores interessant. Die sind allerdings alle in Verilog
> implementiert.
Es sollte VHDL sein und mit dem MSP430 hatte ich bis jetzt nicht viel zu 
tun.

von Michael E. (cuby)


Lesenswert?

René D. schrieb:
> Ich scheitere gerade am Linker.
>
>  $(LD_MIPS) -Ttext 0 -eentry -Map test.map -s -N -o test.axf opcodes.o
>
> Die Option -Ttext ruft das Linkerskript text auf. Oder bin ich da
> falsch? Diese Datei gibt es leider nicht.

Nein, -Ttext gibt einfach die Adresse an, an die das .text-Segment (also 
der ausführbare Code) gelinkt werden soll.

Was für eine Fehlermeldung bringt der Linker denn?

> Die restlichen Optionen habe ich noch nicht aufgeschlüsselt.

-eentry gibt die Startfunktion "entry" an, -Map gibt an, in welche Datei 
das Speicherlayout (Adressen und zugeordnete Instruktionen/Daten) 
geschrieben werden soll. -s entfernt alle Debugsymbolinformationen aus 
dem erzeugten Binary, -N sollte angeben, dass text und data-Segmente 
les- und schreibbar sind und -o gibt schließlich an, dass die 
Ausgabedabei "test.axf" heißen soll.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

> Nein, -Ttext gibt einfach die Adresse an, an die das .text-Segment (also
> der ausführbare Code) gelinkt werden soll.
>
> Was für eine Fehlermeldung bringt der Linker denn?

Danke für dein Aufschlüsselung.
Ich muss nächst Woche nochmal schauen, ich bin gerade beim Packen für 
die nächste Woche.

Ich hatte das Text Segment auch in Verdacht, hatte in der Übersetzung 
für die Option -T Linker skript gelesen.

von Manuel K. (manuel1139)


Lesenswert?

Besteht noch die Möglichkeit das Projekt als E-Mail zu bekommen?

Es würde übrigens am besten hier reinspassen:

Artikelübersicht -> FPGA & Co. -> FPGA-Projekte

Viele Grüße
  Manuel

von Johannes S. (jayjohn)


Lesenswert?

Hi,

ja klar, die Möglichkeit besteht - lass mir einfach deine Emailadresse 
zukommen (am Besten als Private Nachricht).

Gruß

von Stefan Salewski (Gast)


Lesenswert?

Autor: René D. (Firma: www.dossmatik.de) (dose)
Datum: 19.03.2011 21:15

>Momentan ist es Hobby. Beruflich kann ich auch meine gesammelte
>Erfahrung dadurch in einem späteren Projekt nutzen. Das ist mit GPL
>leider nicht möglich.

GPL schließt keineswegs gewerbliche Nutzung aus -- man muss dann die 
erweitere Software nur eben wieder ebenfalls als GPL mit Quelltexten 
verfügbar machen -- und andere dürfen die Software dann ebenfalls wieder 
unter GPL weitergeben. Für Projekte, wo Betreuung durch den Entwickler 
und permanente Anpassungen usw. nötig sind, sollte das kein Problem 
sein.

von Johannes S. (jayjohn)


Lesenswert?

Hi manuel1139,

tut mir Leid, aber deine Mailadresse funktioniert leider nicht... Ich 
bekomme jedesmal einen Fehler des Mailer-Daemon, wenn ich versuche dir 
eine Mail an die angegebene Adresse zu schicken. Deswegen frage ich 
mich, ob du da die privaten Nachrichten, die ich dir geschickt habe 
überhaupt bekommen hast? Hast du noch eine andere Mail?

Gruß

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

hi Michael Engel kannst du mal unter
Beitrag "Mips assembler"
schauen?

Ich habe für die GNU Tool Chain einen neuen Thread eröffnet, weil es 
nichts mit VHDL zu tun hat.

Ich kann den Beispielcode von Plasma doch kompilieren. Nur habe ich 
diesen noch nicht in den Softcore eingebunden.

Jetzt habe ich mich selbst mit Assembler versucht und das ist noch nicht 
so klar.



für Stefan Salewski (Gast)

leider ist die Praxis so. Bevor man ein Projekt bekommt, erhält man 
einen Mantelvertrag. Darin stehen in der Regel mehrere Punkte. 
Sinngemäß; Geheimhaltung ist immer dabei und bei Projektende gehen die 
Rechte an erzeugten Code an den Auftraggeber über.
Da scheidet GNU eben aus.
Nur dass du mal eine Ahnung hast, wie es in der Praxis gehand habt wird. 
Ich habe nicht die Projektführung und kann mir nicht die Lizenz für das 
Gesamtprojekt aussuchen.

von Christian (Gast)


Lesenswert?

Hallo Johannes!

Dein Projekt klingt sehr interessant. Ich würde es mir geren anschauen. 
Meine Email dazu lautet: fpga.project[et]gmx.at

Danke
Christian

von Johannes S. (jayjohn)


Lesenswert?

Hallo zusammen,

ich habe soeben einen Artikel über meine Arbeit hier auf der Seite 
online fertiggestellt. Dort kann auch das Projekt plus Dokumentation 
heruntergeladen werden.

http://www.mikrocontroller.net/articles/ZPU:_Softcore_Implementierung_auf_Spartan-3_FPGA

Viel Spaß damit.

Grüße,
Johannes

von Duke Scarring (Gast)


Lesenswert?

Vielen Dank, das sieht sehr gut aus. Und gerade für Einsteiger schön 
bebildert :-)

Ich hab es nur kurz überflogen, dabei mir ist das hier (unangenehm) 
aufgefallen:
1
use IEEE.STD_LOGIC_ARITH.ALL;
2
use IEEE.STD_LOGIC_UNSIGNED.ALL;

Siehe dazu u.A. hier: Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete"

Duke

von Johannes S. (jayjohn)


Lesenswert?

Hallo Duke,

zu meiner Verteidigung: das wusste ich nicht, da ich noch Neuling bin.
Das es herstellerabhängig ist, wäre in diesem Fall jedoch sowieso 
relativ, da die Geschichte mit dem Programmspeicher in das auf den zu 
FPGA ladende Bit-File sowieso auch in der Form nur von Xilinx angeboten 
wird, also auch wieder herstellerabhängig ist. Ich werde mir das mal 
genauer anschauen, danke für den Hinweis!

Johannes

von Johannes S. (jayjohn)


Lesenswert?

Hallo Duke,

ich habe mir mal den Artikel angeschaut und auch die Links auf die 
anderen Artikel, wie 
http://www.mikrocontroller.net/articles/Rechnen_in_VHDL#Schlecht:_Direktes_Rechnen_mit_std_logic_vector
Hier wird ja gesagt, man soll nicht direkt mit dem Typ std_logic_vector 
rechnen. Ich bin der Meinung, dass ich das im großen und ganzen auch 
vermieden habe und stattdessen den Typ unsigned oder signed aus 
numeric_std verwendet habe (s. auch das Beispiel in folgendem Kapitel in 
meinem Artikel: 
http://www.mikrocontroller.net/articles/ZPU:_Softcore_Implementierung_auf_Spartan-3_FPGA#Inbetriebnahme_von_Board_und_Entwicklungsumgebung)

Ja, ich habe da die "verbotenen" Bibliotheken eingebunden, das hatte den 
Grund, dass wenn ich ein neues VHDL-File anlege, diese automatisch mit 
drin waren und ich mir nicht sicher war, ob ich die brauche.

von Martin S. (strubi)


Lesenswert?

Hi Johannes,

falls es Dich interessiert, ich habe deinen Setup mal aufgebohrt für 
JTAG-Debugging, d.h. Debuggen geht jetzt analog wie im Simulator auch 
auf der Hardware per gdbproxy. Man muss den Kram nur jeweils an seinen 
Lieblings-JTAG-Adapter anpassen (der vorerst noch per Expansionsport 
angeschlossen wird). Am Debuggen per Xilinx-JTAG (mit dem Cypress Chip) 
wird noch gearbeitet, das geht im Prinzip über die BSCAN 
Xilinx-Primitiven.

An dieser Stelle übrigens noch ein DANKE für Deine Komplettrelease, lief 
ohne Murren auf dem Spartan3 Starterkit. Nur beim VGA-Modul solltest du 
mal auf die "Clock Skew"-Warnings achten :-)

Gruss,

- Strubi

von Johannes S. (jayjohn)


Lesenswert?

Hi Martin,

ja, hört sich echt interessant an... Bisher war das mit dem Debuggen ja 
nicht so einfach bzw. ich habe es gar nicht gemacht ;)
Wenn du Lust hast kannst du die Erweiterung ja als weiteres Kapitel hier 
auf der Seite mit einem entsprechenden Download fortführen:
http://www.mikrocontroller.net/articles/ZPU:_Softcore_Implementierung_auf_Spartan-3_FPGA

Ja, mit dem VGA-Modul hatte ich mich erst ganz zum Schluss beschäftigt, 
sprich hatte nicht mehr viel Zeit mich damit 
zubeschäftigen/einzuarbeiten, dementsprechend ist die Quali relativ ;) 
aber als Einstieg ist es sicherlich trotzdem in Ordnung.

Danke und freut mich, dass es dir gefällt,

Johannes

von otto (Gast)


Lesenswert?

Martin S. schrieb:

> falls es Dich interessiert, ich habe deinen Setup mal aufgebohrt für
> JTAG-Debugging, d.h. Debuggen geht jetzt analog wie im Simulator auch
> auf der Hardware per gdbproxy. Man muss den Kram nur jeweils an seinen
> Lieblings-JTAG-Adapter anpassen (der vorerst noch per Expansionsport
> angeschlossen wird). Am Debuggen per Xilinx-JTAG (mit dem Cypress Chip)
> wird noch gearbeitet, das geht im Prinzip über die BSCAN
> Xilinx-Primitiven.

Klingt interesant.
Hat du dazu noch mehr Info!

Welchen gdbproxy hast du genutzt?

Und wie hast du den JTAG Slave eingebunden?

Es sind zwei Teilaufgaben zu lösen. Oder ist bereits der Code 
Bestandteil der ZPU?

von Martin S. (strubi)


Lesenswert?

Hi Otto,

>
> Klingt interesant.
> Hat du dazu noch mehr Info!

Erst mal nur das: http://tech.section5.ch/news/?p=101

>
> Welchen gdbproxy hast du genutzt?
>

Im Prinzip einen Fork vom msp430-gdbproxy, der mit div. Target backends 
aufgebohrt wurde und einen schmalen "zpuemu" library layer aufruft.

> Und wie hast du den JTAG Slave eingebunden?
>
> Es sind zwei Teilaufgaben zu lösen. Oder ist bereits der Code
> Bestandteil der ZPU?

Gerade erst gab's einen Fork mit der experimentellen ICE-Erweiterung:

http://repo.or.cz/w/zpu.git/commit/91e13ae045ee76c25b8883013d386beab3cb8086

Da findest Du die Details zur Anbindung an den Core.

Gruss,

- Strubi

von Piyush (Gast)


Lesenswert?

Hallo Johannes,

Ich interessiere mich über dein Studiumarbeit Projekt. Ich möchte ein 
MPSoC auf ZPU aufbauen. Zuerst möchte ich dein Projekt über mein Nexys3 
Spartan6 FPGA ausprobieren. Dafür muss ich die .bmm Datei ändern.

Ich würde dein ganze Projekt verstehen aber das Problem ist, dass ich 
nicht so gut Technische Deutsch verstehen. Es wäre super, wenn ich mehr 
Information auf Englisch bekommen. Bitte sag mir die Möglichkeit.

Grüße,
Piyush

von Johannes S. (jayjohn)


Lesenswert?

Hello  Piyush,

there exists no proper English version of this work - in the project 
description in German (see link above in this forum) is a link to the 
English partner embdev.net: 
http://embdev.net/articles/ZPU:_Softcore_implementation_on_a_Spartan-3_FPGA
I startet there with an English translation - unfortunately there are 
still some chapters missing... Have a look at it, the English is worse 
but I hope it helps you a little. I try to finish the English 
translation in between.

Cheers

von Piyush (Gast)


Lesenswert?

Hi Johannes,

I read the Englisch version. I understood the translated text portions 
but again many more important things were missing. It will be great once 
if you can make the documentation fully available in English. Will help 
many users :)

grüße,
Piyush

von Johannes S. (jayjohn)


Lesenswert?

Hi,

I don't really know what you mean by many more important things are 
missing.
My project - and also the mentioned tutorial -  is including the 
following steps:
- get the ZPU small running on the Spartan-3
- add a Wishbone bus to the ZPU
- add existing components to the Wihsbone bus
- add own components to the Wishbone bus
- program the ZPU by writing software in C (e.g. to control the 
components that are connected to the ZPU)

The English translation will be finished this evening - maybe someone 
else who's technical English concerning these topics is better then 
mine, can correct it a little?

Cheers

von nullgeist (Gast)


Lesenswert?

Habe/werde es mir anschauen und verbessern soweit ich kann.

von Piyush K. (piyk)


Lesenswert?

Hi Johannes,

Thank you so much for the translation to english, I was able to 
understand the overall project easily and implemented the same on my 
FPGA.

Additionally, I have 2 questions:

1.I tried the BRAM primitive RAMB16_S2_S2 to create a 32KB BRAM module 
to be used with Zealot version of ZPU. But on loading the .elf and 
making necessary signal data type changes (like typecasting from 
UNSIGNED to STD_LOGIC_VECTOR) at appropriate places, I did not get any 
output over my Serial Terminal.

2.I want to run AES algorithm on my Zealot ZPU and test its performance 
by running the encoding algorithm 1000-10000 times and calculating the 
no. of clock cycles or time elapsed during the process. How to deal with 
a timer module to send me the values of the mentioned quantities when 
the process runs on my ZPU?

Can you suggest me some way to deal with the above problems?

Grüße,
Piyush

von Duke Scarring (Gast)


Lesenswert?

Piyush K. schrieb:
> 1.I tried the BRAM primitive RAMB16_S2_S2 to create a 32KB BRAM module
> to be used with Zealot version of ZPU. But on loading the .elf and
You must convert the .elf to an .bin file:
1
zpu-elf-objcopy --strip-debug --discard-locals -O binary file.elf file.bin
Use the content of the .bin file to fill the BRAM.

> making necessary signal data type changes (like typecasting from
> UNSIGNED to STD_LOGIC_VECTOR) at appropriate places, I did not get any
> output over my Serial Terminal.
At first try to blink an LED, than serial communications.

Duke

von Strubi (Gast)


Lesenswert?

Hi Piyush,

I'd recommend to write "vendor independent" RAM code that can be 
simulated AND synthesized by ISE into dualported Block RAM.
The Zealot code is very "relaxed" written with respect to timing issues, 
we've made the experience that there are no surprises when moving from 
simulation to real world. So I'd recommend to verify the simulation 
first.
There are some funky things that can be done with GHDL (we use it to 
virtualize the entire SoC including JTAG debug ports, such that GDB can 
talk to it).

Cheers,

- Strubi

von Piyush K. (piyk)


Lesenswert?

Hallo Everyone,

Thank you so much for your feedback to my previous question. I have one 
further question.

The modified zpu_core used in the project by Johannes contains an option 
to configure the ZPU with multiple NUMBER OF CORES as given in the file 
"softcore_config.vhd".

Can we actually obtain this multicore functionality by simply changing 
the parameter in the config file? If YES, also how is the inter-core 
communication established?

Grüße,
Piyush

von Strubi (Gast)


Lesenswert?

Hi Piyush,

generally, you'd reserve some chunk of "L2" dual ported blockram that 
two CPUs can simultaneously access (except for simultaneous writes, 
you'd have to arbitrate that by either not allowing it or insert wait 
cycles which can be tricky on some core implementations).
Not sure if "numberOfCores" actually does something. Typically, you'd 
use some "for i in 0 to NUMBER generate label: instance end generate" 
construct yourself, and declare appropriate array types that you can 
assign to signals.
I've chained a few ZPUs a while ago just for pure academic fun. For 
competeable dual core apps, the ZPU is not good enough though.

von Piyush K. (piyk)


Lesenswert?

Hi Strubi,

Thank you so much for your last reply. I am still working on the dual 
core implementation and will post here when I get some success or get 
stuck somewhere. :)

On the other hand, I wanted to ask that do the others who have worked on 
the ZPU have faced this problem with the ZPU external RESET signal?
If the RESET button for ZPU is pressed over the FPGA several times, then 
the ZPU always hangs and gives no further output on the UART. It's the 
same I have observed while workin on Zealot but not on ZPUino.
Did anybody figured out any solution to the above problem?

Grüße,
Piyush

von Amit J. (ajain17)


Lesenswert?

Hello John,

 I am new to this group and just joined. I have a request about TAP 
controller.
For you ZPU project on Spartan 3 FPGA did you use any TAP controller 
state machine deisgn for debugging or single stepping the CPU? If yes 
can you Please share that TAP controller with me? My email id is 
ajain17@gmail.com

I am starting to put your design onto Spartan 3 FPGA now. I downloaded 
the design and was wondering if I can get a TAP controller design also.

Thanks for your help
Amit

von Johannes S. (jayjohn)


Lesenswert?

Hey Amit, I'm sorry - but I haven't done any debugging...

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.