2016-04-04 6 views
2

Ich habe diesen Code für einen seriellen Addierer in VHDL. Ich versuche es zur Arbeit zu kommen, aber ich halte auf einen Fehler erhalten, die sagt:VHDL-Codefehler

Fehler in VHDL Datei gefunden -

Line: 17 Fehler: Index-Einschränkung in der Subtyp Anzeige erwartet

Dieser Fehler bezieht sich auf die Zeile:

Ich bin mir nicht sicher, warum das passiert. Irgendeine Hilfe? Bitte finden Sie den vollständigen Code unten.

library ieee; 
use ieee.std_logic_1164.all; 

entity adder is 
port(
start : in std_logic; 
clk : in std_logic; 
a_out : out std_logic_vector(3 downto 0) 
); 
end adder; 

architecture behave of adder is 
signal a, b : std_logic_vector(3 downto 0); 
signal shift : std_logic; 
signal Cin, Cout : std_logic; 
signal sum_in : std_logic; 
signal state, next_state : integer range 0 to 3; 

begin 
sum_in <= a(0) xor b(0) xor Cin; 
Cout <= (Cin and a(0))or(Cin and b(0))or(a(0) and b(0)); 
a_out <= a; 

process(state, start) 
begin 
    case state is 
    when 0 => 
    if start = '1' then shift <= '1'; next_state <= 1; 
    else shift <= '0'; next_state <= 2; end if; 
    when 1 => shift <= '1'; next_state <= 2; 
    when 2 => shift <= '1'; next_state <= 3; 
    when 3 => shift <= '1'; next_state <= 0; 
    end case; 

end process; 

process(clk) 
begin 
    if clk'event and clk = '0' then 
    state <= next_state; 
    if shift = '1' then 
    a <= sum_in & a(3 downto 1); 
    b <= b(0) & b(3 downto 1); 
    Cin <= Cout; 
    end if; 
    end if; 

end process; 

end behave; 
+1

verwenden, das Tool verwenden Sie? Ihr Code analysiert gut mit ModelSim, und auch mit Quartus 13.1 wird gut analysiert und synthetisiert. –

+1

In welchem ​​Kontext (was tool0? Ihr Code ist gültig VHDL und analysiert. Sie scheinen eine Werkzeugeinschränkung zu begegnen. Beachten Sie, dass ohne Initialisierung a und b nichts interessantes während der Simulation tun. – user1155120

+3

Ich benutze Edwinxp. Es hat eine Funktion, die VHDL zu Schematic Conversion erlaubt.Ich versuche es zu nutzen, aber ohne Erfolg .. – user3026388

Antwort

0

Versuchen Sie, Ihre Linie zu ersetzen, in dem Sie Fehler erhalten von:
signal state, next_state : integer is range 0 to 3;

Wenn Sie Bereich angeben, dann sollten Sie is range statt range