#include #include #include using namespace std; int max (int a, int b) { if ( a > b ) return a; return b; } typedef struct __sol { int k1; int k2; int k3; int k4; int delay; } _sol; int main (int argc, char* argv[]) { if ( argc < 3 ) { printf ("usage: ./a {delta_FA} {delta_MUX}\n"); return -1; } int d_fa = atoi (argv[1]); int d_e = atoi (argv[2]); printf ("delta_FA: %d (ps) delta_MUX: %d (ps)\n", d_fa, d_e); int min_delay = 100000000; vector<_sol> sol; for ( int k4 = 10 ; k4 <= 64 ; k4++ ) { for ( int k3 = 10 ; k3 <= 64 ; k3++ ) { for ( int k2 = 10 ; k2 <= 64 ; k2++ ) { int k1 = 64 - (k2 + k3 + k4); if ( k1 < 10 ) continue; int d1 = max (d_fa*k1, d_fa*k2); int d2 = max (d_fa*k3, d_e+d1); int d3 = max (d_fa*k4, d_e+d2); d3 += d_e; if ( d3 <= min_delay ) { if ( d3 < min_delay ) sol.clear (); _sol s; s.k1 = k1; s.k2 = k2; s.k3 = k3; s.k4 = k4; s.delay = d3; min_delay = d3; sol.push_back (s); } } } } for ( vector<_sol>::iterator it = sol.begin() ; it != sol.end() ; ++it ) { printf ("%2d %2d %2d %2d %5d\n", (*it).k4, (*it).k3, (*it).k2, (*it).k1, (*it).delay); } return 0; }