www.mikrocontroller.net

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


Autor: full well (realjey)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fpga Kuechle (fpgakuechle) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?!

Autor: full well (realjey)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Fpga Kuechle (fpgakuechle) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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/merge...

MfG,

Autor: Mathi (Gast)
Datum:

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

Autor: full well (realjey)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas (Gast)
Datum:

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

Autor: Rudolph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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_Equa... 
mit Link. Xilinx hat in der ISE-Hilfe eine ABEL-Dokumentation, siehe 
http://www.xilinx.com/support/answers/10786.htm.

Autor: full well (realjey)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Merci @All

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beitrag "ABEL programmieren"
das PDF von Lattice gibts immer noch.

Autor: full well (realjey)
Datum:

Bewertung
0 lesenswert
nicht 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???

Autor: KAIN_UND_ABEL (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na ich würde sagen genau ein Bit!

Autor: full well (realjey)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: full well (realjey)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: full well (realjey)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.