Forum: FPGA, VHDL & Co. Modelsym, fragen zum Compilieren / Editor


von Matze (Gast)


Lesenswert?

Hallo,

Ich möchte in VHDL einen Modulo 10 Zahler entwerfen.
Er soll beim Übertrag (Zählerstand 10) einen Ausgang setzen.

Problem ist nun dass Modelsym nicht richtig compiliert.

Wenn ich ihn meinen VHDL code compilieren lasse, bringt er in der 
Statuszeile den Fehler:
# Compile of count10.vhd failed with 1 errors.

Wenn ich dann darauf klicke zeigt er im extra Fenster 4 errors:
** Error: C:\Users\Ich\Desktop\Modelsym\count10\count10.vhd(16): near 
"'": syntax error
** Error: C:\Users\Ich\Desktop\Modelsym\count10\count10.vhd(18): near 
"IF": expecting THEN
** Error: C:\Users\Ich\Desktop\Modelsym\count10\count10.vhd(20): near 
"ELSE": expecting END
** Error: C:\Users\Ich\Desktop\Modelsym\count10\count10.vhd(21): near 
"'": syntax error

Da mein Code so aussieht:
1
library IEEE;
2
USE IEEE.STD_LOGIC_1164.all;
3
USE IEEE.std_logic_unsigned.all;
4
5
entity count10 is
6
Port (clk, enable, reset: IN STD_LOGIC;
7
      c10: out STD_LOGIC);
8
end count10;
9
10
architecture Behavorial of count10 is
11
signal ist,folge : std_logic_vector(3 downto 0);
12
signal folgec10 : std_logic;
13
BEGIN
14
  komb: PROCESS(ist, reset, enable) IS
15
  BEGIN
16
    IF (reset = '0') THEN folge <= '0000';
17
    ELSIF (enable = '1')
18
        IF (folge = '1001') THEN folge <= '0000';    
19
          folgec10 <= '1';
20
        ELSE folgec10<='0';
21
          folge <= ist + '0001';
22
        END IF;
23
      ELSE Folge <= ist;
24
    END IF;
25
  END PROCESS;
26
27
Hallo welt
28
End Process;
29
  
30
  speicher: PROCESS(clk) IS
31
  BEGIN
32
    IF rising_edge(clk) THEN ist <= folge;
33
    END IF;
34
  END PROCESS
35
36
  ausgabe: Process(folgec10, enable) IS
37
  BEGIN
38
  c10 <= folgec10;
39
  END PROCESS ausgabe;
40
END ARCHITECTURE Behavorial;

Und dort die worte "Hallo Welt" und das End PROCESS bestimmt nicht 
hereingehören.
Gehe ich davon aus das er etwas anderes compiliert.
Denn alle 4 errors sind in anderen Zeilen.

Nur warum?

Das erste mal als ich ihn verwendete stimmte die angezeigte Anzahl der 
Fehler in der Statuszeile mit der Anzahl der Fehler im dann angezeignten 
Fensterchen überein.



Als 2. frage ich mich wie ich Code gezielt in Modelsysm (in den Modelsym 
internen Editor) eingeben kann.
Das ist mir einmal gelungen, nur weiß ich nicht warum.
Wenn ich im Modelsym Projekt-Fenster auf meine datei Kliche wir sie 
immer im Windows-Editor geöffnet.

Dort sehe ich weder zeilenzahlen, noch habe ich Syntax highlighting
und muss immer mit mehreren Fenstern rumhantieren.
Dass macht die Sache nicht grade Leichter.

grüße
Matze

: Bearbeitet durch Moderator
von Klaus F. (kfalser)


Lesenswert?

Matze schrieb:
> IF (folge = '1001') THEN folge <= '0000';

versuchs mal mit
1
 IF (folge = "1001") THEN folge <= "0000";

Obwohl's natürlich lustig ist zu sehen welche verschrobenen Varianten 
sich Anfänger immer wieder einfallen lassen und man sich wundert, wo sie 
sich ihre Inspiration holen (das ist nicht böse gemeint), solltest Du 
deinen Zähler ein bisschen einfacher bauen.

In VHDL kannst Du z.B.
 - direkt mit Integer zählen
 - den Type "unsigned" oder "signed" aus der Library numeric_std 
verwenden.
Beide Lösungen sind sauberer.
Google einmal nach Beispielen zu numeric_std.

von Matze (Gast)


Lesenswert?

Das war es.

IF (folge = "1001") THEN folge <= "0000";

Bei Bitfolgen müssen "" verwendet werden.
Dann werden auch die anderen Fehler erkant.

Diese Variante zum zählen habe ich von einem Beispiel unseres Profs 
übernommen.

Wir int währe es schon deutlich einfacher :)

Der Code lässt sich im Modelsym-Editor öffnen indem er mit File->Open 
geöffnet wird :)

Danke für die hilfe.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Matze schrieb:
> Diese Variante zum zählen habe ich von einem Beispiel unseres Profs
> übernommen.
Hier haben wir die Wurzel allen Übels gefunden. Dieser Beschreibungsstil 
ist aus dem frühen letzten Jahrtausend und deshalb unglaublich 
ausschweifend. So kommt VHDL zum Ruf, eine "geschwätzige" 
Beschreibungssprache zu sein...

> Modelsym
Lies mal den Titel auf dem Umschlag des Handbuchs deines Simulators. Das 
hier sieht aus wie "Seytenschneyder" oder "Kneyfzange"...

> Denn alle 4 errors sind in anderen Zeilen.
Dann beheb einfach mal den ersten der Fehler, die dir der Simulator um 
den Latz knallt. Evtl. wirds dem nach den ersten 4 Fehlern einfach zu 
dumm. Und es hilft ja auch nicht, in der Zeile 23875 einen Fehler 
anzumotzen, nachdem noch nicht mal der Fehler in der Zeile 19 behoben 
ist.

> Da mein Code so aussieht:
Mach da mal die Tags [ vhdl ] und [ /vhdl ] ohne die Leerzeichen 
drumrum, dann wird der Code hübsch gehighlight.

Diesen Codeabschnitt (bei dem das Signal enable nicht in die 
Sensitivliste gehört) ...
1
  ausgabe: Process(folgec10, enable) IS
2
  BEGIN
3
  c10 <= folgec10;
4
  END PROCESS ausgabe;
... kannst du ohne jegliche Funktionseinschränkung und ohne Rüffel vom 
Prof durch diese Concurrent-Beschreibung ersetzen:
1
  c10 <= folgec10;

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.