如何选择VHDL中的顶级体系结构之一(从一个文件中)?
在conf_gate.vhd中,我有3种主要的vhdl体系结构。在每种体系结构中,我想从两种实例化体系结构中选择一种(取决于常量的值)。我可以使用同一顶部的configure关键字(conf_gate.vhd)来选择一种体系结构吗?下面列出了示例(配置语句位于文件末尾)如何选择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
图书馆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默认绑定指示)之间的区别也很有用