0

我正在尝试为 VHDL 项目创建一小部分门和其他组件。我已经创建了我的包并在我的测试台中从它实例化了一个组件,但是我收到了这个编译器错误:

错误:[VRFC 10-1412] 实体附近的语法错误 [/home/< 编辑名称 >/Documents/school/ECE581/projects/project1/project_1/project_1.srcs/sources_1/new/components.vhdl:23]

问题
我的语法错误的原因是什么,我该如何解决?

包装代码

package p1_components is

    component cNAND
        port ( inA, inB : in bit;
               output   : out bit);
    end component;

end p1_components;

package body p1_components is

    --------------------------------------------------------------------------
    -- NAND implementation
    --------------------------------------------------------------------------

    entity cNAND is -- *** line 23 - error is reported here ***
        port ( inA, inB : in bit;
               output   : out bit);
    end cNAND;

    architecture def of cNAND is
    begin

        def_proc : process(inA, inB)
        begin

            if (inA and inB) then
                output <= transport '0' after 5 ns;
            else
                output <= transport '1' after 5 ns;
            end if;

        end def_proc;    
    end def;

end p1_components;

调试工作

我一直在这里这里引用一些标准库代码,以确保我的声明和语法是正确的,据我所知,它们是正确的。我还参考了其他一些在线资源,我找不到我的包、组件和实体声明有任何问题。

其他注意事项

  1. 我正在使用 Xilinx Vivado v2014.4(64 位)的 Linux 版本进行编译。
  2. 我知道 VHDL 关键字之类NAND的,在实际设计中会使我的实现变得多余。但是我正在进行的项目是针对学校的,并且要求我们为项目的这一部分推出自己的 NAND 实施。
4

1 回答 1

2

通常我不会将实体放在包内,而是放在包外。尝试这个:

package p1_components is

    component cNAND
        port ( inA, inB : in bit;
               output   : out bit);
    end component;

end p1_components;

package body p1_components is
end p1_components;

--------------------------------------------------------------------------
-- NAND implementation
--------------------------------------------------------------------------
entity cNAND is
    port ( inA, inB : in bit;
           output   : out bit);
end cNAND;

architecture def of cNAND is
begin

    def_proc : process(inA, inB)
    begin

        if (inA = '1' and inB = '1') then
            output <= transport '0' after 5 ns;
        else
            output <= transport '1' after 5 ns;

        end if;

    end process def_proc;
end def;
于 2015-10-23T06:23:26.393 回答