Forum: FPGA, VHDL & Co. Debug-Modus für VHDL/Abel?


von Full W. (realjey)


Lesenswert?

Hallo,

ich versuche gerade den CPLD-Code (leider noch in Abel geschrieben) 
eines ehemaligen Kollegen zu verstehen. Dafür müsste ich teils genau 
wissen, was nach bestimmten Befehlen im Speicher liegt. Gibt es die 
Möglichkeit, wie z.B. bei C++, sich die genauen Speicherinhalte (zu 
bestimmten Variablen) anzeigen zu lassen? Ich benutze das Webpack in der 
Version 10.1 von Xilinx.

Thx

von Fpgakuechle K. (Gast)


Lesenswert?

Julian Gerhard schrieb:
> Hallo,
>
> ich versuche gerade den CPLD-Code (leider noch in Abel geschrieben)
> eines ehemaligen Kollegen zu verstehen. Dafür müsste ich teils genau
> wissen, was nach bestimmten Befehlen im Speicher liegt. Gibt es die
> Möglichkeit, wie z.B. bei C++, sich die genauen Speicherinhalte (zu
> bestimmten Variablen) anzeigen zu lassen? Ich benutze das Webpack in der
> Version 10.1 von Xilinx.
>
> Thx

Modelsim mit einer nach VHDL/Verilog backannotierten Netzliste?!

von Full W. (realjey)


Lesenswert?

Kann ich denn den Abel-Code in Modelsim testen?

Fpga Kuechle schrieb:
> Modelsim mit einer nach VHDL/Verilog backannotierten Netzliste?!

was meinst du genau damit? geht bitte davon aus, dass ich der totale 
Anfänger bin :)

von Fpgakuechle K. (Gast)


Lesenswert?

Jey Soon schrieb:
> Kann ich denn den Abel-Code in Modelsim testen?
>
> Fpga Kuechle schrieb:
>> Modelsim mit einer nach VHDL/Verilog backannotierten Netzliste?!
>
> was meinst du genau damit? geht bitte davon aus, dass ich der totale
> Anfänger bin :)

Nein -ja.

Modelsim kann kein Abel, aber du kannst dein in Abel modellierte Design 
mit modelsim simulieren. Aber zuerst, es ist absolut notwendig FPGA 
entwicklung nicht mit C-programmierung zu verwechseln. Es gibt keinen 
debug-Mode, es wird simuliert. Und was in C Variablen sind in FPGA 
Speicherzustände, z.B. FlipFlop.

Um den Abel-code mit dem Quasi-Standard Simulator modelsim zu 
simulieren, synthetisierts du aus dem Abel code eine netzliste 
(Verdrahtung der CPLD internen Elemente). Diese Netzliste kann wieder 
nach VHDL umgewandelt werden (backannotiert) und dann mit modelsim (der 
nur VHDL,Verilog oder systemC(?) kann) simuliert.

KlickKlack Anleitung hier:
http://www.kxcad.net/electronic_Xilinx_guide/mergedProjects/cpldnew/html/cf_design_flow_tutorials.htm

MfG,

von Mathi (Gast)


Lesenswert?

Beim edaboard gibt es einen ABEL nach VHDL Compiler.
Habe ihn selber noch nicht ausprobiert.
http://www.edaboard.com/ftopic55558.html

von Full W. (realjey)


Lesenswert?

@ Kuechle OK, vielen Dank für den Link, werde ich mir mal aufmerksam 
durchlesen.

Kurze weiterführende Frage...

was macht folgender Abel-Code:


MODULE test

    CLK pin 5;
    S0 pin 11;
    ![L0..L3] pin 33, 34, 35, 36;
    [Q22..Q0] node istype 'reg';

    Counter = [Q22..Q0]; //was passiert hier genau

  EQUATIONS

    Counter.CLK = CLK; //was passiert hier genau
    Counter := Counter + 1;

    [L0..L3] = [Q22..Q19]; //was passiert hier genau

END


Ausserdem: Kann mir jemand ein Buch oder eine Homepage zur Abel-Sprache 
empfehlen? Bin über google nicht wirklich fündig geworden.

MfG

von Andreas (Gast)


Lesenswert?

Hallo Jey Soon,

also zu deinem Code:

>Counter = [Q22..Q0]; //was passiert hier genau
Definiert ein 23Bit langes Signal Q22 (MSB) / Q0 (LSB)

>Counter.CLK = CLK; //was passiert hier genau
Counter soll ein geclocktes Element sein. Der Clockeingang fuer Counter 
ist Signal CLK.

>Counter := Counter + 1;
Counter(.D) ist gleich Counter(.Q) + 1; also ein Upcounter

