Fehler in ADEL Code

OP #7397207
Lesenswert?

Hallo zusammen!

Ich habe die Ehre erhalten, in einem ca. 15 Jahre alten CPLD Projekt "nur" einen Wert ändern zu müssen. Natürlich ist der ehemalige Entwickler schon lange aus der Firma ausgeschieden und nicht mehr greifbar.

Beim Versuch, ob es überhaupt noch möglich ist, das alte CPLD Projekt zu übersetzen, bekomme ich vom Synthezier gleich zwei Fehlermeldungen, mit denen ich als VHDL Entwickler nicht viel anfangen kann. Vielleicht gibt es ja hier Jemanden, der mal mit ADEL gearbeitet hat.

Als Entwicklungsumgebung steht mir Xilinx Foundation 3.1i zur Verfügung.

  1. Fehlermeldung
1
TS1..TS6    node istype `keep,buffer,reg_d`;  "Softstarttimerbits
2

3
SCHALTER  STATE_REGISTER;
4

5
Softstart = [TS6..TS1];
6

7
BETRIEB    STATE IN SCHALTER;
8

9
Softstart.AR = !BETRIEB.Q;
10
" Error   L263/C31 : Warning 1124: 'INVERT' or 'BUFFER' not specified for 'BETRIEB' - assuming 'BUFFER'.
  1. Fehlermeldung
1
UVE      pin 116      istype `invert,reg_rs`;
2
ANZ1..ANZ4    pin 126,131,135,58  istype `invert,reg_rs`;  "Anzeigebits
3
ANZ5..ANZ8    pin 140,62,65,36  istype `invert,reg_rs`;  "Anzeigebits
4

5
ANZA    = [ANZ1.S,ANZ1.R];
6
ANZB    = [ANZ2.S,ANZ2.R];
7
ANZC    = [ANZ3.S,ANZ3.R];
8
ANZD    = [ANZ4.S,ANZ4.R];
9
ANZE    = [ANZ5.S,ANZ5.R];
10
ANZF    = [ANZ6.S,ANZ6.R];
11
ANZG    = [ANZ7.S,ANZ7.R];
12

13
Anzeige    = [ANZA,ANZB,ANZC,ANZD,ANZE,ANZF,ANZG];
14

15
Anzeige = [Off,Off,On,On,On,Off,Off] & UVE.Q;
16
" Error   L439/C49 : Syntax Error 1060: Can't map set onto a different sized set.

Besten Dank schon mal, wenn mir jemand helfrn kann.

Mit freundlichen Grüßen supersonic

OP #7397272
Lesenswert?

Du hast mit ABEL natürlich recht. Ich sollte mich beim Schreiben eines Beitrages nicht immer ablenken lassen. ;-)

Ich war der Meinung, alle wesentlichen Zeilen des Codes angegeben zu haben, da die anderen Signale davon unabhängig sind (sein sollten). Was eventuell fehlt sind die Sektionsangaben. Ich hoffe, dass es diesmal nun verständlicher ist. Ansonsten habe ich die komplette ABEL Datei als Anhang beigefügt.

1
TS1..TS6    node istype `keep,buffer,reg_d`;  "Softstarttimerbits
2

3
SCHALTER  STATE_REGISTER;
4

5
Softstart = [TS6..TS1];
6

7
BETRIEB    STATE IN SCHALTER;
8

9
equations
10

11
Softstart.AR = !BETRIEB.Q;
12
" Error   L263/C31 : Warning 1124: 'INVERT' or 'BUFFER' not specified for 'BETRIEB' - assuming 'BUFFER'.
1
UVE      pin 116      istype `invert,reg_rs`;
2
ANZ1..ANZ4    pin 126,131,135,58  istype `invert,reg_rs`;  "Anzeigebits
3
ANZ5..ANZ8    pin 140,62,65,36  istype `invert,reg_rs`;  "Anzeigebits
4

5
ANZA    = [ANZ1.S,ANZ1.R];
6
ANZB    = [ANZ2.S,ANZ2.R];
7
ANZC    = [ANZ3.S,ANZ3.R];
8
ANZD    = [ANZ4.S,ANZ4.R];
9
ANZE    = [ANZ5.S,ANZ5.R];
10
ANZF    = [ANZ6.S,ANZ6.R];
11
ANZG    = [ANZ7.S,ANZ7.R];
12

13
Anzeige    = [ANZA,ANZB,ANZC,ANZD,ANZE,ANZF,ANZG];
14

15
equations
16

