diff options
Diffstat (limited to 'src/intersim2/.svn/pristine/1a')
| -rw-r--r-- | src/intersim2/.svn/pristine/1a/1abf005acda7eb93dad10f55694f27a84ba74f91.svn-base | 111 | ||||
| -rw-r--r-- | src/intersim2/.svn/pristine/1a/1afc46cd26811b568cd238a5bb6cf4a3e9687edf.svn-base | 54 |
2 files changed, 0 insertions, 165 deletions
diff --git a/src/intersim2/.svn/pristine/1a/1abf005acda7eb93dad10f55694f27a84ba74f91.svn-base b/src/intersim2/.svn/pristine/1a/1abf005acda7eb93dad10f55694f27a84ba74f91.svn-base deleted file mode 100644 index cae1e45..0000000 --- a/src/intersim2/.svn/pristine/1a/1abf005acda7eb93dad10f55694f27a84ba74f91.svn-base +++ /dev/null @@ -1,111 +0,0 @@ -// $Id$ - -/* - Copyright (c) 2007-2012, Trustees of The Leland Stanford Junior University - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/*wavefront.cpp - * - *The wave front allocator - * - */ -#include "booksim.hpp" - -#include "wavefront.hpp" - -Wavefront::Wavefront( Module *parent, const string& name, - int inputs, int outputs, bool skip_diags ) : - DenseAllocator( parent, name, inputs, outputs ), - _last_in(-1), _last_out(-1), _skip_diags(skip_diags), - _square(max(inputs, outputs)), _pri(0), _num_requests(0) -{ -} - -void Wavefront::AddRequest( int in, int out, int label, - int in_pri, int out_pri ) -{ - DenseAllocator::AddRequest(in, out, label, in_pri, out_pri); - _num_requests++; - _last_in = in; - _last_out = out; - _priorities.insert(make_pair(out_pri, in_pri)); -} - -void Wavefront::Allocate( ) -{ - - int first_diag = -1; - - if(_num_requests == 0) - - // bypass allocator completely if there were no requests - return; - - if(_num_requests == 1) { - - // if we only had a single request, we can immediately grant it - _inmatch[_last_in] = _last_out; - _outmatch[_last_out] = _last_in; - first_diag = _last_in + _last_out; - - } else { - - // otherwise we have to loop through the diagonals of request matrix - - for(set<pair<int, int> >::const_reverse_iterator iter = - _priorities.rbegin(); - iter != _priorities.rend(); ++iter) { - - for ( int p = 0; p < _square; ++p ) { - for ( int output = 0; output < _square; ++output ) { - int input = ( ( _pri + p ) + ( _square - output ) ) % _square; - if ( ( input < _inputs ) && ( output < _outputs ) && - ( _inmatch[input] == -1 ) && ( _outmatch[output] == -1 ) && - ( _request[input][output].label != -1 ) && - ( _request[input][output].in_pri == iter->second ) && - ( _request[input][output].out_pri == iter->first ) ) { - // Grant! - _inmatch[input] = output; - _outmatch[output] = input; - if(first_diag < 0) { - first_diag = input + output; - } - } - } - } - } - } - - _num_requests = 0; - _last_in = -1; - _last_out = -1; - _priorities.clear(); - - assert(first_diag >= 0); - - // Round-robin the priority diagonal - _pri = ( ( _skip_diags ? first_diag : _pri ) + 1 ) % _square; -} - - diff --git a/src/intersim2/.svn/pristine/1a/1afc46cd26811b568cd238a5bb6cf4a3e9687edf.svn-base b/src/intersim2/.svn/pristine/1a/1afc46cd26811b568cd238a5bb6cf4a3e9687edf.svn-base deleted file mode 100644 index 4df14c7..0000000 --- a/src/intersim2/.svn/pristine/1a/1afc46cd26811b568cd238a5bb6cf4a3e9687edf.svn-base +++ /dev/null @@ -1,54 +0,0 @@ -%{ - -#include "y.tab.h" - -static unsigned int lineno = 1; - -void config_error(char * msg, int lineno); -void yyerror(char * msg); - -extern int config_input(char *, int); -#undef YY_INPUT -#define YY_INPUT(b, r, ms) (r = config_input(b, ms)) - -%} - -Digit [0-9] -Exponent [eE][+-]?{Digit}+ -DblConst ({Digit}*\.)?{Digit}+{Exponent}? -StrConst [A-Za-z_\-/\.][A-Za-z0-9_\-/\.\+(\{\,)\}]* - -%% - - /* Ignore comments and all spaces */ - -\/\/[^\n]* ; -[ \t\r]* ; - -\n { lineno++; } - - /* Commands */ - -\{[A-Za-z0-9_\-\.(\{\,)\}]+(\,[A-Za-z0-9_\-\.(\{\,)\}]+)*\} { yylval.name = strdup( yytext ); return STR; } - --?[0-9]+ { yylval.num = atoi( yytext ); return NUM; } - --?[0-9]*\.[0-9]+ { yylval.fnum = atof( yytext ); return FNUM; } - --?{DblConst} { yylval.fnum = atof( yytext ); return FNUM;} - -{StrConst} { yylval.name = strdup( yytext ); return STR; } - -. { return yytext[0]; } - -%% - -void yyerror( char * msg ) -{ - config_error( msg, lineno ); -} - -int yywrap() -{ - return 1; -} |
