VHDL脚本语法错误

VHDL脚本语法错误,vhdl,Vhdl,我有这个代码,我想做一个LSFR,但我有几个问题,包括: 错误:HDLParsers:3010-“C:/Users/user/Documents/tp_vhdl/media_LSFR/LSFR.vhd”第18行。实体LFSR不存在。 错误:HDLParsers:3312-“C:/Users/user/Documents/tp_vhdl/media_LSFR/LSFR.vhd”第19行。未定义符号“标准逻辑向量”。 错误:HDLParsers:1209-“C:/Users/user/Documen

我有这个代码,我想做一个LSFR,但我有几个问题,包括:

错误:HDLParsers:3010-“C:/Users/user/Documents/tp_vhdl/media_LSFR/LSFR.vhd”第18行。实体LFSR不存在。
错误:HDLParsers:3312-“C:/Users/user/Documents/tp_vhdl/media_LSFR/LSFR.vhd”第19行。未定义符号“标准逻辑向量”。
错误:HDLParsers:1209-“C:/Users/user/Documents/tp_vhdl/media_LSFR/LSFR.vhd”第19行。标准逻辑向量:未定义的符号(此块中的最后一个报告)
错误:HDLParsers:3312-“C:/Users/user/Documents/tp_vhdl/media_LSFR/LSFR.vhd”第20行。未定义的符号“标准逻辑”。
错误:HDLParsers:1209-“C:/Users/user/Documents/tp_vhdl/media_LSFR/LSFR.vhd”第20行。标准逻辑:未定义的符号(此块中的最后一个报告)
错误:HDLParsers:3312-“C:/Users/user/Documents/tp_vhdl/media_LSFR/LSFR.vhd”第24行。未定义的符号“s_xor1”

守则:

library ieee;
use ieee.std_logic_1164.all;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;


entity LSFR is port (
    clk : in std_logic;
    reset,en : in std_logic;
    de1,de2 : out std_logic_vector(2 downto 0)
    );
end LSFR;


architecture arch of LFSR is
signal etatpresent, etatfutur : std_logic_vector(16 downto 1);
signal s_xor1, s_xor2, s_xor3 : std_logic;
begin

-- Calcul intermediaire des ou exclusifs
s_xor1 <= etatpresent(15) xor etatpresent(1);
s_xor2 <= etatpresent(14) xor etatpresent(1);
s_xor3 <= etatpresent(12) xor etatpresent(1);

-- Calcul de l'état futur en fonction de l'état présent et des ou exclusifs

process(etatpresent) begin

etatfutur(16) <= etatpresent(1);
etatfutur(1) <= etatpresent(2);
etatfutur (2) <= etatpresent(3);
etatfutur (3) <= etatpresent(4);
etatfutur (4) <= etatpresent(5);
etatfutur (5) <= etatpresent(6);
etatfutur (6) <= etatpresent(7);
etatfutur (7) <= etatpresent(8);
etatfutur (8) <= etatpresent(9);
etatfutur (9) <= etatpresent(10);
etatfutur (10) <= etatpresent(11);
etatfutur (11) <= s_xor3;
s_xor3 <= etatpresent(12);
etatfutur (12) <= etatpresent(13);
etatfutur (13) <= s_xor2;
s_xor2 <= etatpresent(14);
etatfutur (14) <= s_xor1;
s_xor1 <= etatpresent(15);
etatfutur (15) <= etatpresent(16);

end process;

process(reset) begin
                if (reset = '1' ) then
                    etatfutur <="0000000000000001"; 
                end if ;
end process;


-- cablage des deux sorties
de1(2 downto 0) <= etatpresent(16 downto 14);
de2 (2 downto 0) <= etatpresent(3 downto 1);
end arch;
ieee库;
使用ieee.std_logic_1164.all;
使用IEEE.STD_LOGIC_ARITH.ALL;
使用IEEE.STD_LOGIC_UNSIGNED.ALL;
图书馆IEEE;
使用IEEE.STD_LOGIC_1164.ALL;
实体LSFR是端口(
clk:标准逻辑中;
重置,en:标准_逻辑中;
de1,de2:输出标准逻辑向量(2到0)
);
结束LSFR;
LFSR的建筑拱门是
信号etatpresent,etatfutur:std_逻辑_向量(16向下至1);
信号s_xor1、s_xor2、s_xor3:std_逻辑;
开始
--不包括中间值的计算

s_xor1您在实体中拼写LFSR错误。(“LSFR”)

虽然您没有识别行号,而且行号不匹配,但第一个错误是,正如Martin Zobel所指出的,LFSR不是架构arch的声明实体。在实体声明及其end语句中,它似乎是拼错的实体名称

如果不借助互联网搜索来识别产生错误消息的VHDL工具(它似乎不太符合标准),Maria可能会在她的评论中发现一些东西,因为她已经识别了错误消息的来源

通常情况下,上下文子句中的重复库名称会被忽略,同一内部声明性区域中的已复制声明in use子句也会被忽略

理顺实体名称和上下文子句(通过删除多余的元素):

IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
实体LFSR为——was LSFR为端口(
港口(
clk:标准逻辑中;
重置,en:标准_逻辑中;
de1,de2:输出标准逻辑向量(2到0)
);
结束实体LFSR;--是结束LSFR;
LFSR的建筑拱门是——第16行,LFSR与LSFR不匹配
信号etatpresent,etatfutur:std_逻辑_向量(16向下至1);
信号s_xor1、s_xor2、s_xor3:std_逻辑;
开始
--不包括中间值的计算

您已经声明了两次库。很高兴仔细阅读错误消息。这只是LSFR/LFSR中的一个输入错误。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity LFSR is  -- was LSFR is port (
    port (
        clk:       in  std_logic;
        reset, en: in  std_logic;
        de1, de2:  out std_logic_vector(2 downto 0)
    );
end entity LFSR; -- was  end LSFR;

architecture arch of LFSR is    -- Line 16,  LFSR doesn't match LSFR
    signal etatpresent, etatfutur:  std_logic_vector(16 downto 1);
    signal s_xor1, s_xor2, s_xor3:  std_logic;
begin

-- Calcul intermediaire des ou exclusifs
    s_xor1 <= etatpresent(15) xor etatpresent(1);
    s_xor2 <= etatpresent(14) xor etatpresent(1);
    s_xor3 <= etatpresent(12) xor etatpresent(1);

-- Calcul de l'état futur en fonction de l'état présent et des ou exclusifs

    process (etatpresent) 
    begin
        etatfutur(16) <= etatpresent(1);
        etatfutur(1) <= etatpresent(2);
        etatfutur (2) <= etatpresent(3);
        etatfutur (3) <= etatpresent(4);
        etatfutur (4) <= etatpresent(5);
        etatfutur (5) <= etatpresent(6);
        etatfutur (6) <= etatpresent(7);
        etatfutur (7) <= etatpresent(8);
        etatfutur (8) <= etatpresent(9);
        etatfutur (9) <= etatpresent(10);
        etatfutur (10) <= etatpresent(11);
        etatfutur (11) <= s_xor3;
        s_xor3 <= etatpresent(12);
        etatfutur (12) <= etatpresent(13);
        etatfutur (13) <= s_xor2;
        s_xor2 <= etatpresent(14);
        etatfutur (14) <= s_xor1;
        s_xor1 <= etatpresent(15);
        etatfutur (15) <= etatpresent(16);
    end process;

    process (reset, clk)   -- added clock to sensitivity list
    begin
        if reset = '1'  then
            etatpresent <= "0000000000000001";  -- was etatfutur
        elsif rising_edge(clk) and en = '1' then
            etatpresent <= etatfutur;
        end if;
    end process;

-- cablage des deux sorties
    de1(2 downto 0) <= etatpresent(16 downto 14);
    de2 (2 downto 0) <= etatpresent(3 downto 1);

end architecture arch;
library ieee;
use ieee.std_logic_1164.all;

entity lfsr_tb is
end entity;

architecture fum of lfsr_tb is
    signal clk:     std_logic := '0';
    signal reset:   std_logic;
    signal en:      std_logic;
    signal de1:     std_logic_vector (2 downto 0);
    signal de2:     std_logic_vector (2 downto 0);
begin

DUT:
    entity work.lfsr
        port map (
            clk => clk,
            reset => reset,
            en => en,
            de1 => de1,
            de2 => de2
        );
CLOCK:
    process
    begin
        wait for 10 ns;
        clk <= not clk;
        if now > 450 ns then
            wait;
        end if;
    end process;
STIMULI:
    process
    begin
        wait for 11 ns;
        reset <= '1';
        en <= '0';
        wait for 20 ns;
        reset <= '0';
        wait for 20 ns;
        en <= '1';
        wait for 100 ns;
        en <= '0';
        wait for 40 ns;
        en <= '1';
        wait;
    end process;
end architecture;
-- Calcul de l'état futur en fonction de l'état présent et des ou exclusifs

    process (etatpresent, s_xor1, s_xor2, s_xor3) 
    begin
        etatfutur(16) <= etatpresent(1);
        etatfutur(1) <= etatpresent(2);
        etatfutur (2) <= etatpresent(3);
        etatfutur (3) <= etatpresent(4);
        etatfutur (4) <= etatpresent(5);
        etatfutur (5) <= etatpresent(6);
        etatfutur (6) <= etatpresent(7);
        etatfutur (7) <= etatpresent(8);
        etatfutur (8) <= etatpresent(9);
        etatfutur (9) <= etatpresent(10);
        etatfutur (10) <= etatpresent(11);
        etatfutur (11) <= s_xor3;
        -- s_xor3 <= etatpresent(12);
        etatfutur (12) <= etatpresent(13);
        etatfutur (13) <= s_xor2;
        -- s_xor2 <= etatpresent(14);
        etatfutur (14) <= s_xor1;
        -- s_xor1 <= etatpresent(15);
        etatfutur (15) <= etatpresent(16);
    end process;