Issa_i Ответов: 1

Как мне решить эту ошибку "незаконное последовательное утверждение"


library ieee;
use IEEE.std_logic_1164.all;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_unsigned.all;

entity COUNTER_COM is 
port (
    START: IN STD_LOGIC;
    LOAD: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
    COUNTUD: IN STD_LOGIC;
    COUNT1ALL: IN STD_LOGIC;
    INPUT: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
    OUTPUT: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
    );
END COUNTER_COM;

ARCHITECTURE COUNT OF COUNTER_COM IS

--COMPONENT bitAdder4
--port(
    --X:in STD_LOGIC_VECTOR(3 downto 0);
    --Y:in STD_LOGIC_VECTOR(3 downto 0);
    --C0:in STD_LOGIC;
   -- S:out STD_LOGIC_VECTOR(3 downto 0);
  --  C4:out STD_LOGIC);
--end COMPONENT;
COMPONENT bitAdder
port (
    X:in STD_LOGIC;
    Y:in STD_LOGIC;
    CIN:in STD_LOGIC;
    S:out STD_LOGIC;
    COUT:out STD_LOGIC);
END COMPONENT;

SIGNAL CI: STD_LOGIC_VECTOR (3 DOWNTO 0);
SIGNAL CO: STD_LOGIC_VECTOR (3 DOWNTO 0);
SIGNAL LOAD1: STD_LOGIC_VECTOR (3 DOWNTO 0) := (OTHERS => '0');
SIGNAL LOAD2: STD_LOGIC_VECTOR (3 DOWNTO 0) := (OTHERS => '0');
SIGNAL A: STD_LOGIC_VECTOR (3 DOWNTO 0) := "0001";
SIGNAL B: STD_LOGIC_VECTOR (3 DOWNTO 0) := "1111";
SIGNAL SU: STD_LOGIC_VECTOR (3 DOWNTO 0);


BEGIN 


PROCESS (START,LOAD, INPUT, COUNTUD, COUNT1ALL,LOAD1, LOAD2)
BEGIN
IF (LOAD = 0) THEN 
        IF COUNTUD = '1' THEN 
            LOAD1 <= "1001";
             LOAD2 <= "1001";
        ELSE LOAD1 <= "0000";
             LOAD2 <= "0000";
    END IF;
ELSE  
        FOR X IN 0 TO 3 LOOP
        LOAD1(X) <= LOAD(X);
        LOAD2(X) <= LOAD (X+4);
        END LOOP;
END IF;

IF (START= '1') THEN
      IF (COUNTUD = '1') THEN
        IF (LOAD1 /= "1001") THEN 
        G1: FOR q IN 0 TO 4 GENERATE
        U1: bitAdder PORT MAP (X=> LOAD1(0), Y=>A(q),CIN => CI(q),COUT => CO(q), S => SU(q) );
        --U1A: bitAdder PORT MAP (X=> LOAD1(1), Y=>A(1),CIN => CI(1),COUT => CO(1), S => SU(1) );
        --U1B: bitAdder PORT MAP (X=> LOAD1(2), Y=>A(2),CIN => CI(2),COUT => CO(2), S => SU(2) );
        --U1C: bitAdder PORT MAP (X=> LOAD1(3), Y=>A(3),CIN => CI(3),COUT => CO(3), S => SU(3) );
        END GENERATE;
            LOAD1<= SU;

        ELSIF (LOAD1 = "1001") THEN
        LOAD1 <= "0000";
        G2: FOR q IN 0 TO 4 GENERATE
        U2: bitAdder PORT MAP (X=> LOAD1(q), Y=>A(q),CIN => CI(q),COUT => CO(q), S => SU(q) );
        --U2A: bitAdder PORT MAP (X=> LOAD1(1), Y=>A(1),CIN => CI(1),COUT => CO(1), S => SU(1) );
        --U2B: bitAdder PORT MAP (X=> LOAD1(2), Y=>A(2),CIN => CI(2),COUT => CO(2), S => SU(2) );
        --U2C: bitAdder PORT MAP (X=> LOAD1(3), Y=>A(3),CIN => CI(3),COUT => CO(3), S => SU(3) );
        end generate;
        LOAD2 <= SU;
            END IF;
    ELSE 
        IF (LOAD1 /= "0000") THEN  
        G3: FOR q IN 0 TO 4 GENERATE
        U3: bitAdder PORT MAP (X=> LOAD1(q), Y=>B(q),CIN => CI(q),COUT => CO(q), S => SU(q) );
        --U3A: bitAdder PORT MAP (X=> LOAD1(1), Y=>B(1),CIN => CI(1),COUT => CO(1), S => SU(1) );
        --U3B: bitAdder PORT MAP (X=> LOAD1(2), Y=>B(2),CIN => CI(2),COUT => CO(2), S => SU(2) );
        --U3C: bitAdder PORT MAP (X=> LOAD1(3), Y=>B(3),CIN => CI(3),COUT => CO(3), S => SU(3) );
        END GENERATE;
        LOAD1 <= SU;
        ELSIF (LOAD1 = "0000") THEN
        LOAD1 <= "1001";
        G4: FOR q IN 0 TO 4 GENERATE
        U4: bitAdder PORT MAP (X=> LOAD2(q), Y=>B(q),CIN => CI(q),COUT => CO(q), S => SU(q) );
        --U4A: bitAdder PORT MAP (X=> LOAD2(1), Y=>B(1),CIN => CI(1),COUT => CO(1), S => SU(1) );
        --U4B: bitAdder PORT MAP (X=> LOAD2(2), Y=>B(2),CIN => CI(2),COUT => CO(2), S => SU(2) );
        --U4C: bitAdder PORT MAP (X=> LOAD2(3), Y=>B(3),CIN => CI(3),COUT => CO(3), S => SU(3) );
        END GENERATE;
        LOAD2 <= SU;
        END IF;
    END IF;

ELSE NULL;
END IF;
END PROCESS;
END COUNT;


Что я уже пробовал:

Я работаю со счетчиком BCD и получаю эту ошибку "COMBINATIONAL.vhdl(67): незаконный последовательный оператор" я пытался инициализировать q вне процесса, а также пытался не использовать q, но он

1 Ответов

Рейтинг:
6

Jochen Arndt

Я не очень хорошо знаю VHDL, но вы смешиваете параллельные и последовательные операторы. У вас есть последовательный PROCESS блок с использованием параллельного оператора (GENERATE) внутри. Ошибка говорит вам, что существует оператор, который не является ожидаемым последовательным.