17
Anzeige = [Off,Off,On,On,On,Off,Off] & UVE.Q;
18
" Error   L439/C49 : Syntax Error 1060: Can't map set onto a different sized set.

supersonic

Angehängte Dateien:
#7397306
Lesenswert?

Andras H. schrieb:

Ist das wirklich ein Error?

Nein, ein Warning. Das wird nur von der IDE so gehandhabt dass es gemeldet werden kann. Sollte man aber beheben so wie in C Warnings oft ernst zu nehmen sind.

R. R. schrieb:

fbs88_21.abl

Ich bekomme beim Compilieren die gleichen Meldungen. Es wäre hilfreich auch den Zielbaustein zu kennen. Ferner gibt es vielleicht noch eim Constraints File?

Offensichtlich ist das nicht das Original das sich mal fehlerfrei synthetisieren liess. Aktuell verstehe ich nicht was der Autor mit der Zeile

Anzeige = [Off,Off,On,On,On,Off,Off] & UVE.Q;

bezwecken will.

#7397310
Lesenswert?

Wastl schrieb:

Offensichtlich ist das nicht das Original das sich mal fehlerfrei synthetisieren liess. Aktuell verstehe ich nicht was der Autor mit der Zeile

Scheint mir auch so. Versuche die Original Files zu finden. Wenn die es noch zu finden gibt. Sonst hast du das Problem, dass wenn es sich synthetisieren lässt dass es eventuell doch noch alte Bug beinhaltet.

Anzeige = [Off,Off,On,On,On,Off,Off] & UVE.Q; Ich kenne mich zwar mit ABEL nicht aus, aber so wie ich das sehe, ist das links eine Array, und rechts nur 1 bit. Wie soll dass denn gehen? Jede element mit UVE.Q verodern? Das würde vermutlich gehen. vielleicht braucht der tool dann das in eine andere Form? Anzeige = [Off,Off,On,On,On,Off,Off] & [UVE.Q,UVE.Q,UVE.Q,UVE.Q,UVE.Q,UVE.Q,UVE.Q]; Es konnte auch sein dass du mit einer anderer Toolversion das versuchen sollt. Vielleicht hat man die Sprache über die Jahre geändert.

Gast #7397373
Lesenswert?

Wastl schrieb:

Du meinst also die aktuellen Syntax Fehler werden in ein entsprechendes VHDL-Konstukt umgewandelt? Oder sogar ausgebügelt?

??? zu deppern das TO-Posts zu lesen??? "...mit denen ich als VHDL Entwickler..."

Und den Unterschied zwischen einem Syntax- und einem Synthese-fehler kennt man auch nicht? Wer hat denn Dich hier reingelassen?!

#7397393
Lesenswert?

R. R. schrieb:

1
Anzeige = [Off,Off,On,On,On,Off,Off] & UVE.Q;  "Unterspannung Eingang (u)
2
Anzeige = [Off,Off,On,On,On,Off,On] & !UVE.Q & OVE.Q;"Überspannung Eingang (o)
3
Anzeige = [Off,Off,Off,On,On,On,On] & !UVE.Q & !OVE.Q & OT2.Q; "Übertemperatur (t)
4
Anzeige = [Off,On,On,On,On,On,Off] & !UVE.Q & !OVE.Q & !OT2.Q & UVO.Q; "Unterspannung Ausgang (U)
5
Anzeige = [On,On,On,On,On,On,Off] & !UVE.Q & !OVE.Q & !OT2.Q & !UVO.Q;  "NULL (0)
6
IF  !FLT & !UVE.Q & !OVE.Q & !OVOv.Q & !OCE.Q & !OT2.Q & START & (KANAL == 3)  THEN HOCHL ELSE RUHE;

Ich kann kein ABEL, aber das ist doch offensichtlich die Ansteuerung einer 7-Segment-Anzeige mit den einzelnen Segmenten a-f in den eckigen Klammern? Entsprechend des Zustands der Bits UVE.Q, OVE.Q, OT2.Q und UVO.Q wird "u", "o", "t", "U", "0" oder eben nichts angezeigt.

OP #7397615
Lesenswert?

Andras H. schrieb:

Wastl schrieb:

Offensichtlich ist das nicht das Original das sich mal fehlerfrei synthetisieren liess. Aktuell verstehe ich nicht was der Autor mit der Zeile

Scheint mir auch so. Versuche die Original Files zu finden. Wenn die es noch zu finden gibt. Sonst hast du das Problem, dass wenn es sich synthetisieren lässt dass es eventuell doch noch alte Bug beinhaltet.