> [L0..L3] = [Q22..Q19]; //was passiert hier genau
Die obersten 4 Bits deines Counters werden den Signalen L0 bis L3 
zugewiesen (kombinatorisch), die Reihenfolge wird umgedreht: Q22->l0; 
Q19 -> Q19

Ende der Zauberei

Gruss

von Andreas (Gast)


Lesenswert?

Einen hab ich noch deine Pins L0 bis L3 sind Low-Aktiv -> ein High auf 
Q22 wird zu einem Low auf L0...

von Rudolph (Gast)


Lesenswert?

Jey Soon schrieb:
> Ausserdem: Kann mir jemand ein Buch oder eine Homepage zur Abel-Sprache
> empfehlen? Bin über google nicht wirklich fündig geworden.

Es gibt http://de.wikipedia.org/wiki/Advanced_Boolean_Equation_Language 
mit Link. Xilinx hat in der ISE-Hilfe eine ABEL-Dokumentation, siehe 
http://www.xilinx.com/support/answers/10786.htm.

von Full W. (realjey)


Lesenswert?

Merci @All

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Beitrag "ABEL programmieren"
das PDF von Lattice gibts immer noch.

von Full W. (realjey)


Lesenswert?

noch sone Frage:

[Q22..Q0] node istype 'reg';

=> deklariert mir ein 23Bit-langes (nur intern verwendetes) Register, 
soweit so gut...

Q23 node istype 'reg'

=> deklariert mir ein Register, aber wie "lang" ist dieses Register???

von KAIN_UND_ABEL (Gast)


Lesenswert?

Na ich würde sagen genau ein Bit!

von Full W. (realjey)


Lesenswert?

und noch sone Frage:

when Command1 == 0 then itime[3..0]:= [DATA3,DATA2,DATA1,DATA0];
  else itime[3..0]:=itime[3..0].FB;

was bedeutet die extention ".FB"? Konnte nur "Register Feedback" als 
Erklärung finden und kann damit nichts anfangen...

THX

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Auch die AVR haben einen PIN und PORT, das eine ist das was ausgegeben 
wurde und im Ausgaberegister steht, das andere der tatsächliche Zustand 
des Ausgangs, der könnte ja auch von außen auf GND gezogen sein. Daher 
.FB wie Feedback des Registerausgangs auf die AND/OR-Matrix und .PIN für 
den tatsächlichen Pin-Zustand.

von Full W. (realjey)


Lesenswert?

Thx Christoph,

allerdings verstehe ich deine Aussage nicht^^ Kannst du das nochmal für 
nen Anfänger erklären. Es dreht sich hier übrigens um einen CPLD der 
Marke Xilinx und die Programmiersprache Abel nicht um AVR.

THX

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

http://www.latticesemi.com/lit/docs/manuals/abel_ref.pdf  auf Seite 79 
sind diese .FB und .PIN erklärt.
.FB ist der Logikpegel den der Port eigentlich haben sollte und der 
intern auch so ansteht,
.PIN ist der tatsächliche Pegel am Pin, auch wenn er von außen auf low 
gezogen ist obwohl er intern high sein sollte.
Es hängt wie hier auch beschrieben ist, vom CPLD ab, ob diese 
Möglichkeiten überhaupt gegenben sind.

von Full W. (realjey)


Lesenswert?

Ah ok,
dann denke verstehe ich's jetzt:

when Command1 == 0 then itime[3..0]:= [DATA3,DATA2,DATA1,DATA0];
  else itime[3..0]:=itime[3..0].FB;

Command1 wird ein paar Zeilen vorher gesetzt, und zwar ist Command1=0 
wenn bestimmte Pins den richtigten Pegel haben (Quasi ne Abfrage ob die 
Daten die anliegen auch wirklich dem gewünschten Register (iTime) 
zugewiesen werden können). Das bedeutet quasi einfach nur: Liegen nicht 
die Richtigen Daten/Pegel am CPLD an, fülle das Register mit den 
internen Defaultwerten für dieses Register, richtig?

Allerdings verstehe ich dann nicht so recht, durch was diese 
Defaulwerte/Pegel definiert sind, kann diese der Programmierer selbst 
festlegen? ODer sind diese durch den Typ des CPLD festgelegt. Ich habe 
z.B. folgende Zeilen in dem Code:

XILINX property 'INIT=S itime0';
XILINX property 'INIT=S itime1';
XILINX property 'INIT=R itime2';
XILINX property 'INIT=R itime3';
XILINX property 'INIT=R itime4';
XILINX property 'INIT=S itime5';
XILINX property 'INIT=S itime6';
XILINX property 'INIT=R itime7';

Sind das die Defaultpegel, die bei .FB angenommen werden?

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.