2016-06-14 5 views
-1

Dieser Code ist für einen PRBS (Pseudo-Random Binary Sequence) -Empfänger. es soll drei Werte annehmen und einen PRBS-Generator simulieren und die erhaltenen Werte mit den erzeugten Werten überprüfen. Aber der Code-Fehler für Schlüsselwörter zeigt wie die beginnen, sind bereits vorhandenvhdl Fehlercode 10500 für bereits vorhandene Schlüsselwörter

library ieee; 
    use ieee.std_logic_1164.all; 
    use ieee. std_logic_arith.all; 
    use ieee. std_logic_unsigned.all; 

    entity receiver is 
    port(
     inp : in std_logic; 
     clock : in std_logic; 
     count : out std_logic_vector(4 downto 0); 
     check : out std_logic); 
    end receiver; 

    architecture rec of receiver is 
    signal P : std_logic_vector(2 downto 0); 
    signal O : std_logic_vector(2 downto 0); 

    process (clock) 
     variable cnt : integer range 0 to 3; 
     begin 
      if clock'event and clock='1' then 
       P <= inp & P(2 downto 1); 
       cnt<=cnt+1; 
      end if; 
      if (cnt = 3) then 
       O<=P; 
       elseif (cnt >3) 
       O <= inp & O(2 downto 1); 
      end if; 
      if((O(2) xor O(0)) = P(0)) 
       check <= '0'; 
      else 
       check <= '1'; 
       count <= count +1; 
      end if; 
     end process; 
    end rec; 

Fehler (10500): VHDL Syntaxfehler bei receiver.vhd (18) in der Nähe von Text "Prozess"; erwartet "begin" oder eine Deklarationsanweisung

Fehler (10500): VHDL Syntaxfehler bei receiver.vhd (21) in der Nähe von Text "if"; "end" oder "(" oder eine Kennung ("if" ist ein reserviertes Schlüsselwort) oder eine gleichzeitige Anweisung

Error (10500): VHDL-Syntaxfehler bei receiver.vhd (21) next text "und "; erwartet" (", oder" '"oder". "

Fehler (10500): VHDL-Syntaxfehler bei receiver.vhd (24) in der Nähe von Text" if "; erwartet"; "oder eine Kennung ("if" ist ein reservierter keyword) oder "Architektur"

error (10500): VHDL Syntaxfehler bei receiver.vhd (25) in der Nähe von text "dann"; erwartet "< ="

error (10500): VHDL-Syntaxfehler bei receiver.vhd (28) nahe Text "O"; erwartet "(" oder "'", oder "."

Fehler (10500): VHDL-Syntaxfehler bei receiver.vhd (29) in der Nähe von Text "if"; erwartet ";" oder eine Kennung ("if "ist ein reserviertes Schlüsselwort), oder "Architektur"

error (10500): VHDL Syntaxfehler bei receiver.vhd (31) in der Nähe von text "check"; erwartet" < =“

error (10500): VHDL-Syntaxfehler bei receiver.vhd (32) in der Nähe von Text "else"; erwartet "end" oder "(" oder eine Kennung ("else" ist ein reserviertes Schlüsselwort) oder eine gleichzeitige Anweisung

Fehler (10500): VHDL-Syntaxfehler bei receiver.vhd (35) nahe Text "wenn"; erwarten „“ oder eine Kennung („if“ ist ein reserviertes Schlüsselwort) oder „Architektur“

+0

Versuchen Sie, sich rückwärts zu arbeiten, indem Sie den Code entfernen, bis er kompiliert wird, und fügen Sie dann Code hinzu, um zu verstehen, warum Sie ihn brechen. Wenn Sie dann den Syntaxfehler nicht verstehen, können Sie ihm ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) hinzufügen. Ziehen Sie auch die Verwendung des ModelSim-Simulators für die Erstkompilierung in Betracht, da die Bearbeitungszeit kürzer ist als für Quartus. Altera ModelSim Starter Edition ist kostenlos. –

+0

Oder schauen Sie sich den ersten Fehler an. Sehen Sie sich ein Beispiel für eine 'Architektur' an und vergleichen Sie es mit Ihrem Code. Sehen Sie nach, ob ein Unterschied zwischen den Stichwörtern in der Fehlermeldung besteht. Tipp: Es gibt. –

+0

Ein fehlendes reserviertes Wort ('begin'), das den Signaldeklarationen folgt und die deklarativen Elemente der Architektur von gleichzeitigen Anweisungen trennt (wie eine Prozessanweisung). Du buchstabierst "elsif" als elseif, und es fehlt ein 'then' die nächste if-Anweisung fehlt ein' then'. 'cnt' ist kein Signal, eine Variable ein anderes compould-Trennzeichen (': = '). (Und eine eingeschränkte Ganzzahl macht keine modulare Arithmetik). 'count' ist ein Mode-Out-Port und kann nicht gelesen werden. Und Sie sollten 'count' nicht basierend auf einer kombinatorischen Freigabe erhöhen (im' else' von 'if' nennen wir das einen auffälligen Oszillator). – user1155120

Antwort

0

Die Struktur Ihres Unternehmens wie folgt aussehen muss:

entity receiver is 
    port (
    -- Your ports 
); 
end receiver; 

architecture rec of receiver is 
    -- Declarations here 
begin -- ** Your code is missing this part 

    process (clock) 
    begin 
    -- your process 
    end process; 

end rec; 

Wie in der genannten Kommentare, beginnen immer mit dem ersten Fehler, den Sie sehen; verstehe und löse das zuerst, und viele spätere Fehler werden normalerweise weggehen.

Sie haben cnt als Variable deklariert, und dann versuchen, es zu erhöhen cnt <= cnt + 1; verwenden, sollte aber Variablen Zuordnung := nicht <= verwenden.

Der nächste Fehler ist Ihre Verwendung von elseif; Dies ist kein echtes Keyword und es sieht so aus, als ob Sie elsif verwenden möchten. Diese Zeile fehlt auch eine then.

Sie haben dann eine Zeile if((O(2) xor O(0)) = P(0)), die wiederum eine then fehlt.

Schließlich versuchen Sie, count, die ein out-Port ist, direkt zu inkrementieren.Dies ist nicht möglich, da Sie versuchen, eine Ausgabe zu lesen, um eine Ausgabe hinzuzufügen; Es gibt einige Möglichkeiten, dies zu lösen, aber ich würde persönlich ein Zwischensignal (z. B. count_s) erstellen, das Sie in Ihrem Prozess verwenden, und dann Ihren Ausgang diesem Signal mit count <= count_s zuweisen, irgendwo außerhalb des Prozesses.

Wenn alle diese Probleme behoben sind, kompiliert Ihr Code mindestens.


Als eine Randnotiz, würde es Ihnen helfen, bessere vertikale Ausrichtung Ihres Codes zu haben; Ihre end process sollte vertikal mit seiner Öffnung process, und so weiter ausrichten.