Alle mir vorliegenden Dateien sind die Originaldateien

Es konnte auch sein dass du mit einer anderer Toolversion das versuchen sollt. Vielleicht hat man die Sprache über die Jahre geändert.

Das kann sein, denn der Originalentwicklungsrechner ist (natürlich) nicht mehr vorhanden. Ich habe dieses Projekt erhalten, weil ich noch eine alte Xilinx Foundation 3.1i für ein altes FPGA Projekt, mit VHDL Code, zur Verfügung habe.

Nur mit ABEL kenne ich mich auch nicht aus.

OP #7397619
Lesenswert?

Markus F. schrieb:

Ich kann kein ABEL, aber das ist doch offensichtlich die Ansteuerung einer 7-Segment-Anzeige mit den einzelnen Segmenten a-f in den eckigen Klammern? Entsprechend des Zustands der Bits UVE.Q, OVE.Q, OT2.Q und UVO.Q wird "u", "o", "t", "U", "0" oder eben nichts angezeigt.

Richtige Annahme. Ist offensichtlich ein Arry von Bits, das dann auf die entsprechenden Ausgangspins gelegt wird. Und der Inhalt des Bitarrays soll der Ausgabewert sein.

So viel zur Theorie. Jetzt fehlt mir nur die Lösung der beiden Fehler. ;-)

Gast #7397627
Lesenswert?

Alle mir vorliegenden Dateien sind die Originaldateien

Wahrscheinlich ist der Satz der dir vorliegt, respektive den du hier präsentierst, unvollständig. Wie oben bereits geschrieben, fehlt wohl das constraint file und oft wird so ne CPLD über ein script gesteuert, die mglw. die command line options so setzt, sodas der vorgebliche Fehler nicht auftaucht. bei modernen tools wäre so ein compileschalter beps. der für die verscghiedenen VHDL-Standards. Projektdatei wäre auch noch so ein fehlender Kanditat.

Es konnte auch sein dass du mit einer anderer Toolversion das versuchen sollt. Vielleicht hat man die Sprache über die Jahre geändert.

Das kann sein, denn der Originalentwicklungsrechner ist (natürlich) nicht mehr vorhanden.

Dann wirste wohl alles aus der Hardwarespec entnehmen müssen statt die verschollenen Sourcen zu reverse enginerren. Also schnapp dir ne Hardware, schreib den IC-Code ab und poste den hier, grobe schaltungsbeschreibung wäre auch nicht schlecht. Und mit diesen Erkenntnissen sollte man eine komplette ISE toolchain für den CPLD auf VHDL aufsetzen.

Dann convertier das Ganze doch nach VHDL wenn du ABEL nicht korrekt buchstabieren kannst. Konvertieren ist absolut verboten!

Jede grundlegende(!) Änderung würde einen riesigen Zulassungsprozess anstoßen. Eine Parameteränderung darf gerade noch so gemacht werden.

Dann konvertier es trotzdem, aber verwende den VHDL-Code nicht für die Entwicklung sondern nur damit du verstehst/simulierst was der ABEL-Code machen könnte. Und wenn tatsächliche Änderung verboten ist, dann musste halt ne Änderung drumherum bauen, bspw mit nem 74* gatter.

Und dann wäre noch der Äquivalenzcheck als Möglichkeit. Überleg dir ein testsetting, wo die geänderte Variante parallel zu unveränderten alten läuft und teste automatisiert auf Verhaltensunterschiede. So kann man auch eine komplette Neu-zertifizierung umgehen. Aber ich glaube immer mehr, das du als VHDL-Programmierer nicht der richtige Mann dafür bist. Ein Hardware-entwickler old school scheint mir da geeigneter, schau mal nach Freiberufler/Ingenieurbüro o.ä..

#7397632
Lesenswert?

R. R. schrieb:

Markus F. schrieb:

Ich kann kein ABEL, aber das ist doch offensichtlich die Ansteuerung einer 7-Segment-Anzeige mit den einzelnen Segmenten a-f in den eckigen Klammern? Entsprechend des Zustands der Bits UVE.Q, OVE.Q, OT2.Q und UVO.Q wird "u", "o", "t", "U", "0" oder eben nichts angezeigt.

Richtige Annahme. Ist offensichtlich ein Arry von Bits, das dann auf die entsprechenden Ausgangspins gelegt wird. Und der Inhalt des Bitarrays soll der Ausgabewert sein.

So viel zur Theorie. Jetzt fehlt mir nur die Lösung der beiden Fehler. ;-)

