如何解决在 VHDL 中为多个 IP 使用相同的组件
我的 Vivado 项目中有多个相同 IP 的实例。它们都公开相同的端口,但内部配置不同。假设我现在有三个
- axi_data_samples_0_FIFO
- axi_data_samples_1_FIFO
- axi_data_samples_2_FIFO
具有以下架构:
component axi_data_samples_N_FIFO
port (
wr_clk : in STD_LOGIC;
wr_rst : in STD_LOGIC;
rd_clk : in STD_LOGIC;
rd_rst : in STD_LOGIC;
din : in STD_LOGIC_VECTOR(255 - 1 downto 0);
wr_en : in STD_LOGIC;
rd_en : in STD_LOGIC;
dout : out STD_LOGIC_VECTOR(255 - 1 downto 0);
valid : out STD_LOGIC;
);
end component;
在我的代码中,我使用泛型来确定是否必须实例化 0、1 或 2。这会导致类似这样的事情:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use IEEE.MATH_REAL.ALL;
use work.JESD_INTERFACE_PKG.ALL;
entity samples_interface is
generic (
INSTANCE_MODEL: integer := 1
);
end samples_interface;
architecture behavioral of samples_interface is
component axi_data_samples_0_FIFO
port (
wr_clk : in STD_LOGIC;
wr_rst : in STD_LOGIC;
rd_clk : in STD_LOGIC;
rd_rst : in STD_LOGIC;
din : in STD_LOGIC_VECTOR(255 - 1 downto 0);
wr_en : in STD_LOGIC;
rd_en : in STD_LOGIC;
dout : out STD_LOGIC_VECTOR(255 - 1 downto 0);
valid : out STD_LOGIC;
);
end component;
component axi_data_samples_1_FIFO
port (
wr_clk : in STD_LOGIC;
wr_rst : in STD_LOGIC;
rd_clk : in STD_LOGIC;
rd_rst : in STD_LOGIC;
din : in STD_LOGIC_VECTOR(255 - 1 downto 0);
wr_en : in STD_LOGIC;
rd_en : in STD_LOGIC;
dout : out STD_LOGIC_VECTOR(255 - 1 downto 0);
valid : out STD_LOGIC;
);
end component;
component axi_data_samples_2_FIFO
port (
wr_clk : in STD_LOGIC;
wr_rst : in STD_LOGIC;
rd_clk : in STD_LOGIC;
rd_rst : in STD_LOGIC;
din : in STD_LOGIC_VECTOR(255 - 1 downto 0);
wr_en : in STD_LOGIC;
rd_en : in STD_LOGIC;
dout : out STD_LOGIC_VECTOR(255 - 1 downto 0);
valid : out STD_LOGIC;
);
end component;
-- Some code
begin
-- Some code
instance_0_i: if INSTANCE_MODEL = 0 then
fifo_i : axi_data_samples_0_FIFO
port map (
wr_clk => in_clk,wr_rst => RST,wr_en => fifo_samples_in_valid_r,din => fifo_vector_in,rd_clk => out_clk,rd_rst => RST_out,rd_en => out_samples_enable,dout => fifo_vector_out,valid => fifo_samples_out_valid
);
end generate;
instance_1_i: if INSTANCE_MODEL = 1 then
fifo_i : axi_data_samples_1_FIFO
port map (
wr_clk => in_clk,valid => fifo_samples_out_valid
);
end generate;
instance_2_i: if INSTANCE_MODEL = 2 then
fifo_i : axi_data_samples_2_FIFO
port map (
wr_clk => in_clk,valid => fifo_samples_out_valid
);
end generate;
end behavioral;
在我的实际项目中,我没有 3 个实例,而是其中 8 个实例,每个实例有 26 个端口。 目前,我的代码基本上是不可读的。所以我正在寻找一种方法来简化它,因为所有组件都具有相同的端口并且是相同 IP 的实例。我正在考虑配置声明,但我不确定在这种情况下如何使用它。
有什么想法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。