Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

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.
 

LaTeX Commands Quick-Menu:

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top