OpenCores
URL https://opencores.org/ocsvn/async_sdm_noc/async_sdm_noc/trunk

Subversion Repositories async_sdm_noc

[/] [async_sdm_noc/] [trunk/] [vc/] [src/] [dcb_vc.v] - Diff between revs 47 and 53

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 47 Rev 53
/*
/*
 Asynchronous SDM NoC
 Asynchronous SDM NoC
 (C)2011 Wei Song
 (C)2011 Wei Song
 Advanced Processor Technologies Group
 Advanced Processor Technologies Group
 Computer Science, the Univ. of Manchester, UK
 Computer Science, the Univ. of Manchester, UK
 
 
 Authors:
 Authors:
 Wei Song     wsong83@gmail.com
 Wei Song     wsong83@gmail.com
 
 
 License: LGPL 3.0 or later
 License: LGPL 3.0 or later
 
 
 data crossbar for the VC router
 data crossbar for the VC router
 
 
 History:
 History:
 04/04/2010  Initial version. <wsong83@gmail.com>
 04/04/2010  Initial version. <wsong83@gmail.com>
 12/05/2010  Use MPxP crossbar. <wsong83@gmail.com>
 12/05/2010  Use MPxP crossbar. <wsong83@gmail.com>
 02/06/2011  Clean up for opensource. <wsong83@gmail.com>
 02/06/2011  Clean up for opensource. <wsong83@gmail.com>
 
 09/06/2011  Remove the C-elements as muxes already have C-elements inside. <wsong83@gmail.com>
 
 
*/
*/
 
 
module dcb_vc (/*AUTOARG*/
module dcb_vc (/*AUTOARG*/
   // Outputs
   // Outputs
   dia, do0, do1, do2, do3, dot,
   dia, do0, do1, do2, do3, dot,
   // Inputs
   // Inputs
   di0, di1, di2, di3, dit, srtg, nrtg, lrtg, wrtg, ertg, doa
   di0, di1, di2, di3, dit, srtg, nrtg, lrtg, wrtg, ertg, doa
   );
   );
   parameter DW = 32;           // data width of a VC
   parameter DW = 32;           // data width of a VC
   parameter FT = 3;            // wire count of the flit tyoe bus
   parameter FT = 3;            // wire count of the flit tyoe bus
   parameter VCN = 2;           // number of VC per direction
   parameter VCN = 2;           // number of VC per direction
   parameter SCN = DW/2;
   parameter SCN = DW/2;
 
 
   input [4:0][VCN-1:0][SCN-1:0]   di0, di1, di2, di3; // data input
   input [4:0][VCN-1:0][SCN-1:0]   di0, di1, di2, di3; // data input
   input [4:0][VCN-1:0][FT-1:0]    dit;                   // flit type input
   input [4:0][VCN-1:0][FT-1:0]    dit;                   // flit type input
   output [4:0][VCN-1:0]     dia;                // input ack
   output [4:0][VCN-1:0]     dia;                // input ack
   input [VCN-1:0][3:0]      srtg, nrtg, lrtg;   // routing guide
   input [VCN-1:0][3:0]      srtg, nrtg, lrtg;   // routing guide
   input [VCN-1:0][1:0]      wrtg, ertg;
   input [VCN-1:0][1:0]      wrtg, ertg;
 
 
   output [4:0][SCN-1:0]     do0, do1, do2, do3; // data output
   output [4:0][SCN-1:0]     do0, do1, do2, do3; // data output
   output [4:0][FT-1:0]      dot;                // flit type output
   output [4:0][FT-1:0]      dot;                // flit type output
   input [4:0]                      doa;                // output ack
   input [4:0]                      doa;                // output ack
 
 
   // internal wires
   // internal wires
   wire [VCN-1:0][3:0][SCN-1:0]    s0, s1, s2, s3;
   wire [VCN-1:0][3:0][SCN-1:0]    s0, s1, s2, s3;
   wire [VCN-1:0][3:0][FT-1:0]        sft;
   wire [VCN-1:0][3:0][FT-1:0]        sft;
   wire [VCN-1:0][3:0]               sa;
   wire [VCN-1:0][3:0]               sa;
   wire [VCN-1:0][1:0][SCN-1:0]    w0, w1, w2, w3;
   wire [VCN-1:0][1:0][SCN-1:0]    w0, w1, w2, w3;
   wire [VCN-1:0][1:0][FT-1:0]        wft;
   wire [VCN-1:0][1:0][FT-1:0]        wft;
   wire [VCN-1:0][1:0]               wa;
   wire [VCN-1:0][1:0]               wa;
   wire [VCN-1:0][3:0][SCN-1:0]    n0, n1, n2, n3;
   wire [VCN-1:0][3:0][SCN-1:0]    n0, n1, n2, n3;
   wire [VCN-1:0][3:0][FT-1:0]        nft;
   wire [VCN-1:0][3:0][FT-1:0]        nft;
   wire [VCN-1:0][3:0]               na;
   wire [VCN-1:0][3:0]               na;
   wire [VCN-1:0][1:0][SCN-1:0]    e0, e1, e2, e3;
   wire [VCN-1:0][1:0][SCN-1:0]    e0, e1, e2, e3;
   wire [VCN-1:0][1:0][FT-1:0]        eft;
   wire [VCN-1:0][1:0][FT-1:0]        eft;
   wire [VCN-1:0][1:0]               ea;
   wire [VCN-1:0][1:0]               ea;
   wire [VCN-1:0][3:0][SCN-1:0]    l0, l1, l2, l3;
   wire [VCN-1:0][3:0][SCN-1:0]    l0, l1, l2, l3;
   wire [VCN-1:0][3:0][FT-1:0]        lft;
   wire [VCN-1:0][3:0][FT-1:0]        lft;
   wire [VCN-1:0][3:0]               la;
   wire [VCN-1:0][3:0]               la;
 
 
   wire [3:0][SCN-1:0][VCN-1:0]    ss0, ss1, ss2, ss3;
   wire [3:0][SCN-1:0][VCN-1:0]    ss0, ss1, ss2, ss3;
   wire [3:0][FT-1:0][VCN-1:0]        ssft;
   wire [3:0][FT-1:0][VCN-1:0]        ssft;
   wire [1:0][SCN-1:0][VCN-1:0]    sw0, sw1, sw2, sw3;
   wire [1:0][SCN-1:0][VCN-1:0]    sw0, sw1, sw2, sw3;
   wire [1:0][FT-1:0][VCN-1:0]        swft;
   wire [1:0][FT-1:0][VCN-1:0]        swft;
   wire [3:0][SCN-1:0][VCN-1:0]    sn0, sn1, sn2, sn3;
   wire [3:0][SCN-1:0][VCN-1:0]    sn0, sn1, sn2, sn3;
   wire [3:0][FT-1:0][VCN-1:0]        snft;
   wire [3:0][FT-1:0][VCN-1:0]        snft;
   wire [1:0][SCN-1:0][VCN-1:0]    se0, se1, se2, se3;
   wire [1:0][SCN-1:0][VCN-1:0]    se0, se1, se2, se3;
   wire [1:0][FT-1:0][VCN-1:0]        seft;
   wire [1:0][FT-1:0][VCN-1:0]        seft;
   wire [3:0][SCN-1:0][VCN-1:0]    sl0, sl1, sl2, sl3;
   wire [3:0][SCN-1:0][VCN-1:0]    sl0, sl1, sl2, sl3;
   wire [3:0][FT-1:0][VCN-1:0]        slft;
   wire [3:0][FT-1:0][VCN-1:0]        slft;
 
 
   wire [3:0][SCN-1:0]               ms0, ms1, ms2, ms3;
   wire [3:0][SCN-1:0]               ms0, ms1, ms2, ms3;
   wire [3:0][FT-1:0]                msft;
   wire [3:0][FT-1:0]                msft;
   wire [1:0][SCN-1:0]               mw0, mw1, mw2, mw3;
   wire [1:0][SCN-1:0]               mw0, mw1, mw2, mw3;
   wire [1:0][FT-1:0]                mwft;
   wire [1:0][FT-1:0]                mwft;
   wire [3:0][SCN-1:0]               mn0, mn1, mn2, mn3;
   wire [3:0][SCN-1:0]               mn0, mn1, mn2, mn3;
   wire [3:0][FT-1:0]                mnft;
   wire [3:0][FT-1:0]                mnft;
   wire [1:0][SCN-1:0]               me0, me1, me2, me3;
   wire [1:0][SCN-1:0]               me0, me1, me2, me3;
   wire [1:0][FT-1:0]                meft;
   wire [1:0][FT-1:0]                meft;
   wire [3:0][SCN-1:0]               ml0, ml1, ml2, ml3;
   wire [3:0][SCN-1:0]               ml0, ml1, ml2, ml3;
   wire [3:0][FT-1:0]                mlft;
   wire [3:0][FT-1:0]                mlft;
 
 
   genvar                 i,j,k;
   genvar                 i,j,k;
 
 
   generate
   generate
      // demux using the routing guides
      // demux using the routing guides
      for(i=0; i<VCN; i++) begin: IMX
      for(i=0; i<VCN; i++) begin: IMX
         vcdmux #(.DW(DW), .VCN(4))
         vcdmux #(.DW(DW), .VCN(4))
         SDMX(
         SDMX(
               .dia  ( dia[0][i]    ),
               .dia  ( dia[0][i]    ),
               .do0  ( s0[i]        ),
               .do0  ( s0[i]        ),
               .do1  ( s1[i]        ),
               .do1  ( s1[i]        ),
               .do2  ( s2[i]        ),
               .do2  ( s2[i]        ),
               .do3  ( s3[i]        ),
               .do3  ( s3[i]        ),
               .dot  ( sft[i]       ),
               .dot  ( sft[i]       ),
               .di0  ( di0[0][i]    ),
               .di0  ( di0[0][i]    ),
               .di1  ( di1[0][i]    ),
               .di1  ( di1[0][i]    ),
               .di2  ( di2[0][i]    ),
               .di2  ( di2[0][i]    ),
               .di3  ( di3[0][i]    ),
               .di3  ( di3[0][i]    ),
               .dit  ( dit[0][i]    ),
               .dit  ( dit[0][i]    ),
               .divc ( srtg[i]      ),
               .divc ( srtg[i]      ),
               .doa  ( sa[i]        )
               .doa  ( sa[i]        )
               );
               );
 
 
         vcdmux #(.DW(DW), .VCN(2))
         vcdmux #(.DW(DW), .VCN(2))
         WDMX(
         WDMX(
               .dia  ( dia[1][i]    ),
               .dia  ( dia[1][i]    ),
               .do0  ( w0[i]        ),
               .do0  ( w0[i]        ),
               .do1  ( w1[i]        ),
               .do1  ( w1[i]        ),
               .do2  ( w2[i]        ),
               .do2  ( w2[i]        ),
               .do3  ( w3[i]        ),
               .do3  ( w3[i]        ),
               .dot  ( wft[i]       ),
               .dot  ( wft[i]       ),
               .di0  ( di0[1][i]    ),
               .di0  ( di0[1][i]    ),
               .di1  ( di1[1][i]    ),
               .di1  ( di1[1][i]    ),
               .di2  ( di2[1][i]    ),
               .di2  ( di2[1][i]    ),
               .di3  ( di3[1][i]    ),
               .di3  ( di3[1][i]    ),
               .dit  ( dit[1][i]    ),
               .dit  ( dit[1][i]    ),
               .divc ( wrtg[i]      ),
               .divc ( wrtg[i]      ),
               .doa  ( wa[i]        )
               .doa  ( wa[i]        )
               );
               );
 
 
         vcdmux #(.DW(DW), .VCN(4))
         vcdmux #(.DW(DW), .VCN(4))
         NDMX(
         NDMX(
               .dia  ( dia[2][i]    ),
               .dia  ( dia[2][i]    ),
               .do0  ( n0[i]        ),
               .do0  ( n0[i]        ),
               .do1  ( n1[i]        ),
               .do1  ( n1[i]        ),
               .do2  ( n2[i]        ),
               .do2  ( n2[i]        ),
               .do3  ( n3[i]        ),
               .do3  ( n3[i]        ),
               .dot  ( nft[i]       ),
               .dot  ( nft[i]       ),
               .di0  ( di0[2][i]    ),
               .di0  ( di0[2][i]    ),
               .di1  ( di1[2][i]    ),
               .di1  ( di1[2][i]    ),
               .di2  ( di2[2][i]    ),
               .di2  ( di2[2][i]    ),
               .di3  ( di3[2][i]    ),
               .di3  ( di3[2][i]    ),
               .dit  ( dit[2][i]    ),
               .dit  ( dit[2][i]    ),
               .divc ( nrtg[i]      ),
               .divc ( nrtg[i]      ),
               .doa  ( na[i]        )
               .doa  ( na[i]        )
               );
               );
 
 
         vcdmux #(.DW(DW), .VCN(2))
         vcdmux #(.DW(DW), .VCN(2))
         EDMX(
         EDMX(
               .dia  ( dia[3][i]    ),
               .dia  ( dia[3][i]    ),
               .do0  ( e0[i]        ),
               .do0  ( e0[i]        ),
               .do1  ( e1[i]        ),
               .do1  ( e1[i]        ),
               .do2  ( e2[i]        ),
               .do2  ( e2[i]        ),
               .do3  ( e3[i]        ),
               .do3  ( e3[i]        ),
               .dot  ( eft[i]       ),
               .dot  ( eft[i]       ),
               .di0  ( di0[3][i]    ),
               .di0  ( di0[3][i]    ),
               .di1  ( di1[3][i]    ),
               .di1  ( di1[3][i]    ),
               .di2  ( di2[3][i]    ),
               .di2  ( di2[3][i]    ),
               .di3  ( di3[3][i]    ),
               .di3  ( di3[3][i]    ),
               .dit  ( dit[3][i]    ),
               .dit  ( dit[3][i]    ),
               .divc ( ertg[i]      ),
               .divc ( ertg[i]      ),
               .doa  ( ea[i]        )
               .doa  ( ea[i]        )
               );
               );
 
 
         vcdmux #(.DW(DW), .VCN(4))
         vcdmux #(.DW(DW), .VCN(4))
         LDMX(
         LDMX(
               .dia  ( dia[4][i]    ),
               .dia  ( dia[4][i]    ),
               .do0  ( l0[i]        ),
               .do0  ( l0[i]        ),
               .do1  ( l1[i]        ),
               .do1  ( l1[i]        ),
               .do2  ( l2[i]        ),
               .do2  ( l2[i]        ),
               .do3  ( l3[i]        ),
               .do3  ( l3[i]        ),
               .dot  ( lft[i]       ),
               .dot  ( lft[i]       ),
               .di0  ( di0[4][i]    ),
               .di0  ( di0[4][i]    ),
               .di1  ( di1[4][i]    ),
               .di1  ( di1[4][i]    ),
               .di2  ( di2[4][i]    ),
               .di2  ( di2[4][i]    ),
               .di3  ( di3[4][i]    ),
               .di3  ( di3[4][i]    ),
               .dit  ( dit[4][i]    ),
               .dit  ( dit[4][i]    ),
               .divc ( lrtg[i]      ),
               .divc ( lrtg[i]      ),
               .doa  ( la[i]        )
               .doa  ( la[i]        )
               );
               );
 
 
         // acknowledgement
         // acknowledgement
         c2 SA0 (.a0(srtg[i][0]), .a1(doa[1]), .q(sa[i][0]));
         /*
         c2 SA1 (.a0(srtg[i][1]), .a1(doa[2]), .q(sa[i][1]));
         c2 SA0 (.a0(srtg[i][0]), .a1(doa[1]), .q(sa[i][0]));
         c2 SA2 (.a0(srtg[i][2]), .a1(doa[3]), .q(sa[i][2]));
         c2 SA1 (.a0(srtg[i][1]), .a1(doa[2]), .q(sa[i][1]));
         c2 SA3 (.a0(srtg[i][3]), .a1(doa[4]), .q(sa[i][3]));
         c2 SA2 (.a0(srtg[i][2]), .a1(doa[3]), .q(sa[i][2]));
         c2 WA0 (.a0(wrtg[i][0]), .a1(doa[3]), .q(wa[i][0]));
         c2 SA3 (.a0(srtg[i][3]), .a1(doa[4]), .q(sa[i][3]));
         c2 WA1 (.a0(wrtg[i][1]), .a1(doa[4]), .q(wa[i][1]));
         c2 WA0 (.a0(wrtg[i][0]), .a1(doa[3]), .q(wa[i][0]));
         c2 NA0 (.a0(nrtg[i][0]), .a1(doa[0]), .q(na[i][0]));
         c2 WA1 (.a0(wrtg[i][1]), .a1(doa[4]), .q(wa[i][1]));
         c2 NA1 (.a0(nrtg[i][1]), .a1(doa[1]), .q(na[i][1]));
         c2 NA0 (.a0(nrtg[i][0]), .a1(doa[0]), .q(na[i][0]));
         c2 NA2 (.a0(nrtg[i][2]), .a1(doa[3]), .q(na[i][2]));
         c2 NA1 (.a0(nrtg[i][1]), .a1(doa[1]), .q(na[i][1]));
         c2 NA3 (.a0(nrtg[i][3]), .a1(doa[4]), .q(na[i][3]));
         c2 NA2 (.a0(nrtg[i][2]), .a1(doa[3]), .q(na[i][2]));
         c2 EA0 (.a0(ertg[i][0]), .a1(doa[1]), .q(ea[i][0]));
         c2 NA3 (.a0(nrtg[i][3]), .a1(doa[4]), .q(na[i][3]));
         c2 EA1 (.a0(ertg[i][1]), .a1(doa[4]), .q(ea[i][1]));
         c2 EA0 (.a0(ertg[i][0]), .a1(doa[1]), .q(ea[i][0]));
         c2 LA0 (.a0(lrtg[i][0]), .a1(doa[0]), .q(la[i][0]));
         c2 EA1 (.a0(ertg[i][1]), .a1(doa[4]), .q(ea[i][1]));
         c2 LA1 (.a0(lrtg[i][1]), .a1(doa[1]), .q(la[i][1]));
         c2 LA0 (.a0(lrtg[i][0]), .a1(doa[0]), .q(la[i][0]));
         c2 LA2 (.a0(lrtg[i][2]), .a1(doa[2]), .q(la[i][2]));
         c2 LA1 (.a0(lrtg[i][1]), .a1(doa[1]), .q(la[i][1]));
         c2 LA3 (.a0(lrtg[i][3]), .a1(doa[3]), .q(la[i][3]));
         c2 LA2 (.a0(lrtg[i][2]), .a1(doa[2]), .q(la[i][2]));
 
         c2 LA3 (.a0(lrtg[i][3]), .a1(doa[3]), .q(la[i][3]));
 
          */
 
         assign sa[i][0] = doa[1];
 
         assign sa[i][1] = doa[2];
 
         assign sa[i][2] = doa[3];
 
         assign sa[i][3] = doa[4];
 
         assign wa[i][0] = doa[3];
 
         assign wa[i][1] = doa[4];
 
         assign na[i][0] = doa[0];
 
         assign na[i][1] = doa[1];
 
         assign na[i][2] = doa[3];
 
         assign na[i][3] = doa[4];
 
         assign ea[i][0] = doa[1];
 
         assign ea[i][1] = doa[4];
 
         assign la[i][0] = doa[0];
 
         assign la[i][1] = doa[1];
 
         assign la[i][2] = doa[2];
 
         assign la[i][3] = doa[3];
 
 
      end // block: IMX
      end // block: IMX
   endgenerate
   endgenerate
 
 
   generate
   generate
      for(i=0; i<VCN; i++) begin: V
      for(i=0; i<VCN; i++) begin: V
         for(j=0; j<4; j++) begin: D0
         for(j=0; j<4; j++) begin: D0
            for(k=0; k<SCN; k++) begin: D
            for(k=0; k<SCN; k++) begin: D
               assign ss0[j][k][i] = s0[i][j][k];
               assign ss0[j][k][i] = s0[i][j][k];
               assign ss1[j][k][i] = s1[i][j][k];
               assign ss1[j][k][i] = s1[i][j][k];
               assign ss2[j][k][i] = s2[i][j][k];
               assign ss2[j][k][i] = s2[i][j][k];
               assign ss3[j][k][i] = s3[i][j][k];
               assign ss3[j][k][i] = s3[i][j][k];
               assign sn0[j][k][i] = n0[i][j][k];
               assign sn0[j][k][i] = n0[i][j][k];
               assign sn1[j][k][i] = n1[i][j][k];
               assign sn1[j][k][i] = n1[i][j][k];
               assign sn2[j][k][i] = n2[i][j][k];
               assign sn2[j][k][i] = n2[i][j][k];
               assign sn3[j][k][i] = n3[i][j][k];
               assign sn3[j][k][i] = n3[i][j][k];
               assign sl0[j][k][i] = l0[i][j][k];
               assign sl0[j][k][i] = l0[i][j][k];
               assign sl1[j][k][i] = l1[i][j][k];
               assign sl1[j][k][i] = l1[i][j][k];
               assign sl2[j][k][i] = l2[i][j][k];
               assign sl2[j][k][i] = l2[i][j][k];
               assign sl3[j][k][i] = l3[i][j][k];
               assign sl3[j][k][i] = l3[i][j][k];
            end // block: D
            end // block: D
            for(k=0; k<FT; k++) begin: T
            for(k=0; k<FT; k++) begin: T
               assign ssft[j][k][i] = sft[i][j][k];
               assign ssft[j][k][i] = sft[i][j][k];
               assign snft[j][k][i] = nft[i][j][k];
               assign snft[j][k][i] = nft[i][j][k];
               assign slft[j][k][i] = lft[i][j][k];
               assign slft[j][k][i] = lft[i][j][k];
            end // block: T
            end // block: T
         end // block: D0
         end // block: D0
 
 
         for(j=0; j<2; j++) begin: D1
         for(j=0; j<2; j++) begin: D1
            for(k=0; k<SCN; k++) begin: D
            for(k=0; k<SCN; k++) begin: D
               assign sw0[j][k][i] = w0[i][j][k];
               assign sw0[j][k][i] = w0[i][j][k];
               assign sw1[j][k][i] = w1[i][j][k];
               assign sw1[j][k][i] = w1[i][j][k];
               assign sw2[j][k][i] = w2[i][j][k];
               assign sw2[j][k][i] = w2[i][j][k];
               assign sw3[j][k][i] = w3[i][j][k];
               assign sw3[j][k][i] = w3[i][j][k];
               assign se0[j][k][i] = e0[i][j][k];
               assign se0[j][k][i] = e0[i][j][k];
               assign se1[j][k][i] = e1[i][j][k];
               assign se1[j][k][i] = e1[i][j][k];
               assign se2[j][k][i] = e2[i][j][k];
               assign se2[j][k][i] = e2[i][j][k];
               assign se3[j][k][i] = e3[i][j][k];
               assign se3[j][k][i] = e3[i][j][k];
            end // block: D
            end // block: D
            for(k=0; k<FT; k++) begin: T
            for(k=0; k<FT; k++) begin: T
               assign swft[j][k][i] = wft[i][j][k];
               assign swft[j][k][i] = wft[i][j][k];
               assign seft[j][k][i] = eft[i][j][k];
               assign seft[j][k][i] = eft[i][j][k];
            end // block: T
            end // block: T
         end // block: D1
         end // block: D1
      end
      end
 
 
      for(j=0; j<4; j++) begin: D2
      for(j=0; j<4; j++) begin: D2
         for(k=0; k<SCN; k++) begin: D
         for(k=0; k<SCN; k++) begin: D
            assign ms0[j][k] = |ss0[j][k];
            assign ms0[j][k] = |ss0[j][k];
            assign ms1[j][k] = |ss1[j][k];
            assign ms1[j][k] = |ss1[j][k];
            assign ms2[j][k] = |ss2[j][k];
            assign ms2[j][k] = |ss2[j][k];
            assign ms3[j][k] = |ss3[j][k];
            assign ms3[j][k] = |ss3[j][k];
            assign mn0[j][k] = |sn0[j][k];
            assign mn0[j][k] = |sn0[j][k];
            assign mn1[j][k] = |sn1[j][k];
            assign mn1[j][k] = |sn1[j][k];
            assign mn2[j][k] = |sn2[j][k];
            assign mn2[j][k] = |sn2[j][k];
            assign mn3[j][k] = |sn3[j][k];
            assign mn3[j][k] = |sn3[j][k];
            assign ml0[j][k] = |sl0[j][k];
            assign ml0[j][k] = |sl0[j][k];
            assign ml1[j][k] = |sl1[j][k];
            assign ml1[j][k] = |sl1[j][k];
            assign ml2[j][k] = |sl2[j][k];
            assign ml2[j][k] = |sl2[j][k];
            assign ml3[j][k] = |sl3[j][k];
            assign ml3[j][k] = |sl3[j][k];
         end // block: D
         end // block: D
         for(k=0; k<FT; k++) begin: T
         for(k=0; k<FT; k++) begin: T
            assign msft[j][k] = |ssft[j][k];
            assign msft[j][k] = |ssft[j][k];
            assign mnft[j][k] = |snft[j][k];
            assign mnft[j][k] = |snft[j][k];
            assign mlft[j][k] = |slft[j][k];
            assign mlft[j][k] = |slft[j][k];
         end
         end
      end // block: D2
      end // block: D2
 
 
      for(j=0; j<2; j++) begin: D4
      for(j=0; j<2; j++) begin: D4
         for(k=0; k<SCN; k++) begin: D
         for(k=0; k<SCN; k++) begin: D
            assign mw0[j][k] = |sw0[j][k];
            assign mw0[j][k] = |sw0[j][k];
            assign mw1[j][k] = |sw1[j][k];
            assign mw1[j][k] = |sw1[j][k];
            assign mw2[j][k] = |sw2[j][k];
            assign mw2[j][k] = |sw2[j][k];
            assign mw3[j][k] = |sw3[j][k];
            assign mw3[j][k] = |sw3[j][k];
            assign me0[j][k] = |se0[j][k];
            assign me0[j][k] = |se0[j][k];
            assign me1[j][k] = |se1[j][k];
            assign me1[j][k] = |se1[j][k];
            assign me2[j][k] = |se2[j][k];
            assign me2[j][k] = |se2[j][k];
            assign me3[j][k] = |se3[j][k];
            assign me3[j][k] = |se3[j][k];
         end // block: D
         end // block: D
         for(k=0; k<FT; k++) begin: T
         for(k=0; k<FT; k++) begin: T
            assign mwft[j][k] = |swft[j][k];
            assign mwft[j][k] = |swft[j][k];
            assign meft[j][k] = |seft[j][k];
            assign meft[j][k] = |seft[j][k];
         end // block: T
         end // block: T
      end // block: D4
      end // block: D4
   endgenerate
   endgenerate
 
 
   // south output
   // south output
   assign do0[0] = mn0[0]|ml0[0];
   assign do0[0] = mn0[0]|ml0[0];
   assign do1[0] = mn1[0]|ml1[0];
   assign do1[0] = mn1[0]|ml1[0];
   assign do2[0] = mn2[0]|ml2[0];
   assign do2[0] = mn2[0]|ml2[0];
   assign do3[0] = mn3[0]|ml3[0];
   assign do3[0] = mn3[0]|ml3[0];
   assign dot[0] = mnft[0]|mlft[0];
   assign dot[0] = mnft[0]|mlft[0];
 
 
   // west output
   // west output
   assign do0[1] = ms0[0]|mn0[1]|me0[0]|ml0[1];
   assign do0[1] = ms0[0]|mn0[1]|me0[0]|ml0[1];
   assign do1[1] = ms1[0]|mn1[1]|me1[0]|ml1[1];
   assign do1[1] = ms1[0]|mn1[1]|me1[0]|ml1[1];
   assign do2[1] = ms2[0]|mn2[1]|me2[0]|ml2[1];
   assign do2[1] = ms2[0]|mn2[1]|me2[0]|ml2[1];
   assign do3[1] = ms3[0]|mn3[1]|me3[0]|ml3[1];
   assign do3[1] = ms3[0]|mn3[1]|me3[0]|ml3[1];
   assign dot[1] = msft[0]|mnft[1]|meft[0]|mlft[1];
   assign dot[1] = msft[0]|mnft[1]|meft[0]|mlft[1];
 
 
   // south output
   // south output
   assign do0[2] = ms0[1]|ml0[2];
   assign do0[2] = ms0[1]|ml0[2];
   assign do1[2] = ms1[1]|ml1[2];
   assign do1[2] = ms1[1]|ml1[2];
   assign do2[2] = ms2[1]|ml2[2];
   assign do2[2] = ms2[1]|ml2[2];
   assign do3[2] = ms3[1]|ml3[2];
   assign do3[2] = ms3[1]|ml3[2];
   assign dot[2] = msft[1]|mlft[2];
   assign dot[2] = msft[1]|mlft[2];
 
 
   // east output
   // east output
   assign do0[3] = ms0[2]|mw0[0]|mn0[2]|ml0[3];
   assign do0[3] = ms0[2]|mw0[0]|mn0[2]|ml0[3];
   assign do1[3] = ms1[2]|mw1[0]|mn1[2]|ml1[3];
   assign do1[3] = ms1[2]|mw1[0]|mn1[2]|ml1[3];
   assign do2[3] = ms2[2]|mw2[0]|mn2[2]|ml2[3];
   assign do2[3] = ms2[2]|mw2[0]|mn2[2]|ml2[3];
   assign do3[3] = ms3[2]|mw3[0]|mn3[2]|ml3[3];
   assign do3[3] = ms3[2]|mw3[0]|mn3[2]|ml3[3];
   assign dot[3] = msft[2]|mwft[0]|mnft[2]|mlft[3];
   assign dot[3] = msft[2]|mwft[0]|mnft[2]|mlft[3];
 
 
   // local output
   // local output
   assign do0[4] = ms0[3]|mw0[1]|mn0[3]|me0[1];
   assign do0[4] = ms0[3]|mw0[1]|mn0[3]|me0[1];
   assign do1[4] = ms1[3]|mw1[1]|mn1[3]|me1[1];
   assign do1[4] = ms1[3]|mw1[1]|mn1[3]|me1[1];
   assign do2[4] = ms2[3]|mw2[1]|mn2[3]|me2[1];
   assign do2[4] = ms2[3]|mw2[1]|mn2[3]|me2[1];
   assign do3[4] = ms3[3]|mw3[1]|mn3[3]|me3[1];
   assign do3[4] = ms3[3]|mw3[1]|mn3[3]|me3[1];
   assign dot[4] = msft[3]|mwft[1]|mnft[3]|meft[1];
   assign dot[4] = msft[3]|mwft[1]|mnft[3]|meft[1];
 
 
 
 
endmodule // dcb_vc
endmodule // dcb_vc
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.