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

Subversion Repositories async_sdm_noc

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 16 to Rev 17
    Reverse comparison

Rev 16 → Rev 17

/async_sdm_noc/branches/sdm/src/input_buf.v
14,7 → 14,7
References
* Lookahead pipelines
Montek Singh and Steven M. Nowick}, The design of high-performance dynamic asynchronous pipelines: lookahead style, IEEE Transactions on Very Large Scale Integration (VLSI) Systems, 2007(15), 1256-1269. doi:10.1109/TVLSI.2007.902205
Montek Singh and Steven M. Nowick, The design of high-performance dynamic asynchronous pipelines: lookahead style, IEEE Transactions on Very Large Scale Integration (VLSI) Systems, 2007(15), 1256-1269. doi:10.1109/TVLSI.2007.902205
* Channel slicing
Wei Song and Doug Edwards, A low latency wormhole router for asynchronous on-chip networks, Asia and South Pacific Design Automation Conference, 2010, 437-443.
* SDM
/async_sdm_noc/branches/sdm/src/subc_ctl.v
13,7 → 13,7
References
* Lookahead pipelines
Montek Singh and Steven M. Nowick}, The design of high-performance dynamic asynchronous pipelines: lookahead style, IEEE Transactions on Very Large Scale Integration (VLSI) Systems, 2007(15), 1256-1269. doi:10.1109/TVLSI.2007.902205
Montek Singh and Steven M. Nowick, The design of high-performance dynamic asynchronous pipelines: lookahead style, IEEE Transactions on Very Large Scale Integration (VLSI) Systems, 2007(15), 1256-1269. doi:10.1109/TVLSI.2007.902205
* Channel slicing
Wei Song and Doug Edwards, A low latency wormhole router for asynchronous on-chip networks, Asia and South Pacific Design Automation Conference, 2010, 437-443.
/async_sdm_noc/branches/common/src/mrma.v
0,0 → 1,111
/*
Asynchronous SDM NoC
(C)2011 Wei Song
Advanced Processor Technologies Group
Computer Science, the Univ. of Manchester, UK
Authors:
Wei Song wsong83@gmail.com
License: LGPL 3.0 or later
Multi-resource match arbiter
*** SystemVerilog is used ***
References
Stanislavs Golubcovs, Delong Shang, Fei Xia, Andrey Mokhov and Alex Yakovlev, Multi-resource arbiter decomposition, Tech report NCL-EECE-MSD-TR-2009-143, Microelectronic System Design Group, School of EECE, Newcastle University, 2009.
Stanislavs Golubcovs, Delong Shang, Fei Xia, Andrey Mokhov and Alex Yakovlev, Modular approach to multi-resource arbiter design, IEEE Symposium on Asynchronous Circuits and Systems, 2009.
 
History:
05/09/2009 Initial version. <wsong83@gmail.com>
05/11/2009 Speed up the arbiter. <wsong83@gmail.com>
24/05/2011 Clean up for opensource. <wsong83@gmail.com>
*/
 
module mrma (/*AUTOARG*/
// Outputs
IMa, CMr, cfg,
// Inputs
IMr, CMa, CMs, rst_n
);
// parameters
parameter N = 2; // the number of requests/clients
parameter M = 2; // the number of resources
 
input [N-1:0] c; // requests/clients
output [N-1:0] ca; // requests ack
input [M-1:0] r; // resources
output [M-1:0] ra; // resource ack
output [M-1:0][N-1:0] cfg; // the generated configuration
wire [N-1:0][M-1:0] scfg;
 
wire [M-1:0][N-1:0] hs; // match results
wire [M-1:0][N-1:0] blk; // blockage
wire [N-1:0][M-1:0] cblk; // shuffled blockage
wire [M-1:0] rblk; // resource blockage
wire [N-1:0] cblk; // client blockage
wire [N-1:0] cg, cm; // client requests
wire [M-1:0] rg, rm; // resource requests
input rst_n; // active low reset
 
// generate variables
genvar i, j;
 
 
// input arbiters
tree_arb #(N) CIArb (
.req ( cm ),
.gnt ( cg )
);
tree_arb #(M) RIArb (
.req ( rm ),
.gnt ( rg )
);
 
