在嵌套配置中找不到体系结构名称

时间:2016-10-25 22:35:40

标签: vhdl quartus

我正在构建一个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表示此时预计会出现一个不合格的(架构)名称。这里缺少什么?

1 个答案:

答案 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分

我使用vgasource的包中的组件声明修改了上述代码,删除了源的实体和体系结构:

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;分隔)。