-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdriver.cpp
73 lines (65 loc) · 2.25 KB
/
driver.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include "Circuito.hpp"
#include "Componente.hpp"
#include "Config.hpp"
#include <fstream>
#include <string>
int main(int argc, char *argv[])
{
Circuito circ;
double vincolo, tti, c;
double r;
bool rispettato;
if(argc!=3 && argc!=4)
{
cout << "Inserire come parametro il percorso dei un file VHDL(compresa l'estensione) che descrive un circuito, assieme al nome dell'uscita rispetto alla quale si vogliono calcolare i tempi di propagazione" << endl;
cout << "Si può aggiungere anche un vincolo al tempo di propagazione direttamnete come terzo parametro, nel qual caso il programma eseguirà un singolo ciclo di ottimizzazione" << endl;
exit(1);
}
//caricamento config
Config::IstanzaConfig()->CaricaConfig("config/traduzione_funzione.txt", "config/equivalenza_funzione.txt",
"config/traduzione_gate.txt");
//caricamento libreria
ifstream is("cell_library");
vector<Componente> lib = CaricaLibreria(is);
is.close();
//aggiunta dell'adder come componente
is.open("adder16");
lib.push_back(CaricaLibreria(is)[0]);
is.close();
is.open(string(argv[1]));
is >> circ;
srand(time(NULL));
r = rand();
tti = (r/RAND_MAX)/(1/0.6);
r = rand();
c = (r/RAND_MAX)/(1/0.35);
circ.AssegnaComponentiRandom(lib);
circ.StampaComponentiAssociati(cout);
cout << endl;
cout << "Tempo di Propagazione: " << circ.TempoDiPropagazione(argv[2], tti, c) << endl;
cout << "Area: " << circ.Area() << endl << endl;
if(argc==4)
{
vincolo = atof(argv[3]);
rispettato = circ.AssegnaComponentiOttimi(lib, vincolo, argv[2], tti, c);
cout << "Vincolo rispettato? " << rispettato << endl;
circ.StampaComponentiAssociati(cout);
cout << endl;
cout << "Tempo di Propagazione: " << circ.TempoDiPropagazione(argv[2], tti, c) << endl;
cout << "Area: " << circ.Area() << endl << endl;
}
else
{
for(unsigned k=0; k<5; k++)
{
cout << "Inserire il tempo di propagazione massimo accettabile: ";
cin >> vincolo;
rispettato = circ.AssegnaComponentiOttimi(lib, vincolo, argv[2], tti, c);
cout << "Vincolo rispettato? " << rispettato << endl;
circ.StampaComponentiAssociati(cout);
cout << endl;
cout << "Tempo di Propagazione: " << circ.TempoDiPropagazione(argv[2], tti, c) << endl;
cout << "Area: " << circ.Area() << endl << endl;
}
}
}