Hallo,
ich habe in einem Design den schon mehrfach gelesenen
Rat befolgt, bei einem Datenbus keine Tristates in den
einzelnen Modulen zu verwenden, sondern einen Mux in der Top-Ebene.
Dieser sieht bei mir so aus:
1 | mux_signal <= ctrl_oe_r2 & tmp_oe_r2 & lcd_oe & stat_oe_r2 & codec_audio_en;
|
2 |
|
3 | MUX: process
|
4 | begin
|
5 | case mux_signal is
|
6 | when "01111" =>
|
7 | d_out <= d_out_ctrl;
|
8 | when "10111" =>
|
9 | d_out <= d_out_sr_tmp;
|
10 | when "11011" =>
|
11 | d_out <= d_out_c2;
|
12 | when "11101" =>
|
13 | d_out <= d_out_cs_control;
|
14 | when "11110" =>
|
15 | d_out <= d_out_audio;
|
16 | when others =>
|
17 | d_out <= (others => '-');
|
18 | end case;
|
19 | end process MUX;
|
Soweit so gut. ISE 8.1 macht aber daraus (ich gucke in der
RTL-Schematic) merkwürdige Sachen.
Das mux-signal wird nicht einmal, sondern fünfmal erzeugt, und dann wird
für jedes Element von d_out ein Konstrukt aus ANDs und OR5 gemacht.
(Jeweils d_out_xxx und ein Mux-Signal, das 5mal und damit ein OR5).
Obwohl das die gewünschte Funktion hat, muss ich doch stark zweifeln,
ob das so ideal ist, das muxen wird hier überhaupt nicht als solches
erkannt.
Kann ich das irgendwie anders schreiben, sodass mein Design ein bißchen
kleiner wird und der Mux wirklich ein Mux wird?