static int debit_file(gchar *input_file, gchar *output_dir) { gint err = 0; bitstream_parsed_t *bit; bit = parse_bitstream(input_file); if (bit == NULL) { err = -1; goto out; } /* Have some action */ if (framedump) design_write_frames(bit, output_dir); if (unkdump) design_dump_frames(bit, output_dir); /* Just rewrite the bitstream. This is a test for the bitstream-writing code */ if (ofile) bitstream_write(bit,output_dir,ofile); if (sitedump || pipdump || lutdump || bramdump || netdump) { bitstream_analyzed_t *analysis = analyze_bitstream(bit, datadir); if (analysis == NULL) { g_warning("Problem during analysis"); err = -1; goto out_free; } /* print_chip(analysis->chip); */ if (sitedump) dump_sites(analysis, output_dir, suffix); if (pipdump) dump_pips(analysis); if (lutdump) dump_luts(analysis); if (bramdump) dump_bram(analysis); if (netdump) dump_nets(analysis); free_analysis(analysis); } out_free: free_bitstream(bit); out: return err; }
int main(int argc, char** argv) { StackDescription stkd ; Analysis analysis ; ThermalData tdata ; SimResult_t (*emulate) (ThermalData*, StackDescription*, Analysis*) ; Error_t error ; // Checks if there are the all the arguments //////////////////////////////////////////////////////////////////////////// if (argc != 2) { fprintf(stderr, "Usage: \"%s file.stk\"\n", argv[0]) ; return EXIT_FAILURE ; } // Init StackDescription and parse the input file //////////////////////////////////////////////////////////////////////////// fprintf (stdout, "Preparing stk data ... ") ; fflush (stdout) ; init_stack_description (&stkd) ; init_analysis (&analysis) ; error = fill_stack_description (&stkd, &analysis, argv[1]) ; if (error != TDICE_SUCCESS) return EXIT_FAILURE ; if (analysis.AnalysisType == TDICE_ANALYSIS_TYPE_TRANSIENT) emulate = &emulate_step ; else if (analysis.AnalysisType == TDICE_ANALYSIS_TYPE_STEADY) emulate = &emulate_steady ; else { fprintf (stderr, "unknown analysis type!\n "); free_stack_description (&stkd) ; return EXIT_FAILURE ; } fprintf (stdout, "done !\n") ; // Generate output files //////////////////////////////////////////////////////////////////////////// // We use "% " as prefix for matlab compatibility (header will be a comment) error = generate_analysis_headers (&analysis, stkd.Dimensions, "% ") ; if (error != TDICE_SUCCESS) { fprintf (stderr, "error in initializing output files \n "); free_stack_description (&stkd) ; return EXIT_FAILURE ; } // Init thermal data and fill it using the StackDescription //////////////////////////////////////////////////////////////////////////// fprintf (stdout, "Preparing thermal data ... ") ; fflush (stdout) ; init_thermal_data (&tdata) ; error = fill_thermal_data (&tdata, &stkd, &analysis) ; if (error != TDICE_SUCCESS) { free_analysis (&analysis) ; free_stack_description (&stkd) ; return EXIT_FAILURE ; } fprintf (stdout, "done !\n") ; // Run the simulation and print the output //////////////////////////////////////////////////////////////////////////// clock_t Time = clock() ; SimResult_t sim_result ; do { sim_result = emulate (&tdata, &stkd, &analysis) ; if (sim_result == TDICE_STEP_DONE || sim_result == TDICE_SLOT_DONE) { fprintf (stdout, "%.3f ", get_simulated_time (&analysis)) ; fflush (stdout) ; generate_analysis_output (&analysis, stkd.Dimensions, tdata.Temperatures, TDICE_OUTPUT_INSTANT_STEP) ; } if (sim_result == TDICE_SLOT_DONE) { fprintf (stdout, "\n") ; generate_analysis_output (&analysis, stkd.Dimensions, tdata.Temperatures, TDICE_OUTPUT_INSTANT_SLOT) ; } } while (sim_result != TDICE_END_OF_SIMULATION) ; generate_analysis_output (&analysis, stkd.Dimensions, tdata.Temperatures, TDICE_OUTPUT_INSTANT_FINAL) ; fprintf (stdout, "emulation took %.3f sec\n", ( (double)clock() - Time ) / CLOCKS_PER_SEC ) ; // free all data //////////////////////////////////////////////////////////////////////////// free_thermal_data (&tdata) ; free_analysis (&analysis) ; free_stack_description (&stkd) ; return EXIT_SUCCESS ; }