Line 22... |
Line 22... |
module inpbuf (/*AUTOARG*/
|
module inpbuf (/*AUTOARG*/
|
// Outputs
|
// Outputs
|
dia, cor, do0, do1, do2, do3, dot, dortg, vcr, swr,
|
dia, cor, do0, do1, do2, do3, dot, dortg, vcr, swr,
|
// Inputs
|
// Inputs
|
di0, di1, di2, di3, dit, divc, coa, doa, vcra, swrt, addrx, addry,
|
di0, di1, di2, di3, dit, divc, coa, doa, vcra, swrt, addrx, addry,
|
rstn
|
rst_n
|
);
|
);
|
|
|
parameter DW = 32; // data width
|
parameter DW = 32; // data width
|
parameter VCN = 2; // VC number
|
parameter VCN = 2; // VC number
|
parameter DIR = 0; // 0-4 south, west, north, east, local
|
parameter DIR = 0; // 0-4 south, west, north, east, local
|
Line 62... |
Line 62... |
input [VCN-1:0][SN-1:0] swrt;
|
input [VCN-1:0][SN-1:0] swrt;
|
|
|
// local addresses
|
// local addresses
|
input [7:0] addrx, addry;
|
input [7:0] addrx, addry;
|
|
|
input rstn;
|
input rst_n;
|
|
|
//-----------------------------
|
//-----------------------------
|
// VC_MUX
|
// VC_MUX
|
wire ivma, rua;
|
wire ivma, rua;
|
wire [SCN-1:0] di0m, di1m, di2m, di3m;
|
wire [SCN-1:0] di0m, di1m, di2m, di3m;
|
Line 115... |
Line 115... |
);
|
);
|
|
|
//c2 IVMA (.a0(ivma), .a1(rua), .q(dia)); divc is not checked
|
//c2 IVMA (.a0(ivma), .a1(rua), .q(dia)); divc is not checked
|
ctree #(.DW(3)) ACKT(.ci({ivma, rua, (|divcm)}), .co(dia));
|
ctree #(.DW(3)) ACKT(.ci({ivma, rua, (|divcm)}), .co(dia));
|
|
|
assign di0m = rstn ? di0 : 0;
|
assign di0m = rst_n ? di0 : 0;
|
assign di1m = rstn ? di1 : 0;
|
assign di1m = rst_n ? di1 : 0;
|
assign di2m = rstn ? di2 : 0;
|
assign di2m = rst_n ? di2 : 0;
|
assign di3m = rstn ? di3 : 0;
|
assign di3m = rst_n ? di3 : 0;
|
assign ditm = rstn ? dit : 0;
|
assign ditm = rst_n ? dit : 0;
|
assign divcm = rstn ? divc : 0;
|
assign divcm = rst_n ? divc : 0;
|
|
|
//---------------------------------------------
|
//---------------------------------------------
|
// the VC buffers
|
// the VC buffers
|
generate
|
generate
|
for(gbd=0; gbd<PD*2-2; gbd++) begin:BFN
|
for(gbd=0; gbd<PD*2-2; gbd++) begin:BFN
|
Line 141... |
Line 141... |
.i1 ( vcd1[gbd][gvc][gsub] ),
|
.i1 ( vcd1[gbd][gvc][gsub] ),
|
.i2 ( vcd2[gbd][gvc][gsub] ),
|
.i2 ( vcd2[gbd][gvc][gsub] ),
|
.i3 ( vcd3[gbd][gvc][gsub] ),
|
.i3 ( vcd3[gbd][gvc][gsub] ),
|
.oa ( vcdadn[gbd+1][gvc][gsub] )
|
.oa ( vcdadn[gbd+1][gvc][gsub] )
|
);
|
);
|
assign vcdadn[gbd+1][gvc][gsub] = (~vcdad[gbd+1][gvc][gsub])&rstn;
|
assign vcdadn[gbd+1][gvc][gsub] = (~vcdad[gbd+1][gvc][gsub])&rst_n;
|
end // block: SC
|
end // block: SC
|
|
|
pipen #(.DW(FT))
|
pipen #(.DW(FT))
|
TP (
|
TP (
|
.d_in ( vcdt[gbd][gvc] ),
|
.d_in ( vcdt[gbd][gvc] ),
|
.d_in_a ( vcdat[gbd][gvc] ),
|
.d_in_a ( vcdat[gbd][gvc] ),
|
.d_out ( vcdt[gbd+1][gvc] ),
|
.d_out ( vcdt[gbd+1][gvc] ),
|
.d_out_a ( vcdatn[gbd+1][gvc] )
|
.d_out_a ( vcdatn[gbd+1][gvc] )
|
);
|
);
|
assign vcdatn[gbd+1][gvc] = (~vcdat[gbd+1][gvc])&rstn;
|
assign vcdatn[gbd+1][gvc] = (~vcdat[gbd+1][gvc])&rst_n;
|
|
|
end // block: V
|
end // block: V
|
end // block: BFN
|
end // block: BFN
|
|
|
for(gvc=0; gvc<VCN; gvc++) begin:BFNV
|
for(gvc=0; gvc<VCN; gvc++) begin:BFNV
|
Line 186... |
Line 186... |
.i1 ( vcd1[gbd][gvc][gsub] ),
|
.i1 ( vcd1[gbd][gvc][gsub] ),
|
.i2 ( vcd2[gbd][gvc][gsub] ),
|
.i2 ( vcd2[gbd][gvc][gsub] ),
|
.i3 ( vcd3[gbd][gvc][gsub] ),
|
.i3 ( vcd3[gbd][gvc][gsub] ),
|
.oa ( vcdadn[gbd+1][gvc][gsub] )
|
.oa ( vcdadn[gbd+1][gvc][gsub] )
|
);
|
);
|
assign vcdadn[gbd+1][gvc][gsub] = (~vcdad[gbd+1][gvc][gsub])&rstn;
|
assign vcdadn[gbd+1][gvc][gsub] = (~vcdad[gbd+1][gvc][gsub])&rst_n;
|
end // block: SC
|
end // block: SC
|
|
|
pipen #(.DW(FT))
|
pipen #(.DW(FT))
|
TP (
|
TP (
|
.d_in ( vcdt[gbd][gvc] ),
|
.d_in ( vcdt[gbd][gvc] ),
|
.d_in_a ( vcdat[gbd][gvc] ),
|
.d_in_a ( vcdat[gbd][gvc] ),
|
.d_out ( vcdt[gbd+1][gvc] ),
|
.d_out ( vcdt[gbd+1][gvc] ),
|
.d_out_a ( vcdatn[gbd+1][gvc] )
|
.d_out_a ( vcdatn[gbd+1][gvc] )
|
);
|
);
|
|
|
assign vcdatn[gbd+1][gvc] = (~vcdat[gbd+1][gvc])&rstn;
|
assign vcdatn[gbd+1][gvc] = (~vcdat[gbd+1][gvc])&rst_n;
|
|
|
pipen #(.DW(2))
|
pipen #(.DW(2))
|
CTP (
|
CTP (
|
.d_in ( vcft[gbd][gvc] ),
|
.d_in ( vcft[gbd][gvc] ),
|
.d_in_a ( vcfta[gbd][gvc] ),
|
.d_in_a ( vcfta[gbd][gvc] ),
|
.d_out ( vcft[gbd+1][gvc] ),
|
.d_out ( vcft[gbd+1][gvc] ),
|
.d_out_a ( vcftan[gbd+1][gvc] )
|
.d_out_a ( vcftan[gbd+1][gvc] )
|
);
|
);
|
|
|
assign vcftan[gbd+1][gvc] = (~vcfta[gbd+1][gvc])&rstn;
|
assign vcftan[gbd+1][gvc] = (~vcfta[gbd+1][gvc])&rst_n;
|
end // block: V
|
end // block: V
|
end // block: BFL2
|
end // block: BFL2
|
|
|
for(gvc=0; gvc<VCN; gvc++) begin:BFL2V
|
for(gvc=0; gvc<VCN; gvc++) begin:BFL2V
|
ctree #(.DW(SCN+2)) ACKT(.ci({vcfta[PD*2-2][gvc], vcdat[PD*2-2][gvc], vcdad[PD*2-2][gvc]}), .co(vcda[0][gvc]));
|
ctree #(.DW(SCN+2)) ACKT(.ci({vcfta[PD*2-2][gvc], vcdat[PD*2-2][gvc], vcdad[PD*2-2][gvc]}), .co(vcda[0][gvc]));
|
Line 231... |
Line 231... |
pipen #(.DW(SN))
|
pipen #(.DW(SN))
|
RP (
|
RP (
|
.d_in ( swrt[gvc] ),
|
.d_in ( swrt[gvc] ),
|
.d_in_a ( swa[gvc] ),
|
.d_in_a ( swa[gvc] ),
|
.d_out ( rtg[gvc] ),
|
.d_out ( rtg[gvc] ),
|
.d_out_a ( (~vcda[1][gvc])&rstn )
|
.d_out_a ( (~vcda[1][gvc])&rst_n )
|
);
|
);
|
end
|
end
|
endgenerate
|
endgenerate
|
|
|
generate
|
generate
|
for(gvc=0; gvc<VCN; gvc++) begin:LPS
|
for(gvc=0; gvc<VCN; gvc++) begin:LPS
|
|
|
// credit control
|
// credit control
|
dc2 FCP (.q(cor[gvc]), .d(|rtg[gvc]), .a((~coa[gvc])&rstn));
|
dc2 FCP (.q(cor[gvc]), .d(|rtg[gvc]), .a((~coa[gvc])&rst_n));
|
|
|
// output name conversation
|
// output name conversation
|
assign do0[gvc] = vcd0[PD*2][gvc];
|
assign do0[gvc] = vcd0[PD*2][gvc];
|
assign do1[gvc] = vcd1[PD*2][gvc];
|
assign do1[gvc] = vcd1[PD*2][gvc];
|
assign do2[gvc] = vcd2[PD*2][gvc];
|
assign do2[gvc] = vcd2[PD*2][gvc];
|
Line 261... |
Line 261... |
// routing unit
|
// routing unit
|
rtu #(.VCN(VCN), .DIR(DIR), .SN(SN), .PD(2))
|
rtu #(.VCN(VCN), .DIR(DIR), .SN(SN), .PD(2))
|
RTC (
|
RTC (
|
.dia ( rua ),
|
.dia ( rua ),
|
.dort ( vcr ),
|
.dort ( vcr ),
|
.rstn ( rstn ),
|
.rst_n ( rst_n ),
|
.di0 ( di0m[3:0] ),
|
.di0 ( di0m[3:0] ),
|
.di1 ( di1m[3:0] ),
|
.di1 ( di1m[3:0] ),
|
.di2 ( di2m[3:0] ),
|
.di2 ( di2m[3:0] ),
|
.di3 ( di3m[3:0] ),
|
.di3 ( di3m[3:0] ),
|
.dit ( ditm ),
|
.dit ( ditm ),
|