Skip to content

请问如何配置能够在综合时不实例化某些寄存器(例如性能计数器)? #12

Closed
@WanderingNako

Description

@WanderingNako

我是一生一芯的学员,在做性能优化时,我想在综合时不实例化性能计数器,从而使得添加性能计数器不影响电路的面积和频率。请问应该如何配置?
我的RTL代码(DpicHalt.v)如下,其中inst_cnt, cycle_cnt, data_cnt, exec_cnt等是性能计数器,它们由各个模块负责采集,最后汇总在DpicHalt.v文件。

`define SYNTHESIS

module DpicHalt (
  input  wire        is_ebreak,
  input  wire [31:0] a0,
  input  wire [63:0] inst_cnt,
  input  wire [63:0] cycle_cnt,
  input  wire [63:0] data_cnt,
  input  wire [63:0] exec_cnt,
  input  wire [63:0] cyc_compute,
  input  wire [63:0] cyc_j,
  input  wire [63:0] cyc_ls,
  input  wire [63:0] cyc_csr,
  input  wire [63:0] inst_compute,
  input  wire [63:0] inst_j,
  input  wire [63:0] inst_ls,
  input  wire [63:0] inst_csr
);

`ifndef SYNTHESIS

import "DPI-C" function void ebreak();
import "DPI-C" function void good_trap();
import "DPI-C" function void bad_trap();

always @(*) begin
  if(is_ebreak) begin
    $display("INSTS:%d", inst_cnt);
    $display("CYCLES:%d", cycle_cnt);
    $display("IPC:%24f", $itor(inst_cnt) / $itor(cycle_cnt));
    $display("DATA:%d", data_cnt);
    $display("EXEC:%d", exec_cnt);
    $display("COMPUTE:%d / %d", cyc_compute, inst_compute);
    $display("JUMP:%d / %d", cyc_j, inst_j);
    $display("LD/ST:%d / %d", cyc_ls, inst_ls);
    $display("CSR:%d / %d", cyc_csr, inst_csr);
    if(a0 == 0) good_trap();
    else        bad_trap();
    ebreak();
  end
end

`endif

endmodule

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions