00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <stdlib.h>
00027 #include <stdio.h>
00028 #include <unistd.h>
00029 #include <string.h>
00030 #include "arch_types.h"
00031 #include "globals.h"
00032 #include "types.h"
00033 #include "util.h"
00034 #include "netlist_utils.h"
00035 #include "arch_types.h"
00036 #include "read_xml_arch_file.h"
00037 #include "simulate_blif.h"
00038 #include "read_blif.h"
00039 #include "multipliers.h"
00040 #include "hard_blocks.h"
00041 #include "memories.h"
00042 #include "netlist_visualizer.h"
00043 #include "print_netlist.h"
00044
00045
00046
00047 global_args_read_blif_t global_args_read_blif;
00048 t_arch Arch;
00049 t_type_descriptor* type_descriptors;
00050 config_t configuration;
00051
00052
00053
00054 char *one_string = "ONE_VCC_CNS";
00055 char *zero_string = "ZERO_GND_ZERO";
00056 char *pad_string = "ZERO_PAD_ZERO";
00057
00058
00059 void do_simulation_of_netlist();
00060 void get_options(int argc, char **argv);
00061
00062
00063
00064 int main(int argc,char **argv)
00065 {
00066 int num_types;
00067 printf("----------------------------------------------------------------------\n");
00068 printf("Reading the verify_blif for verification\n");
00069
00070
00071 get_options(argc,argv);
00072
00073
00074 if (global_args_read_blif.config_file != NULL)
00075 {
00076 printf("Reading Configuration file\n");
00077 printf("Config read function not included yet\n");
00078 }
00079
00080
00081 if (global_args_read_blif.arch_file != NULL)
00082 {
00083 printf("Reading FPGA Architecture file\n");
00084 #ifdef VPR5
00085 t_clocks ClockDetails = { 0 };
00086 t_power PowerDetails = { 0 };
00087 XmlReadArch(global_args_read_blif.arch_file, FALSE, &Arch, &type_descriptors, &num_types, &ClockDetails, &PowerDetails);
00088 #endif
00089 #ifdef VPR6
00090 XmlReadArch(global_args_read_blif.arch_file, FALSE, &Arch, &type_descriptors, &num_types);
00091 #endif
00092 }
00093
00094 printf("--------------------------------------------------------------------------\n");
00095 printf("Reading the read_blif and Extracting the netlist\n");
00096
00097 read_blif(global_args_read_blif.blif_file);
00098
00099 printf("Printing the netlist as a graph\n");
00100 char path[]=".";
00101 char name[]="net_blif1";
00102 graphVizOutputNetlist(path,name,1, blif_netlist);
00103
00104
00105 printf("Extraction of netlist Completed\n");
00106
00107 do_simulation_of_netlist();
00108
00109 #ifdef print_netlist
00110 print_netlist_for_checking(blif_netlist,"blif_netlist");
00111 #endif
00112
00113 return 0;
00114 }
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125 void do_simulation_of_netlist()
00126 {
00127 if (global_args_read_blif.sim_type == NO_SIMULATION)
00128 return;
00129 printf("---------------------------------------------------------------------------------------------");
00130 printf("Netlist Simulation Begin\n");
00131 if (global_args_read_blif.sim_type == GENERATE_VECTORS)
00132 {
00133 printf("Testing new (random) vectors.\n");
00134 simulate_new_vectors(global_args_read_blif.num_test_vectors,blif_netlist);
00135 }
00136 else
00137 {
00138 printf("Testing existing vectors.\n");
00139 simulate_blif(global_args_read_blif.sim_vectors_file,blif_netlist);
00140 }
00141 printf("\n--------------------------------------------------------------------\n");
00142 }
00143
00144
00145 static const char *optString = "hHa:b:s:S:h:H:g:G:t:T:c:";
00146
00147
00148
00149 void get_options(int argc, char **argv)
00150 {
00151 int opt = 0;
00152
00153
00154 global_args_read_blif.config_file = NULL;
00155 global_args_read_blif.blif_file = NULL;
00156 global_args_read_blif.arch_file = NULL;
00157 global_args_read_blif.sim_vectors_file = NULL;
00158 global_args_read_blif.sim_type = NO_SIMULATION;
00159 global_args_read_blif.num_test_vectors = 0;
00160
00161
00162
00163
00164
00165
00166 opt = getopt(argc, argv, optString);
00167
00168 while(opt != -1)
00169 {
00170 switch(opt)
00171 {
00172
00173 case 'a':
00174 global_args_read_blif.arch_file = optarg;
00175 break;
00176
00177 case 'c':
00178 global_args_read_blif.config_file = optarg;
00179 break;
00180
00181
00182 case 'b':
00183 global_args_read_blif.blif_file = optarg;
00184 break;
00185
00186 case 'h':
00187 case 'H':
00188 printf("Usage: verify_blif.exe\n\t Options :\n\t\t-c <config_file_name.xml>\n\t\t-b <input_blif_fil_name.blif>\n\t\t-a <architecture_file_in_VPR6.0_form>\n\nSimulation options:\n\t\t -g <number_of_random_test_vectors\n\t\t -s <Simulate a particular input_vector_file>\n\t\t -t test_vector_file\n");
00189 exit(-1);
00190 break;
00191
00192
00193 case 'g':
00194 case 'G':
00195 global_args_read_blif.num_test_vectors = atoi(optarg);
00196 global_args_read_blif.sim_type = GENERATE_VECTORS;
00197 break;
00198 case 't':
00199 case 'T':
00200 global_args_read_blif.sim_vectors_file = optarg;
00201 global_args_read_blif.sim_type = TEST_EXISTING_VECTORS;
00202 break;
00203 case 's':
00204 case 'S':
00205 global_args_read_blif.sim_vectors_file = optarg;
00206 break;
00207 default :
00208 printf("Usage: \"verify_blif.exe -h\" for usage\n");
00209 exit(-1);
00210 break;
00211 }
00212
00213 opt = getopt(argc, argv, optString);
00214
00215 }
00216
00217 if ((global_args_read_blif.config_file == NULL) && ((global_args_read_blif.blif_file == NULL)|| (global_args_read_blif.arch_file==NULL)))
00218
00219 {
00220 printf("Error: must include either a config file, or a blif file and Fpga Architecture file \n");
00221 exit(-1);
00222 }
00223
00224 }
00225
00226