如何选择VHDL中的顶级体系结构之一(从一个文件中)?

如何选择VHDL中的顶级体系结构之一(从一个文件中)?,vhdl,hdl,Vhdl,Hdl,在conf_gate.vhd中,我有3种主要的vhdl体系结构。在每种体系结构中,我想从两种实例化体系结构中选择一种(取决于常量的值)。我可以使用同一顶部的configure关键字(conf_gate.vhd)来选择一种体系结构吗?下面列出了示例(配置语句位于文件末尾) ——配置门 --文件:conf_gate.vhd 图书馆IEEE; 使用IEEE.STD_LOGIC_1164.all; 实体异或门是 一般的( 数据宽度:自然宽度:=3 ); 港口( a:标准逻辑向量(数据宽度-1到0);

在conf_gate.vhd中,我有3种主要的vhdl体系结构。在每种体系结构中,我想从两种实例化体系结构中选择一种(取决于常量的值)。我可以使用同一顶部的configure关键字(conf_gate.vhd)来选择一种体系结构吗?下面列出了示例(配置语句位于文件末尾)

——配置门
--文件:conf_gate.vhd
图书馆IEEE;
使用IEEE.STD_LOGIC_1164.all;
实体异或门是
一般的(
数据宽度:自然宽度:=3
);
港口(
a:标准逻辑向量(数据宽度-1到0);
b:标准逻辑向量(数据宽度-1到0);
c:输出标准逻辑向量(数据宽度-1到0)
);
结束异或门;
xor_门的架构是
开始
c a,
b=>b,
c=>c
);
端生成门;
端部和门拱;
conf_gate的建筑或拱门是
被否定的常数:布尔:=真;
开始
否定门:如果否定=真生成
mod_inst:实体工作或门(非拱门)
通用地图(
数据宽度=>数据宽度
)
港口地图(
a=>a,
b=>b,
c=>c
);
结束生成否定的_门;
门:如果否定=假生成
模型说明:实体工作或大门(拱门)
通用地图(
数据宽度=>数据宽度
)
港口地图(
a=>a,
b=>b,
c=>c
);
端生成门;
端部或门拱;
conf_门的架构xor_门是
被否定的常数:布尔:=真;
开始
否定门:如果否定=真生成
mod_inst:entity work.xor_gate(非拱门)
通用地图(
数据宽度=>数据宽度
)
港口地图(
a=>a,
b=>b,
c=>c
);
结束生成否定的_门;
门:如果否定=假生成
mod_inst:entity work.xor_门(arch)
通用地图(
数据宽度=>数据宽度
)
港口地图(
a=>a,
b=>b,
c=>c
);
端生成门;
端部异或门拱;
CONF_gate的配置CONF为
和门拱门
对于mod_inst:entity work.and_gate
使用实体work.conf_gate;
结束于;
结束于;
结束形态;

组件绑定延迟到配置声明:

configuration conf of conf_gate is
    for and_gate_arch
        for negated_gate
            for mod_inst: and_gate
                use entity work.and_gate(not_arch);
            end for;
        end for;
   end for;
end configuration conf;
需要组件实例化:

architecture and_gate_arch of conf_gate is
    constant negated:  boolean := true ;
    component and_gate is
        generic ( DATA_WIDTH:  natural := 3 );
        port ( 
            a:  in  std_logic_vector(DATA_WIDTH - 1 downto 0);
            b:  in  std_logic_vector(DATA_WIDTH - 1 downto 0);
            c:  out std_logic_vector(DATA_WIDTH - 1 downto 0)
        );
    end component;
begin
negated_gate:  
    if negated = true generate
mod_inst:  
        -- entity work.and_gate (not_arch)
        and_gate
            generic map ( DATA_WIDTH => DATA_WIDTH )
            port map (
                a => a,
                b => b,
                c => c
            );
    end generate negated_gate;

gate:  
    if negated = false generate
mod_inst:  
        entity work.and_gate(arch)
            generic map ( DATA_WIDTH => DATA_WIDTH )
            port map (
                a => a,
                b => b,
                c => c
            );
    end generate gate;

end architecture and_gate_arch;
您应该知道,合成供应商并不广泛支持配置声明。值得检查供应商支持的VHDL结构(例如,Xilinx Vivado用户指南901中的合成)

另一种方法是在封闭的声明性区域中为组件实例化提供配置规范


参见IEEE Std 1076-2008 3.4配置声明和7.3配置规范。理解显式绑定指示(7.3.2绑定指示)和默认绑定指示(7.3.3默认绑定指示)之间的区别也很有用。

组件绑定延迟到配置声明:

configuration conf of conf_gate is
    for and_gate_arch
        for negated_gate
            for mod_inst: and_gate
                use entity work.and_gate(not_arch);
            end for;
        end for;
   end for;
end configuration conf;
需要组件实例化:

architecture and_gate_arch of conf_gate is
    constant negated:  boolean := true ;
    component and_gate is
        generic ( DATA_WIDTH:  natural := 3 );
        port ( 
            a:  in  std_logic_vector(DATA_WIDTH - 1 downto 0);
            b:  in  std_logic_vector(DATA_WIDTH - 1 downto 0);
            c:  out std_logic_vector(DATA_WIDTH - 1 downto 0)
        );
    end component;
begin
negated_gate:  
    if negated = true generate
mod_inst:  
        -- entity work.and_gate (not_arch)
        and_gate
            generic map ( DATA_WIDTH => DATA_WIDTH )
            port map (
                a => a,
                b => b,
                c => c
            );
    end generate negated_gate;

gate:  
    if negated = false generate
mod_inst:  
        entity work.and_gate(arch)
            generic map ( DATA_WIDTH => DATA_WIDTH )
            port map (
                a => a,
                b => b,
                c => c
            );
    end generate gate;

end architecture and_gate_arch;
您应该知道,合成供应商并不广泛支持配置声明。值得检查供应商支持的VHDL结构(例如,Xilinx Vivado用户指南901中的合成)

另一种方法是在封闭的声明性区域中为组件实例化提供配置规范

参见IEEE Std 1076-2008 3.4配置声明和7.3配置规范。理解显式绑定指示(7.3.2绑定指示)和默认绑定指示(7.3.3默认绑定指示)之间的区别也很有用