Dann ist IMHO die Vorgehensweise, die Syntaxfehler fixen zu wollen, wahrscheinlich die falsche. Nachdem wir sehen, dass der Code einigermassen sinnvoll erscheint, ist es unwahrscheinlich, dass die auf irgendwelche Änderungen im Quellcode zurückzuführen sind. Also hast Du wahrscheinlich das falsche ABEL-Tool. Selbst wenn Du so umschreibst, dass deine Version die Logik frisst, weisst Du nicht, ob die nicht auch noch woanders Dinge anders macht als die richtige - dann könntest Du auch gleich neu schreiben. M.E. musst Du, statt zu versuchen den Code zu ändern, erst nach einem ABEL-Tool suchen, das das Original frisst.

Gast #7397634
Lesenswert?

Anbei der design/file-flow für ABVEL unter Xilinx. Schau, das du an alle Original-files bekommst, interessant sind auch report-files von damals. Wenn du nicht ABEL ändern willst, geht es mit den richtigen tools u.U. auch an einem generierten file.

Hat man bspw für FPGA's schon per fpga-editor direct man geroutetetn *ncd-file gemacht (Lookup-table auf negiert geändert). bei (dokumentierten) PLD's gehts u.U auch per Hexeditor.

"nur" einen Wert ändern zu müssen

Was für eine Änderung konkret? Inverter einbauen? Eingang fest auf irgendwas klemmen? ...

PS: den src-Ersteller D.B. kann man lt. xing in berlin finden ...

Angehängte Dateien:
#7397656
Lesenswert?

R. R. schrieb:

Das kann sein, denn der Originalentwicklungsrechner ist (natürlich) nicht mehr vorhanden. Ich habe dieses Projekt erhalten, weil ich noch eine alte Xilinx Foundation 3.1i für ein altes FPGA Projekt, mit VHDL Code, zur Verfügung habe.

Hast du schon in den Zulassungsunterlagen nachgesehen ob dort steht welches Tool und Version eingesetzt wurde? In unseren Entwicklungsplänen für den Kunden müssen wir auch Tools und deren Versionen angeben.

Da es damals versäumt wurde, sicher zu stellen, dass die Entwicklungsumgebung auch archiviert werden kann, bzw. mindestens Dokumentiert ist wäre es jetzt eine Gelegenheit, die Tools in einer Virtuellen Maschine (VM) zu installieren. 1. Bessere chancen das es läuft, da du auch ein passend altes Betriessystem z. B. Windows 2000 nutzen kannst, 2. kannst du dann die VM abglegen und archivieren.

OP #7397714
Lesenswert?

DSGV-Violator schrieb:

Hat man bspw für FPGA's schon per fpga-editor direct man geroutetetn *ncd-file gemacht (Lookup-table auf negiert geändert). bei (dokumentierten) PLD's gehts u.U auch per Hexeditor.

Wäre eine Idee!

Was für eine Änderung konkret? Inverter einbauen? Eingang fest auf irgendwas klemmen? ...

Den fixen Vergleichswert für einen Digitalwert anpassen.

PS: den src-Ersteller D.B. kann man lt. xing in berlin finden ...

Dann werde ich mal den Projektleiter darauf ansetzen. Der darf auch was für sein Geld machen. ;-)

OP #7397722
Lesenswert?

Christoph Z. schrieb:

Hast du schon in den Zulassungsunterlagen nachgesehen ob dort steht welches Tool und Version eingesetzt wurde? In unseren Entwicklungsplänen für den Kunden müssen wir auch Tools und deren Versionen angeben.

Alles, was noch vorhanden ist, habe ich (angeblich) bekommen. Das war damals noch eine andere Firma, die dann mit unserer fusioniert wurde. Die hatten anscheinend, entweder andere Ansprüche bzgl. Dokumentation, als wir oder bei der Fusionierung ging einiges verloren. Nicht nur Personal.

Da es damals versäumt wurde, sicher zu stellen, dass die Entwicklungsumgebung auch archiviert werden kann, bzw. mindestens Dokumentiert ist wäre es jetzt eine Gelegenheit, die Tools in einer Virtuellen Maschine (VM) zu installieren. 1. Bessere chancen das es läuft, da du auch ein passend altes Betriessystem z. B. Windows 2000 nutzen kannst, 2. kannst du dann die VM abglegen und archivieren.

Das ist bereits meine Entwicklungsumgebung, da ich das ja auch für das, weniger, alte FPGA Projekt aus unserem (alten) Hause verwende.

Gast #7397800
Lesenswert?

R. R. schrieb:

. bei

(dokumentierten) PLD's gehts u.U auch per Hexeditor.

Wäre eine Idee!

Was ist es den für ein PLD? Ich tippe auf XC95-Familie. Das könnte übrigens ein Grund für die messages sein, falschen typ angegeben beim Tool-aufruf. Im Abel steht der typ jedenfalls nicht, man könnte aber anhand der Pin-Anzahl raten (XC95216 im HQFP mit 208 Pins vielleicht?). Dann bleibt aber auch die Frage ob *XL, *XV oder nur XC9500.

Was für eine Änderung konkret? Inverter einbauen? Eingang fest auf irgendwas klemmen? ...

Den fixen Vergleichswert für einen Digitalwert anpassen.

Das ist schon etwas Anspruchsvoller, da muss man wohl mehrere Zellen "drehen". An die Möglichkeit, statt dem vergleichswert den eingehenden Wert vor dem PLD anzupassen habt ihr sicher schon gedacht?! Wenns über einem ADU vom Sensor kommt könnte man auch daran denken den Sensorwert an die alte vergleichsschwelle anzupassen (Verstärkung/spannungsteiler zwischen Sensor und ADU.

PS: den src-Ersteller D.B. kann man lt. xing in berlin finden ...

Dann werde ich mal den Projektleiter darauf ansetzen. Der darf auch was für sein Geld machen. ;-)

Wenns eine Leiterin ist, wird wohl billiger, man weiß ja Berlin ist arm aber sexy ;-)

OP #7397833
Lesenswert?

DSGV-Violator schrieb:

Was ist es den für ein PLD? Ich tippe auf XC95-Familie. Das könnte übrigens ein Grund für die messages sein, falschen typ angegeben beim Tool-aufruf. Im Abel steht der typ jedenfalls nicht, man könnte aber anhand der Pin-Anzahl raten (XC95216 im HQFP mit 208 Pins vielleicht?). Dann bleibt aber auch die Frage ob *XL, *XV oder nur XC9500.

Gut getippt! Laut Schaltplan "nur XC9500".

Den fixen Vergleichswert für einen Digitalwert anpassen.

Das ist schon etwas Anspruchsvoller, da muss man wohl mehrere Zellen "drehen". An die Möglichkeit, statt dem vergleichswert den eingehenden Wert vor dem PLD anzupassen habt ihr sicher schon gedacht?! Wenns über einem ADU vom Sensor kommt könnte man auch daran denken den Sensorwert an die alte vergleichsschwelle anzupassen (Verstärkung/spannungsteiler zwischen Sensor und ADU.

Da müssten komplett neue Platinen erstellt werden. Viel zu teuer, zu aufwändig und würde wieder einen kompletten Zulassungsprozess in Gang setzen. Umprogrammierung des CPLD ist der einzig zulässige Weg.

Allerdings habe ich zumindest für den 2. Fehler eine Lösung gefunden. Inklusive einer qualitativen Verbesserung des ABEL Codes, ohne gleichzeitig an der Funktionalität zu drehen.

OP #7397873
Lesenswert?

So, Fehler 2 gelöst und gleich noch Redundanzen entfernt.

Statt

1
Anzeige    = [ANZA,ANZB,ANZC,ANZD,ANZE,ANZF,ANZG];
2

3
Anzeige = [On,On,On,On,On,On,Off] & !UVE.Q & !OVE.Q & !OT2.Q & !UVO.Q;  "NULL (0)

Sieht es jetzt so aus

1
Anzeige    = [ANZA,ANZB,ANZC,ANZD,ANZE,ANZF,ANZG];
2
AnzMsk0   = [On,On,On,On,On,On,Off];  "Bitarray: (0)
3

4
Anzeige = AnzMsk0 & !UVE.Q & !OVE.Q & !OT2.Q & !UVO.Q;    "NULL (0)

Damit sind diese Syntaxfehler schon mal entfernt. Die Logikoperationen sind die Bedingungen, bei denen dieser Anzeigewert aktiv wird, wenn das logische Ergebnis '1' ist.

Redundanzen entfernt heißt, dass diese Art der Zuweisung für die 7 Segmentanzeige mehrfach im Sourcecode vorkommt und einige Bitmuster (= Anzeigewerte) öfters verwendet werden. Müsste man einen Anzeigewert verändern, so erfolgt das jetzt einmal, an der Stelle der Definition, und nicht mehrfach, verteilt im Code.

Bleibt noch Fehler 1.

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