generate
// tile matrix
for (i=0; i<M; i++) begin: Row
for(j=0; j<N; j++) begin: Clm
cr_blk E (
.bo ( blk[i][j] ),
.hs ( hs[i][j] ),
.cbi ( cbi[j] ),
.rbi ( rbi[i] ),
.rg ( rg[i] ),
.cg ( cg[j] )
);
// shuffle the blockage
assign cblk[j][i] = blk[i][j];
 
// shuffle the configuration
assign scfg[j][i] = cfg[i][j];
// store the match results
c2p C (.q(cfg[i][j]), .a0(c[j]), .a1(hs[i][j]));
end // block: Clm
end // block: Row
 
// combine the row blockage and generate input requests
for(i=0; i<M; i++) begin: RB
assign rbi[i] = (|blk[i]) & rst_n;
and AND_RG (rm[i], r[i], ~ra[i], rst_n);
ra[i] = |cfg[i];
end
 
// combine the column blockage and generate input requests
for(j=0; j<N; j++) begin: CB
assign cbi[j] = (|cblk[j]) & rst_n;
and AND_CG (cm[j], c[j], ~ca[j], rst_n);
assign ca[j] = |scfg[j];
end
endgenerate
endmodule // im_arb
/async_sdm_noc/branches/common/src/mnma.v
0,0 → 1,92
/*
Asynchronous SDM NoC
(C)2011 Wei Song
Advanced Processor Technologies Group
Computer Science, the Univ. of Manchester, UK
Authors:
Wei Song wsong83@gmail.com
License: LGPL 3.0 or later
M-N Match allocator
*** SystemVerilog is used ***
References
Thomas E. Anderson, Susan S. Owicki, James B. Saxe and Charles P. Thacker, High-speed switch scheduling for local-area networks, ACM Transactions on Computer Systems, 1993(11), 319-352.
 
For the detail structure, please refer to Section 6.3.1 of the thesis:
Wei Song, Spatial parallelism in the routers of asynchronous on-chip networks, PhD thesis, the University of Manchester, 2011.
History:
09/06/2010 Initial version. <wsong83@gmail.com>
08/03/2011 Tree arbiter cannot be used as the requests are not allowed to drop before ack. <wsong83@gmail.com>
24/05/2011 Clean up for opensource. <wsong83@gmail.com>
*/
 
module mnma(/*AUTOARG*/
// Outputs
cfg,
// Inputs
r
);
parameter N = 2; // number of input requests
parameter M = 2; // number of resources
 
input [N-1:0][M-1:0] r; // input requests
output [M-1:0][N-1:0] cfg; // configuration to the crssbar
 
wire [M-1:0][N-1:0] OPr;
wire [M-1:0][N-1:0] OPg;
wire [M-1:0][N-1:0][M-1:0] OPren;
wire [N-1:0][M-1:0] IPr;
wire [N-1:0][M-1:0] IPg;
 
genvar i,j,k;
 
//-------------------------------------
// OP arbiters
generate
for(i=0; i<M; i++) begin:OPA
mutex_arb #(N)
A (
.req ( OPr[i] ),
.gnt ( OPg[i] )
);
end
endgenerate
 
//--------------------------------------
// IP arbiters
generate
for(i=0; i<N; i++) begin:IPA
mutex_arb #(M)
A (
.req ( IPr[i] ),
.gnt ( IPg[i] )
);
end
endgenerate
 
//--------------------------------------
// connections
generate
for(i=0; i<M; i++) begin:CO
for(j=0; j<N; j++) begin:CI
for(k=0; k<M; k++) begin:EN
if(i==k)
assign OPren[i][j][k] = 1'b0;
else
assign OPren[i][j][k] = IPg[j][k]; // connection j->k is settle
end
and AND_OPRen (OPr[i][j], r[j][i] ,(~|OPren[i][j]));
assign cfg[i][j] = IPg[j][i];
assign IPr[j][i] = OPg[i][j];
end // block: CI
end // block: CO
endgenerate
endmodule // mnma
 
 

powered by: WebSVN 2.1.0

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