Moin moin,
ich bin gerade wirklich am verzweifeln.
Ich versuche einen multiplexer zu bauen, der beliebige Eingänge auf eine
feste Zahl an Ausgängen routen soll.
das ganze soll in Verilog und über einen generate-for block geschehen.
Meine Idee war nun einen "Selectvector" zu nutzen über den wählbar ist
wie die Eingänge auf die Ausgänge geroutet werden. (Das soll am besten
später auch in beide Richtungen funktionieren)
Für jeden Ausgang stehen 8 Bit zur Verfügung über die ein Eingang
gewählt werden kann.
In der Simulation funktioniert das auch. Jedenfalls wenn ich wirklich
nur Eingänge "links" und Ausgänge "rechts" am Block habe (hoffe ihr
versteht was ich damit meine.
Wenn ich jetzt aber versuch das zu Synthetisieren steigt der immer aus
weil angeblich mehrere Driver vorhanden sind.
Im folgenden mal ein Codeauszug:
1 | ...
|
2 |
|
3 | input [IF_channels:1] if_sel0 ,
|
4 |
|
5 | ...
|
6 |
|
7 | output reg [IO_channels:1] io_sel0 ,
|
8 |
|
9 | ...
|
10 |
|
11 | reg [127:0] sel_vect; //vector to select input-output pair
|
12 |
|
13 | genvar i, j;
|
14 | generate
|
15 | for(i=1; i<=IO_channels; i=i+1) begin : io_for
|
16 | for(j=1; j<=IF_channels; j=j+1) begin : if_for
|
17 | always @(*) begin
|
18 | if(sel_vect[(i*8)-1: ((i-1)*8)] == j) begin
|
19 | io_sel0[i] <= if_sel0[j];
|
20 | end
|
21 | end
|
22 | end
|
23 | end
|
24 | endgenerate
|
Ich hoffe mir kann hier jemand weiter helfen.
Grüße