Hi,
ich möchte mehrere Instanzen eines Blocks (Peripherie) haben können, die 
je nach Adresse selektiert werden. In der Architecture habe ich dazu 
folgenden Code (gekürzt):
1  | GEN_channel_src :
  | 
2  | for I in 0 to NUM_CHANNEL_SRC-1 generate
  | 
3  |   chsrc : channel_src
  | 
4  |   port map (
  | 
5  |     clk    => clk,
  | 
6  |     sreq   => chsrc_sreq(I),     -- request
  | 
7  |     saddr  => saddr(5 downto 0), -- address
  | 
8  |     swdata => swdata,
  | 
9  |     srdata => chsrc_srdata(I),
  | 
10  |     sready => chsrc_sready(I),
  | 
11  |   );
  | 
12  |   chsrc_sreq(I) <= sreq when
  | 
13  |     saddr(19 downto 10) = "1000000001" and
  | 
14  |     saddr(9 downto 6) = std_logic_vector(to_unsigned(natural(I), 4))
  | 
15  |     else "00";
  | 
16  | end generate;
  | 
Die vorwärts gerichteten Signale (in den Block hinein) kriege ich so 
verarbeitet, aber ich habe ein Problem mit den rückwärts gerichteten 
Signalen. Bisher hatte ich da ein concurrent assignment:
1  |   srdata <= ctrl_srdata or chsrc_srdata(0) or chsrc_srdata(1) or chsrc_srdata(2) or chsrc_srdata(3);
  | 
2  |   sready <= ctrl_sready and chsrc_sready(0) and chsrc_sready(1) and chsrc_sready(2) and chsrc_sready(3);
  | 
Was ich natürlich immer anpassen muss, wenn sich die Anzahl der 
Instanzen ändert. Im Prinzip will ich ein wired-or bzw. wired-and haben, 
aber Tristate gibt's im FPGA nicht (muss synthetisierbar sein).
Mit Variablen in einem process sollte das gehen, aber dann ist die 
Verdrahtung optisch getrennt von den Generates. Gibt es da eine bessere 
Lösung?
Schöne Grüße