VHDL结构建模RTL仿真遇未定义实体报错求助
问题解决:VHDL结构架构中"undefined entity"错误
错误原因
你遇到的Error (12006)本质是:你只在结构架构里声明了AND1、OR1这两个组件的接口(component语句),但没有提供它们的实体(entity)和逻辑实现(architecture)。编译器知道你要用这两个模块,但找不到它们的实际代码,所以报错。
解决方法
推荐第一种单文件实现方式(适合新手快速验证):
方法1:在同一文件中补充组件的实体与逻辑
直接在现有代码末尾,添加AND1(2输入与门)和OR1(3输入或门)的实体及实现代码,让编译器能找到这些组件的定义。
修正后的完整代码
library ieee; use ieee.std_logic_1164.all; entity test_logic is port( a, b, c, d : in std_logic; g : out std_logic ); end test_logic; architecture structure of test_logic is component AND1 port(s, t : in std_logic; u : out std_logic ); end component; component OR1 port(x, y, z : in std_logic; n : out std_logic ); end component; signal e, f, h : std_logic; begin x1: AND1 port map(s => not(a), t => not(d), u => e); x2: AND1 port map(s => not(b), t => not(d), u => f); x3: AND1 port map(s => a, t => d, u => h); x4: OR1 port map(x => e, y => f, z => h, n => g); end structure; -- 2输入与门实体及实现 entity AND1 is port( s, t : in std_logic; u : out std_logic ); end AND1; architecture behave of AND1 is begin u <= s and t; end behave; -- 3输入或门实体及实现 entity OR1 is port( x, y, z : in std_logic; n : out std_logic ); end OR1; architecture behave of OR1 is begin n <= x or y or z; end behave;
方法2:拆分组件为独立文件(适合大型项目)
把AND1和OR1分别保存为独立的.vhd文件:
- 创建
and1.vhd,写入AND1的实体和结构体代码 - 创建
or1.vhd,写入OR1的实体和结构体代码 - 编译时,先编译
and1.vhd、or1.vhd,再编译主文件test_logic.vhd
额外注意事项
- 原代码第一行的
ibrary是拼写错误,必须改成library,否则会触发额外语法错误 - 组件的
component声明端口,必须和对应实体的端口名称、方向、类型完全一致,否则会出现端口匹配错误
内容的提问来源于stack exchange,提问作者LaFy
相关产品推荐
相关产品推荐

