Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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 ;
}