Hallo Zusammen,
ich hänge gerade an einer, an sich simplen, Aufgabe.
Für ein Wishbone Interconnect will ich an den Master kombinatorisch die
Daten des ausgewählten Slaves übergeben. Welcher Slave ausgewählt wurde,
steht in einem Vector. Wenn also bspw. bei 3 Slaves der erste selektiert
ist, steht in dem Vector "001", beim dritten "100". Ich habe mal
geguckt, wie andere das gemacht haben und habe das gefunden:
1 | gen_cs : for i in 0 to (g_memory_map'length - 1) generate
|
2 | ...
|
3 | x_wb_master_o.dat <= x_wb_slave_array_i(i).dat when s_cs_vector(i) = '1' else (others => 'Z');
|
4 | ...
|
5 | end generate;
|
Funktioniert in der Simu super, aber ich mag kein 'Z' für Sachen, die im
FPGA laufen. Alternativ habe ich mir das überlegt:
1 | p_assign_dat_out : process(x_wb_slave_array_i, s_cs_vector) is
|
2 | begin
|
3 | for i in 0 to (g_memory_map'length - 1) loop
|
4 | if s_cs_vector(i) = '1' then
|
5 | x_wb_master_o.dat <= x_wb_slave_array_i(i).dat;
|
6 | end if;
|
7 | end loop;
|
8 | end process p_assign_dat_out;
|
Was natürlich auch murks ist, weil das ein Latch erzeugt.
Ich komme einfach nicht darauf, wie's richtig wäre. Habt ihr einen Tipp?
Danke und viele Grüße
Achim