8

コンポーネントがあります:

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ます。私がしたことは、正しい数で 8 つの異なるインスタンスを作成する Matlab スクリプトを作成することでした。しかし、ほとんど変更を加えていない同じコードを 170 行必要とするため、これは見苦しいソリューションです。コード内のループでコンポーネント (および可能であれば適切な信号) を作成して、混乱と行を削減する方法はありますか?

4

1 に答える 1

20

使用しようとしているのは、for...generate ステートメントです。

達成したいものに似た例を次に示します。

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 が現在次のように定義されているとします。

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);
于 2012-11-02T11:45:00.770 に答える