Hallo liebe FPGA-VHDL-Microcontroller-Gemeinde,
aktuell beschäftige ich mich mit meinem FPGA und dem damit gelieferten
,,First Project"-Tutorial
Ich arbeite mit dem DE0-Nano Board.
Nach dem ich das Tutorial abgearbeitet habe und alles funktioniert hat,
wollte ich es anpassen, erweitern und den entsprechenden Aufwärtszähler
in VHDL selbst schreiben und implementieren. Um mehr Übung zu bekommen.
Der mitgelieferte Code (leider in Verilog, habe ich Null-erfahrung mit):
1
modulesimple_counter
2
(
3
CLOCK_5,
4
counter_out
5
);
6
inputCLOCK_5;
7
output[31:0]counter_out;
8
reg[31:0]counter_out;
9
10
always@(posedgeCLOCK_5)
11
begin
12
counter_out<=counter_out+1;
13
end
14
endmodule
Mein eigens geschriebener Code in VHDL sieht wie folgt aus:
1
libraryieee;
2
useieee.std_logic_1164.all;
3
useieee.numeric_std.all;
4
5
entitysimplecountis
6
PORT(
7
clk:instd_logic;
8
res:instd_logic;
9
y:outstd_logic_vector(31downto0)
10
);
11
endsimplecount;
12
13
architectureverhaltenofsimplecountis
14
SIGNALctr_s:unsigned(31downto0);
15
CONSTANTzero:unsigned(31downto0):=(others=>'0');
16
17
BEGIN
18
19
ctr:PROCESS(clk,res)
20
BEGIN
21
IFres='1'then
22
ctr_s<=zero;
23
ELSIFclk'eventandclk='1'then
24
ctr_s<=ctr_s+1;
25
endif;
26
endPROCESSctr;
27
28
y<=std_logic_vector(ctr_s);
29
30
ENDverhalten;
Wie ihr euch denken könnt funktioniert es nicht, daher auch die Bitte
nach Unterstützung.
Ist der Code von mir korrekt?
Vorab, schonmal vielen Dank.
Beste Grüße,
Bastian.
Hallo,schau mal mit Google "vdhl ...."
Dann bekommst du sehr viel in VHDL, auch dein Wunschprogramm.
Das umschreiben von Verilog bringt nur etwas wenn man Verilog kennt.
Ich Spiele auch mit Verilog, ist nicht so schwer, weil es "C"-lastig
ist.
Eigentlich ist Verilog leichter zu erlernen. Habe mal einiges erstellt
damit.
Mit VHDL tue ich mich auch schwer.
Gruss
peter schrieb:> Ich Spiele auch mit Verilog, ist nicht so schwer, weil es "C"-lastig> ist.
Zum Thema "Verwandtschaft von Verilog und C" (seit wann hat C eigentlich
begin und end und := Zuweisungen wie Pascal?) das hier:
Beitrag "Re: SPLD (GAL) - welche Software"
Und das:
Beitrag "Frage zur Lernkurve VHDL vs. Verilog"Bastian Cpunkt schrieb:> Mein eigens geschriebener Code in VHDL sieht wie folgt aus:> ....> Wie ihr euch denken könnt funktioniert es nicht
Wie hast du das festgestellt? Gab es eine Fehlermeldung? Welche?
> daher auch die Bitte nach Unterstützung.
Bitte mach die vhdl-Tokens um den VHDL-Code:
1
[vhdl]VHDL-Code[/vhdl]
> Ist der Code von mir korrekt?
Er entspricht wegen des zusätzlichen asynchronen Resets nicht der
Verilog-Beschreibung.
Warum schreibst du den Reset nicht so:
Guten Tag,
es war von mir beabsichtig ein asynchronen Reset zu integrieren.
Festgestellt das es nicht funktioniert, habe ich: Die angesteuerten LED
zeigten keine Reaktion.
Bastian Cmitpunkt schrieb:> es war von mir beabsichtig ein asynchronen Reset zu integrieren.
Das hast du gemacht.
> Festgestellt das es nicht funktioniert, habe ich:> Die angesteuerten LED zeigten keine Reaktion.
Welche Reaktion hätten Sie denn zeigen sollen?
Wo sind die LEDs angeschlossen? Warum simulierst du deine Beschreibung
nicht einfach? Der Simulator ist für VHDL das, was in C der Debugger
ist!
Lothar Miller schrieb:> Der Simulator ist für VHDL das, was in C der Debugger> ist!
Nicht so richtig.
Dem Debuggen in C kommt eher so etwas wie Chipscope am nächsten.
Schlumpf schrieb:> Schonmal im Chipscope nen Breakpoint gesetzt?
naja, wenn man lustig wäre könnte man ja mit dem TrigOut von Chipscope
alle ClockEnables jedes FlipFlops auf low setzen und somit alles lahm
legen ;-) Dann könnte man auch mit einem VIO SingleClock Pulses (für
einen Takt das Clock Enable Signal auf high setzen) machen und so durch
die Logik steppen.
Nicht gleich in der Luft zerfetzen, es war nur ein Gedankenexperiment,
was aber gehen könnte und auch funktionieren würde. Man muss nur jedem
FlipFlop ein ClockEnable spendieren. Aber auch in C muss ja extra Code
zum Debuggen reingepackt werden, um einen Breakpoint setzen zu können.
So weit ist das also nicht weg ;-)
Schönen Abend noch!
abc123 schrieb:> naja, wenn man lustig wäre könnte man ja mit dem TrigOut von Chipscope> alle ClockEnables jedes FlipFlops auf low setzen
Stimmt, könnte man. Aber dazu muss man schon sehr, sehr lustig sein :-)
> Man muss nur jedem FlipFlop ein ClockEnable spendieren.
In deinem Quellcode, den du prüfen willst.. sehr unschön, oder?
> Aber auch in C muss ja extra Code zum Debuggen reingepackt werden, um einen
Breakpoint setzen zu können.
Also ich musste in C bisher noch nie meinen QUELL-Code umbauen, dass ich
durchsteppen konnte.
Ganz abgesehen von dieser eher philosophischen Frage halte ich von
Chip-Scope nicht viel.
Ob der Code das macht, was er machen soll, wird in der Simulation
geklärt.
Kommt es dann auf dem Target zu Problemen, liegt das entweder daran,
dass der Code an einer Stelle "unsauber" ist (z.B. nicht synchron) oder
die Constraints nicht korrekt gesetzt sind.
Packt man dann diesen "Schnüffler" mit in das Design, so ist das Layout
des Designs ziemlich sicher ein anderes, als wenn Chipscope nicht mit
auf dem Chip wäre. Daraus ergeben sich dann andere Laufzeiten und somit
tritt unter Umständen das Problem, nach welchem man sucht, gar nicht
mehr auf.
Was ich meinte ist, dass eine Programm in C Debugger auf der realen
Hardware läuft, während das bei einem HDL Simulator nicht der Fall ist.
Es gibt durchaus Fälle, bei denen sich ein Design auf echter Hardware
anders verhält als in einem Simulator, auch wenn die Tools meinen, dass
das Timing stimmt. Bei so einfachen Designs wie diesem ist das
vermutlich eher nicht der Fall, bei großen komplexen Designs kann das
aber passieren. Und abgesehen davon kann man in einem Simulator vieles
nicht simulieren, zum Beispiel Hardware IP Blöcke.
59154 schrieb:> Es gibt durchaus Fälle, bei denen sich ein Design auf echter Hardware> anders verhält als in einem Simulator, auch wenn die Tools meinen, dass> das Timing stimmt. Bei so einfachen Designs wie diesem ist das> vermutlich eher nicht der Fall
Das hat mit der Größe und Vermutungen nichts zu tun: ich kann dir ein
ganz simples und einfaches Design zeigen, das tadellos simuliert, aber
in der Hardware laufend Probleme macht und irgendwie seltsames Verhalten
aufweist. Du musst nur ein asynchrones Signal nicht einsynchronisieren.
Es reicht schon aus, einen asynchronen Reset zu verwenden. Dann läuft
evtl. ein Teil des Designs jetzt los, und der Rest erst einen Takt
später. Das sind dann die Designs, die "manchmal nicht richtig
anlaufen", aber wenn sie mal laufen, dann tagelang ohne Probleme...
59154 schrieb:> Was ich meinte ist, dass eine Programm in C Debugger auf der realen> Hardware läuft, während das bei einem HDL Simulator nicht der Fall ist.
Was ich meinte, ist, dass der ERSTE Schritt für eine (Teil-)Komponente
in VHDL der Simulator ist. Klar kann man jetzt Pfennigfuchsen, ob der
Simulator jetzt genau dem Debugger entspricht oder nicht.
Es ist nur so, dass ohne lauffähigen Debugger auch Softwareentwicklung
unglaublich zäh und kompliziert ist. Und das selbe gilt für VHDL und den
Simulator.
Lothar Miller schrieb:> Es ist nur so, dass ohne lauffähigen Debugger auch Softwareentwicklung> unglaublich zäh und kompliziert ist. Und das selbe gilt für VHDL und den> Simulator.
Da kommts auch drauf an, wen du fragst. Wir haben hier auch so einen
"Wissenschaftler" am Institut, knapp über 60, promoviert. Der "braucht"
auch keinen Debugger, weil er ja alles im Kopf viel besser kann. Und
sowieso hat er ja schon jede Prozessor in ASM und C programmiert, da
reicht es, wenn man mal das Summary Sheet überfliegt. FPGA macht er
auch, aber alles in Schematic und Blindflug ohne Simulator. Er hat ja
einen LA und 5 Testpunkte.
Im Forum hier gibts ja auch jede Menge AVR Freaks, denen eine LED als
Debugger als völlig ausreichend erscheint.
Naja, was der Bauer nicht kennt, das isst er nicht.
Christian R. schrieb:> Er hat ja einen LA und 5 Testpunkte.
Man muss sich dazu zwingen, dann geht das schon...
> Im Forum hier gibts ja auch jede Menge AVR Freaks, denen eine LED als> Debugger als völlig ausreichend erscheint.
Habe ich jetzt gerade: ein ATtiny im 8 Pin Gehäuse, davon 6 IO. Ein
Tastereingang wird als Debugausgang verwendet. Das ist wirklich
beschwerlich... ;-)
> Da kommts auch drauf an, wen du fragst. Wir haben hier auch so einen> "Wissenschaftler" am Institut, knapp über 60, promoviert. Der "braucht"> auch keinen Debugger
Ich kenne auch das Gegenteil, da wurden von Praktikanten simpelste
Subkomponenten (Zähler) zu Tode simuliert, weil sie sich nicht an die
Hardware wagten, vor lauter Angst, etwas kaputt zu machen.
Lothar Miller schrieb:> Ich kenne auch das Gegenteil, da wurden von Praktikanten simpelste> Subkomponenten (Zähler) zu Tode simuliert, weil sie sich nicht an die> Hardware wagten, vor lauter Angst, etwas kaputt zu machen.
Die kenne ich auch. Das sind dann die, für die es immer die akademische
"Lösung" sein muss, als nächstes erzeugen die dann VHDL Code aus Matlab
Simulink Modellen. Solche gibts hier auch.
Lothar Miller schrieb:>> Er hat ja einen LA und 5 Testpunkte.> Man muss sich dazu zwingen, dann geht das schon...
Klar, für den allergrößten Notfall schon. Aber der simuliert ja auch
nix. Der sucht dann einfachste logische Fehler mit den Pins.
Sein schönster Spruch ist ja sowieso: "Ich hab nix geändert, daran
kann´s nicht liegen". Denn Versionskontrolle usw. ist ja auch
Teufelszeug.
Achja einen hab ich noch von dem Experten: "Bei mir gibts nur eine
Version und das ist die aktuelle".
Christian R. schrieb:> Sein schönster Spruch ist ja sowieso:> "Ich hab nix geändert, daran kann´s nicht liegen".> Achja einen hab ich noch von dem Experten:> "Bei mir gibts nur eine Version und das ist die aktuelle".
:-D
Lothar Miller schrieb:> Das hat mit der Größe und Vermutungen nichts zu tun: ich kann dir ein> ganz simples und einfaches Design zeigen, das tadellos simuliert, aber> in der Hardware laufend Probleme macht und irgendwie seltsames Verhalten> aufweist. Du musst nur ein asynchrones Signal nicht einsynchronisieren.
Das stimmt natürlich. Meiner Erfahrung nach häufen sich solche Probleme
bei größeren Designs aber eher. ^^
Lothar Miller schrieb:> Was ich meinte, ist, dass der ERSTE Schritt für eine (Teil-)Komponente> in VHDL der Simulator ist. Klar kann man jetzt Pfennigfuchsen, ob der> Simulator jetzt genau dem Debugger entspricht oder nicht.> Es ist nur so, dass ohne lauffähigen Debugger auch Softwareentwicklung> unglaublich zäh und kompliziert ist. Und das selbe gilt für VHDL und den> Simulator.
Da hast du natürlich recht, ein Simulator ist ein nützlicher erster
Schritt bei der Entwicklung eines HDL Designs, genau so wie ein Debugger
beim der Soiftware Entwicklung sehr nützlich ist. Dann habe ich dein...
> Der Simulator ist für VHDL das, was in C der Debugger> ist!
... wohl falsch verstanden. ;)