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

Subversion Repositories async_sdm_noc

[/] [async_sdm_noc/] [trunk/] [common/] [src/] [pipe4.v] - Diff between revs 22 and 28

Only display areas with differences | Details | Blame | View Log

Rev 22 Rev 28
/*
/*
 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
 
 
 General pipeline stage using the 4-phase 1-of-4 QDI protocol.
 General pipeline stage using the 4-phase 1-of-4 QDI protocol.
 *** SystemVerilog is used ***
 *** SystemVerilog is used ***
 
 
 History:
 History:
 05/05/2009  Initial version. <wsong83@gmail.com>
 05/05/2009  Initial version. <wsong83@gmail.com>
 17/04/2011  Replace the common ack generation. <wsong83@gmail.com>
 17/04/2011  Replace the common ack generation. <wsong83@gmail.com>
 23/05/2011  Clean up for opensource. <wsong83@gmail.com>
 26/05/2011  Clean up for opensource. <wsong83@gmail.com>
 
 
*/
*/
 
 
// the router structure definitions
// the router structure definitions
`include "define.v"
`include "define.v"
 
 
module pipe4(/*AUTOARG*/
module pipe4(/*AUTOARG*/
   // Outputs
   // Outputs
   ia, o0, o1, o2, o3,
   ia, o0, o1, o2, o3,
   // Inputs
   // Inputs
   i0, i1, i2, i3, oa
   i0, i1, i2, i3, oa
`ifdef ENABLE_EOF
`ifdef ENABLE_EOF
   , i4, o4
   , i4, o4
`endif
`endif
   );
   );
 
 
   parameter DW = 32;           // the data width of the pipeline stage
   parameter DW = 32;           // the data width of the pipeline stage
   parameter SCN = DW/2;        // the number of 1-of-4 sub-stage required
   parameter SCN = DW/2;        // the number of 1-of-4 sub-stage required
 
 
   input  [SCN-1:0]  i0, i1, i2, i3;
   input  [SCN-1:0]  i0, i1, i2, i3;
   output [SCN-1:0]  o0, o1, o2, o3;
   output [SCN-1:0]  o0, o1, o2, o3;
   input             oa;        // input ack
   input             oa;        // input ack
   output            ia;        // output ack
   output            ia;        // output ack
 
 
`ifdef ENABLE_EOF
`ifdef ENABLE_EOF
   input             o4;        // the eof bit
   output            o4;        // the eof bit
   output            i4;
   input             i4;
`endif
`endif
 
 
   // internal signals
   // internal signals
   wire [2*SCN-2:0]    tack;
   wire [SCN-1:0]    tack;
 
 
   // generate the ack line
   // generate the ack line
   genvar       i;
   genvar       i;
 
 
   // the data pipe stage
   // the data pipe stage
   generate for (i=0; i<SCN; i++) begin:DD
   generate for (i=0; i<SCN; i++) begin:DD
      dc2 DC0 (.d(i0[i]), .a(oa), .q(o0[i]));
      dc2 DC0 (.d(i0[i]), .a(oa), .q(o0[i]));
      dc2 DC1 (.d(i1[i]), .a(oa), .q(o1[i]));
      dc2 DC1 (.d(i1[i]), .a(oa), .q(o1[i]));
      dc2 DC2 (.d(i2[i]), .a(oa), .q(o2[i]));
      dc2 DC2 (.d(i2[i]), .a(oa), .q(o2[i]));
      dc2 DC3 (.d(i3[i]), .a(oa), .q(o3[i]));
      dc2 DC3 (.d(i3[i]), .a(oa), .q(o3[i]));
   end endgenerate
   end endgenerate
 
 
   // the eof bit
   // the eof bit
`ifdef ENABLE_EOF
`ifdef ENABLE_EOF
   dc2 DD_DC4 (.d(i4),  .a(oa[SCN-1]),  .q(o4));
   dc2 DD_DC4 (.d(i4),  .a(oa),  .q(o4));
`endif
`endif
 
 
   // generate the input ack
   // generate the input ack
   assign tack = o0|o1|o2|o3;
   assign tack = o0|o1|o2|o3;
   ctree #(.DW(SCN)) ACKT (.ci(tack), .co(ia));
   ctree #(.DW(SCN)) ACKT (.ci(tack), .co(ia));
 
 
endmodule // pipe4
endmodule // pipe4
 
 
 
 
 
 
 
 
 
 

powered by: WebSVN 2.1.0

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