我正在构建一个VGA输出块,它使用嵌套元素,提供类似的接口来构建图片。 configuration
然后确定实际的屏幕布局。
到目前为止,我已为每个块创建了一个配置,但我真的很想使用单个嵌套配置。允许在BNF中,我发现example code使用了这个,但我无法编译代码。
在work
内有
entity everything is
...
end entity;
architecture syn of everything is
...
begin
gfx : vga;
end architecture;
component source is
...
end component;
entity vga is
...
end entity;
architecture syn of vga is
...
begin
src : source;
end architecture;
entity testpattern is
...
end entity;
architecture syn of testpattern is
...
end entity;
现在我想使用configuration
:
configuration conf of everything is
for syn
for gfx : vga
use entity work.vga(syn);
for syn -- Error reported here
for src : source
use entity work.testpattern(syn);
end for;
end for;
end for;
end for;
end configuration;
我从Quartus收到错误消息
Error (10392): VHDL Block Specification error at everything.vhd(106): cannot find "syn"
BNF表示此时预计会出现一个不合格的(架构)名称。这里缺少什么?
答案 0 :(得分:1)
一些修改(添加,并将组件声明移动到体系结构声明部分):
entity source is
end entity;
architecture foo of source is
begin
end architecture;
entity vga is
end entity;
architecture syn of vga is
component source is
end component;
begin
src : source;
end architecture;
entity everything is
end entity;
architecture syn of everything is
component vga is
end component;
begin
gfx : vga;
end architecture;
entity testpattern is
end entity;
architecture syn of testpattern is
begin
end architecture;
configuration conf of everything is
for syn
for gfx : vga
use entity work.vga(syn);
for syn -- Error reported here
for src : source
use entity work.testpattern(syn);
end for;
end for;
end for;
end for;
end configuration;
你的代码分析,阐述和模拟(完全没有做任何事情)。
%% ghdl -a richter.vhdl
%% ghdl -e conf
%% ghdl -r conf
%%
源的附加实体和体系结构。 vga的组件声明。 将源的组件声明移动到vga的体系结构syn。 摆脱所有恼人的" ..." s。
您可能需要一个针对testpattern的配置,该配置使用所有配置conf来为您提供测试平台(如果testpattern是一个测试平台)来进行详细说明和运行。在这里展示它有点为时过早。
<强>附录强>
在看到你今天回答VHDL问题后,我再看看这个问题和你的评论:
嗯,我有一个组件定义存在于一个包中,因为我需要在多个地方。否则最大的区别是实体源和未使用的架构 - 我是否总是需要定义一个与组件同名的实体,即使我不打算使用它? - Simon Richter 10月26日和16日凌晨2点05分
我使用vga
和source
的包中的组件声明修改了上述代码,删除了源的实体和体系结构:
package components_pkg is
component vga is
end component;
component source is
end component;
end package;
---------------------------------------
use work.components_pkg.all;
entity vga is
end entity;
architecture syn of vga is
begin
src : source;
end architecture;
---------------------------------------
use work.components_pkg.all;
entity everything is
end entity;
architecture syn of everything is
begin
gfx : vga;
end architecture;
---------------------------------------
entity testpattern is
end entity;
architecture syn of testpattern is
begin
end architecture;
---------------------------------------
configuration conf of everything is
for syn
for gfx : vga
use entity work.vga(syn);
for syn -- Error reported here
for src : source
use entity work.testpattern(syn);
end for;
end for;
end for;
end for;
end configuration;
这也分析,阐述和运行(什么都不做)。
这表明可以使用组件声明代替资源库工作中可见的实体声明
还演示了未使用的组件声明被忽略(通过use子句可见)。
您仍然收到错误ID: 10392,意味着syn
的架构testpattern
并未按照详细说明配置声明conf
的类型进行分析。< / p>
使用清空的工作库,如果syn
架构被注释掉,另一个VHDL工具会发出类似的消息 -
ghdl -e conf
/ usr / local / bin / ghdl1-llvm:找不到架构&#34; syn&#34;实体&#34; testpattern&#34;
这可以归结为当详细配置syn
并且详细说明失败时,实体testpattern
的库工作中找不到架构conf
。
您可能会注意到设计单位按分析顺序显示在上方(由&#34; ----...&#34;分隔)。