Hello,

I'm trying to evaluate the power consumption of an FPU. I synthesized the IP for 350nm technology node using Synopsys Design Compiler. Then performed a post-synthesis simulation on ModelSim (with SDF file, generated from Design Compiler, taken into consideration) and I generate a waveform using the dumpfile directives in Verilog/SystemVerilog. After that, I use PrimeTime to evaluate the power by applying the generated waveform to the synthesized circuit.

Now my problem is, in PrimeTime, I get different results (in both averaged and timebased simulation) depending on the waveform format used, i.e. if the waveform is a VCD file (read_vcd command), the result will be different than if the waveform is in FSDB (read_fsdb command). Do you have any ideas why?

Here is an example of the Power report I get when using the FSDB format:
Code:
                        Internal  Switching  Leakage    Total
Power Group             Power     Power      Power      Power   (     %)  Attrs
--------------------------------------------------------------------------------
clock_network           6.440e-03    0.0000    0.0000 6.440e-03 (99.67%)  i
register                2.150e-05    0.0000 3.328e-09 2.150e-05 ( 0.33%)  
combinational           4.971e-08    0.0000 1.446e-08 6.417e-08 ( 0.00%)  
sequential                 0.0000    0.0000    0.0000    0.0000 ( 0.00%)  
memory                     0.0000    0.0000    0.0000    0.0000 ( 0.00%)  
io_pad                     0.0000    0.0000    0.0000    0.0000 ( 0.00%)  
black_box                  0.0000    0.0000    0.0000    0.0000 ( 0.00%)  

  Net Switching Power  =    0.0000   ( 0.00%)
  Cell Internal Power  = 6.461e-03  (100.00%)
  Cell Leakage Power   = 1.779e-08   ( 0.00%)
                         ---------
Total Power            = 6.461e-03  (100.00%)

And here is the one I get when using the VCD format:
Code:
                        Internal  Switching  Leakage    Total
Power Group             Power     Power      Power      Power   (     %)  Attrs
--------------------------------------------------------------------------------
clock_network           8.012e-03    0.0000    0.0000 8.012e-03 (24.63%)  i
register                1.373e-03 3.769e-04 3.328e-09 1.749e-03 ( 5.38%)  
combinational           7.901e-03    0.0149 1.446e-08    0.0228 (69.99%)  
sequential                 0.0000    0.0000    0.0000    0.0000 ( 0.00%)  
memory                     0.0000    0.0000    0.0000    0.0000 ( 0.00%)  
io_pad                     0.0000    0.0000    0.0000    0.0000 ( 0.00%)  
black_box                  0.0000    0.0000    0.0000    0.0000 ( 0.00%)  

  Net Switching Power  =    0.0152   (46.85%)
  Cell Internal Power  =    0.0173   (53.15%)
  Cell Leakage Power   = 1.779e-08   ( 0.00%)
                         ---------
Total Power            =    0.0325  (100.00%)
And both have the same units
Dynamic Power Units = 1 W
Leakage Power Units = 1 W
Now here are a some things that I've already done,
- I converted the FSDB to VCD to see if they are different, the contents seem to be similar. The only difference is the way signals are expressed e.g. in the original VCD file it's like result[0] result[1] ... are independant signals, but int the VCD generated from the FSDB the vectors are like result[63:0].
- When I was doing the post-synthesis simulation, I had several VITAL glitches, the results are functionally correct, but the simulation was slow, so I deactivated those using the "-noglitch option of ModelSim".
- Also here are the directives I use for VCD generation
Code:
   initial
   begin
      $dumpfile("tb_post-synth.vcd");
      $dumpvars(0, "tb_module/dut");
   end
And this one is for FSDB:
Code:
   initial
   begin
      $fsdbDumpfile(tb_post-synth.fsdb);
      $fsdbDumpvars(0, "tb_module/dut");
  end
- - - Updated - - -

To add an other detail, suppose I have the FSDB file generated from ModelSim:
- If i read the FSDB file into PrimeTime using the command <read_fsdb> I get those bizarre results.
- However, when I use <read_vcd> to read the FSDB file, it automatically detects that it's an FSDB file, and then I get the same results as if I had a VCD file from the beginning.

So the question becomes, why does read_vcd read also FSDB files, if the command read_fsdb does that ŕ priori? And why would they give different results anyway?