Dynamic Power of SRAM less than Static Power

abhishektyagi

Newbie level 5
Joined
Apr 17, 2023
Messages
9
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
121
Hello,
I am using PrimeTime to do some power analysis of an SRAM of size 128KB generated using Arm Artisan 7nm compiler. The testbench for the same looks like the following:


Code:
module sram_tb;

    parameter integer SRAM_MACRO_SIZE = 156;
    parameter integer NUM_SRAM_MACROS = 6553;
    parameter integer ADDR_WIDTH = 15;
    parameter integer MEM_SIZE  = 1 << ADDR_WIDTH;
    parameter integer DATA_WIDTH = 32;

    reg clk;
    reg [31:0] dataout ;//[NUM_SRAM_MACROS - 1 : 0];
    reg [14:0] address;
    reg [31:0] datain;
    reg write_enable;
    reg read_enable;
    reg chip_enable;
    reg stov;
    reg [2:0] ema;
    reg [1:0] emaw;
    reg emas;
    reg ret;
    reg qnap;
    reg rawl;
    reg [1:0] rawlm;
    reg wabl;
    reg [1:0] wablm;

    //clock generation
    always #1.5 clk = ~clk;

    sram_sp_uhde dut(
       `ifdef POWER_PINS
       .VDDCE(1'b1),
       .VDDPE(1'b1),
       .VSSE(1'b0),
       `endif
       .Q(dataout),
       .CLK(clk),
       .CEN(chip_enable),
       .GWEN(write_enable),
       .A(address),
       .D(datain),
       .STOV(1'b0),
       .EMA(3'b111),
       .EMAW(2'b11),
       .EMAS(1'b1),
       .RET(1'b0),
       .QNAP(1'b0),
       .RAWL(1'b0),
       .RAWLM(2'b0),
       .WABL(1'b1),
       .WABLM(2'b0)
       );

  // Test stimulus
  initial begin
    // Initialize signals
    clk = 0;
    address = 15'b000000000000011;
    datain = 32'b00000000000000000000000000000010;
    write_enable = 1;
    chip_enable = 0;
    read_enable = 0;

    //loadmem("random_numbers.txt");

    //for (int i = 0; i < MEM_SIZE; i = i + 1) begin
    $display("SRAM[%0d]: %b", address, dataout);
    repeat (1) @(posedge clk) //address <= 4; //datain <= 2 % (1 << DATA_WIDTH);
    $display("SRAM[%0d]: %b", address, dataout);
    repeat (1) @(posedge clk) //address <= 4; //datain <= 2 % (1 << DATA_WIDTH);
    $display("SRAM[%0d]: %b", address, dataout);
    repeat (1) @(posedge clk) //address <= 4; //datain <= 2 % (1 << DATA_WIDTH);
    $display("SRAM[%0d]: %b", address, dataout);
    //// End simulation
    $finish;
  end
endmodule

I am trying to get the power numbers for a single read operation performed on the SRAM. I have verified that the testbench above give me correct output from the SRAM. But the power numbers looks like this:
Code:
Net Switching Power  = 3.000e-05   ( 0.93%)
  Cell Internal Power  = 2.877e-03   (88.79%)
  Cell Leakage Power   = 3.331e-04   (10.28%)

I am wondering what could be the reason that static power is dominating the dynamic power in this case? Should it not be the other way around?
 

In your example, the dynamic power (cell internal) is 88% of total power. While static (leakage) is just 10%. So dynamic is dominating.
 

In your example, the dynamic power (cell internal) is 88% of total power. While static (leakage) is just 10%. So dynamic is dominating.
Thank you for your response.

My understanding is that switching power is the dynamic power. Or is that not correct?
 

Yes, but "Net switching power" is dynamic power dissipated by external (to sram) wireloads. While "Cell internal" is dynamic power dissipated inside sram.
 
Yes, but "Net switching power" is dynamic power dissipated by external (to sram) wireloads. While "Cell internal" is dynamic power dissipated inside sram.
I see. Is there a reference for looking at the definition of these terms?
 

Cookies are required to use this site. You must accept them to continue using the site. Learn more…