noureddine-as
Junior Member level 2
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:
And here is the one I get when using the VCD format:
And both have the same units
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
And this one is for FSDB:
- - - 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?
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
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?