For循环中的VHDL错误

For循环中的VHDL错误,vhdl,Vhdl,在下面的代码中,我收到了以下错误,但我不明白为什么它是一个错误 library ieee; use ieee.std_logic_1164.all; entity RGSTR_SHFT_N_PARAL_B2 is Generic ( n: integer := 4 ); port( DATA : in std_logic_vector((n-1) downto 0); Shift_In : in std_logic; Load : i

在下面的代码中,我收到了以下错误,但我不明白为什么它是一个错误

library ieee;
use ieee.std_logic_1164.all;

entity RGSTR_SHFT_N_PARAL_B2 is

Generic (
     n: integer := 4  
     );

  port(
    DATA : in std_logic_vector((n-1) downto 0); 
    Shift_In : in std_logic; 
    Load : in std_logic;  
    Enable : in std_logic;  
CLK : in    std_logic;  
S : out   std_logic_vector((n-1) downto 0)   
        );
end entity RGSTR_SHFT_N_PARAL_B2;

architecture simple of RGSTR_SHFT_N_PARAL_B2 is

  signal temp_S: std_logic_vector((n-1) downto 0);

  signal LOW0, HIGH1: std_logic; -- Constant Signals   

  -- Use the D flip flop of B1 excersise
      component D_FF_B1 is
        port( 
        Enable      : in    std_logic;  
       Load        : in std_logic;  
    Load_Val    : in    std_logic;  
     Data_in     : in   std_logic;  
     CLK        : in    std_logic;  
     Q           : out   std_logic  
    );
  end component;

begin

  p0:process(Enable, CLK) is
  begin

-- Initialisations 

  LOW0  <= '0';
  HIGH1 <= '1';

    if (Enable = LOW0) then
           L0: for i in 0 to (n-1) loop
              temp_S(i) <= temp_S(i);
           end loop;
       elsif (CLK 'event and CLK = HIGH1) then 
           if (Load = LOW0)  then             -- Shifter is enabled
              L1: for i in 0 to (n-2) loop
                  temp_S(i) <= temp_S(i+1);
              end loop;
              temp_S(n-1) <= Shift_In;
           else                               -- Loader is enabled
              L2: for i in 0 to (n-1) loop
                X1: D_FF_B1 port map(HIGH1, LOW0, LOW0, DATA(i), CLK, temp_S(i));
              end loop;
           end if;
       end if;

  L3: for i in 0 to (n-1) loop
     S(i) <= temp_S(i);
  end loop;

  end process p0;

end architecture simple;
ieee库;
使用ieee.std_logic_1164.all;
实体RGSTR_SHFT_N_PARAL_B2为
一般的(
n:整数:=4
);
港口(
数据:标准逻辑向量((n-1)下至0);
移位输入:在标准逻辑中;
负载:在标准逻辑中;
启用:在std_逻辑中;
CLK:标准逻辑中;
S:out标准逻辑向量((n-1)向下至0)
);
终端实体RGSTR_SHFT_N_PARAL_B2;
RGSTR_SHFT_N_PARAL_B2的简单架构是
信号温度:标准逻辑向量((n-1)下降到0);
信号低0,高1:std_逻辑;——恒定信号
--使用B1练习的D触发器
部件D_FF_B1为
港口(
启用:在std_逻辑中;
负载:在标准逻辑中;
加载值:在标准逻辑中;
数据输入:在标准逻辑中;
CLK:标准逻辑中;
Q:输出标准逻辑
);
端部元件;
开始
p0:进程(启用、CLK)为
开始
--初始化

LOW0在
进程中实例化模块
不是合法的VHDL语法,如所示:

p0:process(Enable, CLK) is
begin
...
  L2: for i in 0 to (n-1) loop
    X1: D_FF_B1 port map(HIGH1, LOW0, LOW0, DATA(i), CLK, temp_S(i));
  end loop;
...
end process p0;
模块的实例化必须作为
进程
之外的并发语句进行

根据代码,似乎可以移动模块实例化 在
过程之外
,代码如下:

signal temp_S_x1 : std_logic_vector((n-1) downto 0);
...
L2 : for i in 0 to (n-1) generate
  X1 : D_FF_B1 port map(HIGH1, LOW0, LOW0, DATA(i), CLK, temp_S_x1(i));
end generate;
...
p0 : process(Enable, CLK) is
  ...
  L2: for i in 0 to (n-1) loop
    temp_S(n-1) <= temp_S_x1(i);
  end loop;
或者直接使用“0”和“1”,而不是声明任何常量

还请注意,
p0
进程
不是flip的格式正确的进程 失败,因此您将收到来自Quartus的一些额外警告,因为缺少
temp_S
灵敏度列表中的信号。如果同步使用
启用
,则 使用如下模板:

p0 : process(Enable, CLK) is
begin
  if rising_edge(CLK) then
    if (Enable = '0') then

所以我不应该在我的程序中使用进程。。。或者还有其他方法吗?@G.V.:见上面答案中添加的示例。
constant LOW0 : std_logic := '0';
constant HIGH1 : std_logic := '1';
p0 : process(Enable, CLK) is
begin
  if rising_edge(CLK) then
    if (Enable = '0') then