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

Subversion Repositories async_sdm_noc

[/] [async_sdm_noc/] [branches/] [clos_opt/] [clos_opt/] [src/] [output_buf.v] - Diff between revs 62 and 74

Show entire file | Details | Blame | View Log

Rev 62 Rev 74
Line 20... Line 20...
 26/05/2009  Initial version. <wsong83@gmail.com>
 26/05/2009  Initial version. <wsong83@gmail.com>
 20/09/2010  Supporting channel slicing and SDM using macro difinitions. <wsong83@gmail.com>
 20/09/2010  Supporting channel slicing and SDM using macro difinitions. <wsong83@gmail.com>
 22/10/2010  Parameterize the number of pipelines in output buffers. <wsong83@gmail.com>
 22/10/2010  Parameterize the number of pipelines in output buffers. <wsong83@gmail.com>
 23/05/2011  Clean up for opensource. <wsong83@gmail.com>
 23/05/2011  Clean up for opensource. <wsong83@gmail.com>
 21/06/2011  Move the eof logic in every pipeline stage outside the pipe4 module. <wsong83@gmail.com>
 21/06/2011  Move the eof logic in every pipeline stage outside the pipe4 module. <wsong83@gmail.com>
 
 20/07/2011  Preparation for the buffered Clos switch. <wsong83@gmail.com>
 
 
*/
*/
 
 
// the router structure definitions
// the router structure definitions
`include "define.v"
`include "define.v"
 
 
// the out buffer
// the out buffer
module outp_buf (/*AUTOARG*/
module outp_buf (/*AUTOARG*/
   // Outputs
   // Outputs
   o0, o1, o2, o3, o4, ia,
   o0, o1, o2, o3, o4, ia, ia4,
   // Inputs
   // Inputs
   rst_n, i0, i1, i2, i3, i4, oa
   rst_n, i0, i1, i2, i3, i4, oa
   );
   );
 
 
   parameter DW = 16;           // the datawidth of a single virtual circuit
   parameter DW = 16;           // the datawidth of a single virtual circuit
Line 49... Line 50...
   output [SCN-1:0]        o4, ia;
   output [SCN-1:0]        o4, ia;
   wire [SCN-1:0]          ian_dly;
   wire [SCN-1:0]          ian_dly;
   wire [PD:0][SCN-1:0]   pd4, pda, pdan, pd4an; // internal eof and ack
   wire [PD:0][SCN-1:0]   pd4, pda, pdan, pd4an; // internal eof and ack
`else
`else
   input                  i4, oa; // eof and ack
   input                  i4, oa; // eof and ack
   output                 o4, ia;
   output                 o4, ia, ia4;
   wire                   ian_dly;
   wire                   ian_dly;
   wire [PD:0]             pd4, pda, pdan, pd4an; // internal eof and ack
   wire [PD:0]             pd4, pda, pdan, pd4an; // internal eof and ack
`endif
`endif
 
 
 
 
Line 66... Line 67...
         P (
         P (
            .o0  ( pd0[i][j]   ),
            .o0  ( pd0[i][j]   ),
            .o1  ( pd1[i][j]   ),
            .o1  ( pd1[i][j]   ),
            .o2  ( pd2[i][j]   ),
            .o2  ( pd2[i][j]   ),
            .o3  ( pd3[i][j]   ),
            .o3  ( pd3[i][j]   ),
            //.o4  ( pd4[i][j]   ),
 
            .ia  ( pda[i+1][j] ),
            .ia  ( pda[i+1][j] ),
            .i0  ( pd0[i+1][j] ),
            .i0  ( pd0[i+1][j] ),
            .i1  ( pd1[i+1][j] ),
            .i1  ( pd1[i+1][j] ),
            .i2  ( pd2[i+1][j] ),
            .i2  ( pd2[i+1][j] ),
            .i3  ( pd3[i+1][j] ),
            .i3  ( pd3[i+1][j] ),
            //.i4  ( pd4[i+1][j] ),
 
            .oa  ( pdan[i][j]  )
            .oa  ( pdan[i][j]  )
            );
            );
 
 
         pipen #(.DW(1))
         pipen #(.DW(1))
         PEoF (
         PEoF (
Line 92... Line 91...
      P (
      P (
         .o0  ( pd0[i]   ),
         .o0  ( pd0[i]   ),
         .o1  ( pd1[i]   ),
         .o1  ( pd1[i]   ),
         .o2  ( pd2[i]   ),
         .o2  ( pd2[i]   ),
         .o3  ( pd3[i]   ),
         .o3  ( pd3[i]   ),
         //.o4  ( pd4[i]   ),
 
         .ia  ( pda[i+1] ),
         .ia  ( pda[i+1] ),
         .i0  ( pd0[i+1] ),
         .i0  ( pd0[i+1] ),
         .i1  ( pd1[i+1] ),
         .i1  ( pd1[i+1] ),
         .i2  ( pd2[i+1] ),
         .i2  ( pd2[i+1] ),
         .i3  ( pd3[i+1] ),
         .i3  ( pd3[i+1] ),
         //.i4  ( pd4[i+1] ),
 
         .oa  ( pdan[i]  )
         .oa  ( pdan[i]  )
         );
         );
 
 
      pipen #(.DW(1))
      pipen #(.DW(1))
      PEoF (
      PEoF (
Line 125... Line 122...
   // generate the input ack, add the AND gate if lookahead pipelines are used
   // generate the input ack, add the AND gate if lookahead pipelines are used
   generate
   generate
`ifdef ENABLE_CHANNEL_SLICING
`ifdef ENABLE_CHANNEL_SLICING
      for(j=0; j<SCN; j++) begin: SCA
      for(j=0; j<SCN; j++) begin: SCA
 `ifdef ENABLE_LOOKAHEAD
 `ifdef ENABLE_LOOKAHEAD
         and ACKG (ia[j], pda[PD][j]|pd4[PD-1][j], ian_dly[j]);
         and ACKG (ia[j], pda[PD][j], ian_dly[j]);
         delay DLY ( .q(ian_dly[j]), .a(pdan[PD-1][j]));
         delay DLY ( .q(ian_dly[j]), .a(pdan[PD-1][j]));
 `else
 `else
         assign ia[j] = pda[PD][j]|pd4[PD-1][j];
         assign ia[j] = pda[PD][j];
 `endif
 `endif
 
         assign ia4[j] = pd4[PD-1][j];
         assign pdan[0][j] = (~oa[j])&rst_n;
         assign pdan[0][j] = (~oa[j])&rst_n;
         assign pd4an[0][j] = pdan[0][j];
         assign pd4an[0][j] = pdan[0][j];
      end
      end
`else
`else
 `ifdef ENABLE_LOOKAHEAD
 `ifdef ENABLE_LOOKAHEAD
      and ACKG (ia, pda[PD]|pd4[PD-1], ian_dly);
      and ACKG (ia, pda[PD], ian_dly);
      delay DLY ( .q(ian_dly), .a(pdan[PD-1]));
      delay DLY ( .q(ian_dly), .a(pdan[PD-1]));
 `else
 `else
      assign ia = pda[PD]|pd4[PD-1];
      assign ia = pda[PD];
 `endif
 `endif
 
      assign ia4 = pd4[PD-1];
      assign pdan[0] = (~oa)&rst_n;
      assign pdan[0] = (~oa)&rst_n;
      assign pd4an[0] = pdan[0];
      assign pd4an[0] = pdan[0];
`endif // !`ifdef ENABLE_LOOKAHEAD
`endif // !`ifdef ENABLE_LOOKAHEAD
   endgenerate
   endgenerate
 
 

powered by: WebSVN 2.1.0

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