gpt4 book ai didi

vhdl - 是否可以使用循环创建同一组件的多个实例?

转载 作者:行者123 更新时间:2023-12-04 16:54:10 25 4
gpt4 key购买 nike

我有一个组成部分:

Component CAU is
port
(
CLK : in std_logic;
RESET : in std_logic;
START : in std_logic;
V_DIRECTION : in vector_3d;
P_ORIGIN : in vector_3d;
V_NORMAL_IN : in vector_3d;
DOT_A : in vector_3d;
DOT_B : in vector_3d;
DOT_C : in vector_3d;
ID_DATA_IN : in scalar;

ID_DATA_OUT : out scalar;
V_REFLECT : out vector_3d;
V_PASS : out vector_3d;
P_INTERSECT : out vector_3d;
V_NORMAL_OUT : out vector_3d;
T_OUT : out scalar;
SUCCESS : out std_logic;
FINISH : out std_logic
);
end Component;

我想创建它的8个实例。每个被称为 CAU_inst0CAU_inst1,依此类推。每个实例都通过以下方式连接:
CAU_inst0 : CAU
PORT MAP
(
CLK => CLK_CAU,
RESET => RESET,
START => start_0_sig,
V_DIRECTION => v_direction_0_sig,
P_ORIGIN => p_origin_0_sig,
V_NORMAL_IN => v_normal_in_0_sig,
DOT_A => dot_a_0_sig,
DOT_B => dot_b_0_sig,
DOT_C => dot_c_0_sig,
ID_DATA_IN => id_data_in_0_sig,

ID_DATA_OUT => id_data_out_0_sig
V_REFLECT => v_reflect_0_sig,
V_PASS => v_pass_0_sig,
P_INTERSECT => p_intersect_0_sig,
V_NORMAL_OUT => v_normal_out_0_sig,
T_OUT => t_0_sig,
SUCCESS => success_0_sig,
FINISH => finish_0_sig
);

对于每个实例 i,数字 0被替换为 i。我所做的是创建一个Matlab脚本,该脚本使用正确的数字创建了8个不同的实例。但这是一个丑陋的解决方案,因为它需要170行相同的代码,几乎没有变化。有没有一种方法可以在代码内部的循环中创建组件(如果可能的话,可以创建适当的信号)以减少困惑和行数?

最佳答案

您要使用的是for ... generate语句。

这是一个example,类似于您要实现的目标:

architecture GEN of REG_BANK is
component REG
port(D,CLK,RESET : in std_ulogic;
Q : out std_ulogic);
end component;
begin
GEN_REG:
for I in 0 to 3 generate
REGX : REG port map
(DIN(I), CLK, RESET, DOUT(I));
end generate GEN_REG;
end GEN;

在您的情况下,您需要制作所有与块向量和/或向量向量相连的信号。

例如,如果您当前将信号定义为:
signal v_normal_in_0_sig : std_logic_vector(7 downto 0);

您将需要将其更改为:
type vector16 is array (natural range <>) of std_logic_vector(15 downto 0);
signal v_normal_in_sig : vector16(7 downto 0);

在这种情况下,您现在可以将信号用作 v_normal_in_sig(i)来连接到实体/组件的实例化生成的 i

请注意,如果您使用的是VHDL-2008,则可以执行以下操作...
type vector_array is array (natural range <>) of std_logic_vector;
signal v_normal_in_sig : vector_array(7 downto 0)(15 downto 0);

关于vhdl - 是否可以使用循环创建同一组件的多个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13194450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com