Debug-Modus für VHDL/Abel?

#1706336
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
Gast #1706788
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?!
Gast #1708103
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,
#1708600
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
Gast #1708645
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
#1768546
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.
#1768630
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren