【发布时间】:2017-07-31 19:50:15
【问题描述】:
我对 vhdl 相当陌生,想知道管理以下情况/模式的最佳方法是什么:
假设我有一个实体 A,其架构实例化了组件 B。然后我想重用 A,但这次实例化组件 C 来代替 B。C 具有与 B 完全不同的功能。B 和 C 可能具有不同大小的端口,但是 A 的功能是它可以处理不同的端口大小,例如使用泛型和生成语句。本质上,A 就像组件 B、C 或 D、E、F 等的容器。它可能以所有这些组件通用的方式对 B、C 等的输入和输出执行一些逻辑/缓冲。
我已经阅读了有关配置的信息,我的理解是我可以在 A 中实例化一个组件(称为 Z),然后使用配置将它的实体链接到不同的架构。使用vhdl这个功能的人好像不多。
配置是否适合这种情况?
理想情况下,我希望设计中的所有参数最终取决于为 Z 选择的架构,以便架构决定其链接到 (Z) 的实体的端口大小,进而决定 Z 的端口大小决定 A 的参数,最后这些参数决定 A 的端口大小。这可能吗?
(我在一般意义上使用“参数化”来表示配置设计的一种方式。泛型、包、“范围属性等都是参数化的示例)
我的意思的伪代码示例如下。大写字母的值应取决于为 Z 选择的架构。
entity A is
port
(
clk : in std_logic;
reset : in std_logic;
inputs : in std_logic_vector(SOME_WIDTH_A_IN - 1 downto 0);
outputs : out std_logic_vector(SOME_WIDTH_A_OUT - 1 downto 0);
);
end A;
architecture A_arch of A is
component Z
port
(
clock : in std_logic;
inputs : std_logic_vector(SOME_WIDTH_Z_IN - 1 downto 0);
ouputs : std_logic_vector(SOME_WIDTH_Z_OUT - 1 downto 0)
);
end component;
begin
for i in 1 to SOME_VALUE generate
-- whatever logic/buffering we want to perform on the inputs
end generate;
for i in 1 to SOME_VALUE generate
-- whatever logic/buffering we want to perform on the outputs
end generate;
instance: Z
port map(
clock => clk,
inputs => --output of logic/buffering above
outputs => -- input of logic/buffering above
);
end A_arch;
我可能以错误的方式思考这个问题 - 本质上,我希望避免复制/粘贴“容器”实体 A 来处理不同的组件 B、C 等。这样做的最佳方法是什么?
【问题讨论】:
-
“模块”是一个verilog术语。使用“实体”。你应该把它画在示意图中。 “容器”是什么意思?这是一个非常广泛的概念。您还使用了不是 VHDL 概念的“参数”和“过滤器”。总结一下:我发现我很难理解你的问题。也许写一些伪代码左右?
-
感谢观看,正在编辑中
-
配置是你正在寻找的,我想。我肯定会使用它们。
-
是否可以直接从为 Z 选择的架构中导出伪代码中大写字母的值?或者 A 必须事先了解这些值(即我是否必须将这些值作为泛型单独提供给实体 A)
-
你可以用泛型来做这一切,并在配置中给它们赋值。
标签: vhdl