For loop vhdl“;分析错误,对于“异常”;

For loop vhdl“;分析错误,对于“异常”;,for-loop,vhdl,crc16,For Loop,Vhdl,Crc16,我试图在ISE14.4中用vhdl编写crc16计算程序,但不明白为什么会在其中出现“parse error,unexpected for”。试图将其付诸实施,但效果不太理想 library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity crc16 is port( clk : in STD_LOGIC:='0'); end crc16; architecture Behavioral of crc16 is signal data:std_logic

我试图在ISE14.4中用vhdl编写crc16计算程序,但不明白为什么会在其中出现“parse error,unexpected for”。试图将其付诸实施,但效果不太理想

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;


entity crc16 is port(
clk : in STD_LOGIC:='0');
end crc16;

architecture Behavioral of crc16 is
signal data:std_logic_vector(15 downto 0):="1010101010101010";
signal ext_data:std_logic_vector(31 downto 0);
signal crc16_original:std_logic_vector(15 downto 0):="1100000000000010";
signal crc16:std_logic_vector(15 downto 0);
signal position:std_logic_vector(5 downto 0);
signal crc_out:std_logic_vector(14 downto 0);
signal i:std_logic_vector(5 downto 0);

begin


for i in 1 to 15 loop
    ext_data(i+16)<=data(i);
end loop;

for i in 1 to 15 loop
    ext_data(i)<='0';
end loop;

while ext_data > "111111111111111" loop
        for i in 0 to 31 loop
            if ext_data(i)="1" position=i;
        end loop;

    crc16<= crc16_original srl 31-position;
    ext_data<=ext_data xor crc16;
end loop;

for i in 0 to 14 loop
    crc_out(i)<=ext_data(i);
end loop;


end Behavioral;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
实体crc16是端口(
时钟:在标准逻辑中:='0');
末端crc16;
crc16的体系结构是
信号数据:标准逻辑向量(15到0):=“1010101010101010”;
信号外部数据:标准逻辑向量(31到0);
信号crc16_原始:标准逻辑向量(15向下至0):=“1100000000000010”;
信号crc16:标准逻辑向量(15至0);
信号位置:标准逻辑向量(5到0);
信号crc输出:标准逻辑向量(14至0);
信号i:标准逻辑向量(5到0);
开始
对于1到15循环中的i

ext_数据(i+16)有几个问题需要指出:

  • for循环必须在一个进程中,因此可能会导致您看到的“parse error,unexpected for”

  • >
    的关系比较可能会给
    标准逻辑向量
    带来意外的结果,因此在进行比较之前,您可以查看用于强制转换的
    数值标准
    包,例如
    无符号(标准逻辑向量)

  • 比较
    外部数据(i)=“1”
    是非法的,因为
    将“1”
    视为
    标准逻辑向量
    ,其中as
    外部数据(i)
    标准逻辑
    ;相反,将编译
    ext_data(i)='1'

  • 如果外部数据(i)=“1”位置=i,则在
    周围非法施工,因为没有
    那么
    等等


  • 有一个标识符为i的信号,它也被用作循环变量,其结果是
    位置感谢解释。很抱歉,我没有足够的声誉投你一票。不客气;希望它能让您在VHDL领域领先;-)
    
    library ieee;
    use ieee.std_logic_1164.all;
    
    entity crc16 is port(
      clk : in std_logic := '0');
    end crc16;
    
    
    library ieee;
    use ieee.numeric_std.all;
    
    architecture Behavioral of crc16 is
      signal data : std_logic_vector(15 downto 0) := "1010101010101010";
      signal ext_data : std_logic_vector(31 downto 0);
      signal crc16_original : std_logic_vector(15 downto 0) := "1100000000000010";
      signal crc16 : std_logic_vector(15 downto 0);
      signal position : std_logic_vector(5 downto 0);
      signal crc_out : std_logic_vector(14 downto 0);
      signal i_sig : std_logic_vector(5 downto 0);
    
    begin
    
      process (clk) is
      begin
        if rising_edge(clk) then
    
          for i in 1 to 15 loop
            ext_data(i+16) <= data(i);
          end loop;
    
          for i in 1 to 15 loop
            ext_data(i) <= '0';
          end loop;
    
          while ext_data > "111111111111111" loop
            for i in 0 to 31 loop
              if ext_data(i) = '1' then
                position <= i_sig;  -- TBD[Probably not right code, but compiles]
              end if;
            end loop;
            crc16 <= std_logic_vector(unsigned(crc16_original) srl (31 - to_integer(unsigned(position))));
            ext_data <= ext_data xor crc16;
          end loop;
    
          for i in 0 to 14 loop
            crc_out(i) <= ext_data(i);
          end loop;
    
        end if;
      end process;
    
    end Behavioral;