4
\$\begingroup\$

So I know how to instantiate multiple instances of the same component in VHDL, see the example code:

  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;

I want to know if it's possible to retrieve the instantiation number within the code, so which "I" belongs to which instantiation, from within the instantiated code.

edit: I want to use the instantiation number, because that is also the address for which device I want to address. So I'm creating an x number of instances, each for a certain device interfaces. It would simplify some stuff when the instance itself knows which instance number it is.

edit2: Can I generic map I to some integer generic?

\$\endgroup\$
3
  • \$\begingroup\$ not clear to me what you want – I is the number of the instantiation. \$\endgroup\$ Commented Sep 28, 2021 at 12:50
  • \$\begingroup\$ This "address" is going where? It is supposed to be "carved" in some hardware, right? Like certain wires that are going from the master to a specific slave device. So generate this hardware within this loop. Best way to describe what you are trying to do is draw a schematic showing the wanted generated topology. \$\endgroup\$
    – Eugene Sh.
    Commented Sep 28, 2021 at 13:20
  • 1
    \$\begingroup\$ Generic map ought to work just fine. \$\endgroup\$
    – user16324
    Commented Sep 28, 2021 at 16:09

1 Answer 1

8
\$\begingroup\$

You can create an integer generic on the instantiated component and pass it the loop control variable value.

Then your instance can use the generic value to distinguish itself from the other instances.

  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 generic map (n => I)
        port map
        (DIN(I), CLK, RESET, DOUT(I));
   end generate GEN_REG;
end GEN;
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.