Line 33... |
Line 33... |
ei1, ei2, ei3, li0, li1, li2, li3, si4, wi4, ni4, ei4, li4, soa,
|
ei1, ei2, ei3, li0, li1, li2, li3, si4, wi4, ni4, ei4, li4, soa,
|
woa, noa, eoa, loa, imcfg, scfg, ncfg, wcfg, ecfg, lcfg
|
woa, noa, eoa, loa, imcfg, scfg, ncfg, wcfg, ecfg, lcfg
|
`ifdef ENABLE_BUFFERED_CLOS
|
`ifdef ENABLE_BUFFERED_CLOS
|
, soa4, woa4, noa4, eoa4, loa4
|
, soa4, woa4, noa4, eoa4, loa4
|
`endif
|
`endif
|
|
, rst_n
|
);
|
);
|
|
|
parameter MN = 2; // number of CMs
|
parameter MN = 2; // number of CMs
|
parameter NN = 2; // number of ports in an IM or OM, equ. to number of virtual circuits
|
parameter NN = 2; // number of ports in an IM or OM, equ. to number of virtual circuits
|
parameter DW = 8; // datawidth of a single virtual circuit/port
|
parameter DW = 8; // datawidth of a single virtual circuit/port
|
Line 76... |
Line 77... |
// configuration for CMs
|
// configuration for CMs
|
input [MN-1:0][1:0] scfg, ncfg;
|
input [MN-1:0][1:0] scfg, ncfg;
|
input [MN-1:0][3:0] wcfg, ecfg, lcfg;
|
input [MN-1:0][3:0] wcfg, ecfg, lcfg;
|
// no OMs
|
// no OMs
|
|
|
|
input rst_n; // globale active low reset
|
|
|
// output of IMs
|
// output of IMs
|
wire [MN-1:0][SCN-1:0] imos0, imos1, imos2, imos3;
|
wire [MN-1:0][SCN-1:0] imos0, imos1, imos2, imos3;
|
wire [MN-1:0][SCN-1:0] imow0, imow1, imow2, imow3;
|
wire [MN-1:0][SCN-1:0] imow0, imow1, imow2, imow3;
|
wire [MN-1:0][SCN-1:0] imon0, imon1, imon2, imon3;
|
wire [MN-1:0][SCN-1:0] imon0, imon1, imon2, imon3;
|
wire [MN-1:0][SCN-1:0] imoe0, imoe1, imoe2, imoe3;
|
wire [MN-1:0][SCN-1:0] imoe0, imoe1, imoe2, imoe3;
|
Line 87... |
Line 90... |
`ifdef ENABLE_CHANNEL_SLICING
|
`ifdef ENABLE_CHANNEL_SLICING
|
wire [MN-1:0][SCN-1:0] imos4, imow4, imon4, imoe4, imol4;
|
wire [MN-1:0][SCN-1:0] imos4, imow4, imon4, imoe4, imol4;
|
wire [MN-1:0][SCN-1:0] imosa, imowa, imona, imoea, imola;
|
wire [MN-1:0][SCN-1:0] imosa, imowa, imona, imoea, imola;
|
`ifdef ENABLE_BUFFERED_CLOS
|
`ifdef ENABLE_BUFFERED_CLOS
|
wire [MN-1:0][SCN-1:0] imosa4, imowa4, imona4, imoea4, imola4;
|
wire [MN-1:0][SCN-1:0] imosa4, imowa4, imona4, imoea4, imola4;
|
|
wire [MN-1:0][SCN-1:0] imosdeca, imowdeca, imondeca, imoedeca, imoldeca;
|
|
wire [MN-1:0][SCN-1:0] imoseofan, imoweofan, imoneofan, imoeeofan, imoleofan;
|
`endif
|
`endif
|
`else
|
`else
|
wire [MN-1:0] imos4, imow4, imon4, imoe4, imol4;
|
wire [MN-1:0] imos4, imow4, imon4, imoe4, imol4;
|
wire [MN-1:0] imosa, imowa, imona, imoea, imola;
|
wire [MN-1:0] imosa, imowa, imona, imoea, imola;
|
`ifdef ENABLE_BUFFERED_CLOS
|
`ifdef ENABLE_BUFFERED_CLOS
|
|
wire [MN-1:0] imosdeca, imowdeca, imondeca, imoedeca, imoldeca;
|
wire [MN-1:0] imosa4, imowa4, imona4, imoea4, imola4;
|
wire [MN-1:0] imosa4, imowa4, imona4, imoea4, imola4;
|
|
wire [MN-1:0] imoseofan, imoweofan, imoneofan, imoeeofan, imoleofan;
|
`endif
|
`endif
|
`endif
|
`endif
|
|
|
// input of CMs
|
// input of CMs
|
wire [MN-1:0][4:0][SCN-1:0] cmi0, cmi1, cmi2, cmi3;
|
wire [MN-1:0][4:0][SCN-1:0] cmi0, cmi1, cmi2, cmi3;
|
`ifdef ENABLE_CHANNEL_SLICING
|
`ifdef ENABLE_CHANNEL_SLICING
|
wire [MN-1:0][4:0][SCN-1:0] cmi4, cmia;
|
wire [MN-1:0][4:0][SCN-1:0] cmi4, cmia;
|
|
`ifdef ENABLE_BUFFERED_CLOS
|
|
wire [MN-1:0][4:0][SCN-1:0] cmian;
|
|
`endif
|
`else
|
`else
|
wire [MN-1:0][4:0] cmi4, cmia;
|
wire [MN-1:0][4:0] cmi4, cmia;
|
|
`ifdef ENABLE_BUFFERED_CLOS
|
|
wire [MN-1:0][4:0] cmian;
|
|
`endif
|
`endif
|
`endif
|
|
|
// output of CMs
|
// output of CMs
|
wire [MN-1:0][4:0][SCN-1:0] cmo0, cmo1, cmo2, cmo3;
|
wire [MN-1:0][4:0][SCN-1:0] cmo0, cmo1, cmo2, cmo3;
|
`ifdef ENABLE_CHANNEL_SLICING
|
`ifdef ENABLE_CHANNEL_SLICING
|
Line 224... |
Line 237... |
|
|
generate for(i=0; i<MN; i++) begin: IMSHF
|
generate for(i=0; i<MN; i++) begin: IMSHF
|
`ifdef ENABLE_BUFFERED_CLOS
|
`ifdef ENABLE_BUFFERED_CLOS
|
// the buffer stage between IM and CM
|
// the buffer stage between IM and CM
|
`ifdef ENABLE_CHANNEL_SLICING
|
`ifdef ENABLE_CHANNEL_SLICING
|
for(j=0; j<SCN; j++) begin:SC
|
for(j=0; j<SCN; j++) begin:SC_S
|
pipe4 #(.DW(2))
|
pipe4 #(.DW(2))
|
P (
|
P (
|
.o0 ( cmi0[i][0] ),
|
.o0 ( cmi0[i][0] ),
|
.o1 ( cmi1[i][0] ),
|
.o1 ( cmi1[i][0] ),
|
.o2 ( cmi2[i][0] ),
|
.o2 ( cmi2[i][0] ),
|
Line 241... |
Line 254... |
.oa ( cmian[i][0] )
|
.oa ( cmian[i][0] )
|
);
|
);
|
|
|
pipen #(.DW(1))
|
pipen #(.DW(1))
|
PEoF (
|
PEoF (
|
.d_in_a ( imosa4[i] ),
|
.d_in_a ( ), // imosa4[i] ),
|
.d_out ( cmi4[i][0] ),
|
.d_out ( cmi4[i][0] ),
|
.d_in ( imos4[i] ),
|
.d_in ( imos4[i] ),
|
.d_out_a ( cmian[i][0] ),
|
.d_out_a ( imoseofan[i] ),
|
);
|
);
|
|
|
|
ppc PCTL (
|
|
.deca ( imosdeca[i] ),
|
|
.dia ( imosa4[i] ),
|
|
.eof ( cmi4[i][0] ),
|
|
.doa ( cmia[i][0] ),
|
|
.dec (
|
|
);
|
|
|
|
assign cmian[i][0] = (~cmia[i][0])&rst_n;
|
|
assign imoseofan[i] = (imosdeca[i])&rst_n;
|
|
end // block: SC
|
|
|
|
pipen #(.DW(4))
|
|
S_PDIR (
|
|
.d_in_a (
|
|
|
|
|
|
|
|
|
`else
|
`else
|
// shuffle the interconnects between IMs and CMs
|
// shuffle the interconnects between IMs and CMs
|
assign cmi0[i][0] = imos0[i];
|
assign cmi0[i][0] = imos0[i];
|