Commit c3cb9269 authored by Guillem's avatar Guillem
Browse files

WIP: test integration of MCCU with PMU

A set of unit tests are need for PMU and MCCU
parent b6c66141
# Hierarchy # Hierarchy
+ AXI_PMU.v + AXI_PMU.sv
+ AXI_PMU_interface_v1_0_S00_AXI.sv + AXI_PMU_interface_v1_0_S00_AXI.sv
+ MCCU.sv + MCCU.sv
# Parameters # Parameters
### AXI_PMU.v ### AXI_PMU.sv
| Name | Defaults | Valid values | Description | | Name | Defaults | Valid values | Description |
|--------------------------|----------|--------------|------------------------------------------------------------------------------------------| |--------------------------|----------|--------------|------------------------------------------------------------------------------------------|
| C_S_AXI_DATA_WIDTH | 32 | 32/64 | Sets the data width of the bus | | C_S_AXI_DATA_WIDTH | 32 | 32/64 | Sets the data width of the bus |
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
| O_W_0PAD | OVERFLOW_PROT - WEIGHTS_WIDTH| Padding of 0s for overflow and weights| | O_W_0PAD | OVERFLOW_PROT - WEIGHTS_WIDTH| Padding of 0s for overflow and weights|
# Pinout # Pinout
### AXI_PMU.v ### AXI_PMU.sv
| Number | Name | Type | Bus_wide(bits) | | Number | Name | Type | Bus_wide(bits) |
|--------|---------------|------|------------------| |--------|---------------|------|------------------|
| 1 | int_quota_c0_o| out | 1 | | 1 | int_quota_c0_o| out | 1 |
...@@ -138,7 +138,7 @@ Pass down to AXI_PMU_interface_v1_0_S00_AXI.sv ...@@ -138,7 +138,7 @@ Pass down to AXI_PMU_interface_v1_0_S00_AXI.sv
| 0x58 | 22 | Quota\_mask | User defined mask that selects which signals must be acounted for the quota| | 0x58 | 22 | Quota\_mask | User defined mask that selects which signals must be acounted for the quota|
| 0x5E | 23 | Quota\_limit | User defined value. When quota is over this value int\_quota is triggered | | 0x5E | 23 | Quota\_limit | User defined value. When quota is over this value int\_quota is triggered |
### AXI_PMU.v ### AXI_PMU.sv
......
...@@ -99,8 +99,8 @@ ...@@ -99,8 +99,8 @@
.C_S_AXI_ADDR_WIDTH(C_S_AXI_ADDR_WIDTH), .C_S_AXI_ADDR_WIDTH(C_S_AXI_ADDR_WIDTH),
.N_COUNTERS(N_COUNTERS), .N_COUNTERS(N_COUNTERS),
.N_CONF_REGS(N_CONF_REGS), .N_CONF_REGS(N_CONF_REGS),
.OVERFLOW(0), //No .OVERFLOW(1), //No
.QUOTA(0), //No .QUOTA(1), //No
.MCCU(1), //Yes .MCCU(1), //Yes
.N_CORES(2) .N_CORES(2)
) inst_AXI_PMU ( ) inst_AXI_PMU (
......
...@@ -187,7 +187,7 @@ ...@@ -187,7 +187,7 @@
reg [C_S_AXI_DATA_WIDTH-1:0] slv_reg [0:TOTAL_REGS-1] /*verilator public*/; reg [C_S_AXI_DATA_WIDTH-1:0] slv_reg [0:TOTAL_REGS-1] /*verilator public*/;
wire slv_reg_rden; wire slv_reg_rden;
wire slv_reg_wren; wire slv_reg_wren/*verilator public*/;
reg [C_S_AXI_DATA_WIDTH-1:0] reg_data_out; reg [C_S_AXI_DATA_WIDTH-1:0] reg_data_out;
integer byte_index; integer byte_index;
reg aw_en; reg aw_en;
...@@ -343,8 +343,11 @@ ...@@ -343,8 +343,11 @@
end end
if(OVERFLOW==1) begin : generated_overflow if(OVERFLOW==1) begin : generated_overflow
//iterate over the registers, each one has one overflow bit //iterate over the registers, each one has one overflow bit
for (integer j=0; j<N_COUNTERS; j=j+1) begin : overflow_bit
//When more than 32 counters, extra registers are needed //When more than 32 counters, extra registers are needed
`ifdef ASSERTIONS
assert(N_COUNTERS < 32);
`endif
for (integer j=0; j<N_COUNTERS; j=j+1) begin : overflow_bit
localparam integer OVERFLOW_REGS_OFFSET= N_COUNTERS+N_CONF_REGS; localparam integer OVERFLOW_REGS_OFFSET= N_COUNTERS+N_CONF_REGS;
automatic integer a = j/C_S_AXI_DATA_WIDTH; automatic integer a = j/C_S_AXI_DATA_WIDTH;
if (reset_PMU) if (reset_PMU)
...@@ -533,8 +536,8 @@ ...@@ -533,8 +536,8 @@
//iterate over the registers, each one has one overflow bit //iterate over the registers, each one has one overflow bit
for (integer j=0; j<N_COUNTERS; j=j+1) begin : overflow_bit for (integer j=0; j<N_COUNTERS; j=j+1) begin : overflow_bit
//When more than 32 counters, extra registers are needed //When more than 32 counters, extra registers are needed
integer OVERFLOW_REGS_OFFSET= N_COUNTERS+N_CONF_REGS; automatic integer OVERFLOW_REGS_OFFSET= N_COUNTERS+N_CONF_REGS;
integer a = j/C_S_AXI_DATA_WIDTH; automatic integer a = j/C_S_AXI_DATA_WIDTH;
int_overflow_o =(reset_PMU || (S_AXI_ARESETN_i == 1'b0))? int_overflow_o =(reset_PMU || (S_AXI_ARESETN_i == 1'b0))?
1'b0: | slv_reg[a+OVERFLOW_REGS_OFFSET]; 1'b0: | slv_reg[a+OVERFLOW_REGS_OFFSET];
end end
...@@ -781,6 +784,57 @@ ...@@ -781,6 +784,57 @@
assign MCCU_int_o[i] = 1'b0; assign MCCU_int_o[i] = 1'b0;
end end
end end
////////////////////////////////////////////////////////////////////////////////
//
// Formal Verification section begins here.
//
////////////////////////////////////////////////////////////////////////////////
`ifdef FORMAL
localparam F_LGDEPTH = 4;
wire [(F_LGDEPTH-1):0] f_axi_awr_outstanding,
f_axi_wr_outstanding,
f_axi_rd_outstanding;
// Connect our slave to the AXI-lite property set
//
faxil_slave #( .C_AXI_DATA_WIDTH(C_S_AXI_DATA_WIDTH),
.C_AXI_ADDR_WIDTH(C_S_AXI_ADDR_WIDTH),
.F_LGDEPTH(F_LGDEPTH)) properties(
.i_clk(S_AXI_ACLK_i),
.i_axi_reset_n(S_AXI_ARESETN_i),
//
.i_axi_awaddr(S_AXI_AWADDR_i),
.i_axi_awcache(4'h0),
.i_axi_awprot(1'b0),
.i_axi_awvalid(S_AXI_AWVALID_i),
.i_axi_awready(S_AXI_AWREADY_o),
//
.i_axi_wdata(S_AXI_WDATA_i),
.i_axi_wstrb(S_AXI_WSTRB_i),
.i_axi_wvalid(S_AXI_WVALID_i),
.i_axi_wready(S_AXI_WREADY_o),
//
.i_axi_bresp(S_AXI_BRESP_o),
.i_axi_bvalid(S_AXI_BVALID_o),
.i_axi_bready(S_AXI_BREADY_i),
//
.i_axi_araddr(S_AXI_ARADDR_i),
.i_axi_arprot(1'b0),
.i_axi_arcache(4'h0),
.i_axi_arvalid(S_AXI_ARVALID_i),
.i_axi_arready(S_AXI_ARREADY_o),
//
.i_axi_rdata(S_AXI_RDATA_o),
.i_axi_rresp(S_AXI_RRESP_o),
.i_axi_rvalid(S_AXI_RVALID_o),
.i_axi_rready(S_AXI_RREADY_i),
//
.f_axi_rd_outstanding(f_axi_rd_outstanding),
.f_axi_wr_outstanding(f_axi_wr_outstanding),
.f_axi_awr_outstanding(f_axi_awr_outstanding));
`endif
endmodule endmodule
`default_nettype wire //allow compatibility with legacy code and xilinx ip `default_nettype wire //allow compatibility with legacy code and xilinx ip
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
// Width of weights registers // Width of weights registers
parameter integer WEIGHTS_WIDTH = 7, parameter integer WEIGHTS_WIDTH = 7,
//Cores. Change this may break Verilator TB //Cores. Change this may break Verilator TB
parameter integer N_CORES =4, parameter integer N_CORES =2,
//Signals per core. Change this may break Verilator TB //Signals per core. Change this may break Verilator TB
parameter integer CORE_EVENTS =4 parameter integer CORE_EVENTS =4
) )
...@@ -94,7 +94,6 @@ ...@@ -94,7 +94,6 @@
for (i=0; i<N_CORES; i=i+1) begin : ResetQuota for (i=0; i<N_CORES; i=i+1) begin : ResetQuota
quota_int[i] <={DATA_WIDTH{1'b0}}; quota_int[i] <={DATA_WIDTH{1'b0}};
end end
/*---------- /*----------
Async reset current cycle consumed quota Async reset current cycle consumed quota
----------*/ ----------*/
......
...@@ -21,4 +21,4 @@ prep -top MCCU ...@@ -21,4 +21,4 @@ prep -top MCCU
#opt -share_all #opt -share_all
[files] [files]
/home/bscuser/GITLAB/multicore_pmu/lagarto-lowrisc/lagarto_modulos/AXI_PMU/MCCU/hdl/MCCU.sv ../../hdl/MCCU.sv
...@@ -18,4 +18,4 @@ verific -import -extnets -all MCCU ...@@ -18,4 +18,4 @@ verific -import -extnets -all MCCU
prep -top MCCU prep -top MCCU
[files] [files]
/home/bscuser/GITLAB/multicore_pmu/lagarto-lowrisc/lagarto_modulos/AXI_PMU/MCCU/hdl/MCCU.sv ../../hdl/MCCU.sv
$date $date
Tue Jul 30 13:01:17 2019 Mon Aug 26 11:50:00 2019
$end $end
$version $version
QuestaSim Version 10.7c QuestaSim Version 10.7c
......
...@@ -16,6 +16,15 @@ ...@@ -16,6 +16,15 @@
#include <algorithm> #include <algorithm>
#define TRACE_DEF true #define TRACE_DEF true
#define addr_PMU_main_cfg 16
#define addr_PMU_quota_mask 22
#define addr_PMU_quota_limit 23
#define addr_MCCU_main_cfg 24
#define addr_MCCU_c0_available_quota 25
#define addr_MCCU_c1_available_quota 26
#define addr_MCCU_weights_r0 27
#define addr_MCCU_weights_r1 28
//time for waveforms //time for waveforms
vluint64_t main_time =0;//current simulation time vluint64_t main_time =0;//current simulation time
double sc_time_stamp(){ //called by $time in verilog double sc_time_stamp(){ //called by $time in verilog
...@@ -68,15 +77,23 @@ void tick_and_trace(VAXI_PMU* module,VerilatedVcdC* tfp){ ...@@ -68,15 +77,23 @@ void tick_and_trace(VAXI_PMU* module,VerilatedVcdC* tfp){
struct TestCase { struct TestCase {
const char* name; const char* name;
bool en, clr; bool en, clr, wren;
uint64_t ev0,ev1,ev2,ev3,quota_mask,quota_lim; uint32_t ev0,ev1,ev2,ev3,quota_mask,quota_lim, MCCU_cfg,MCCU_c0_av_quota,MCCU_c1_av_quota,MCCU_weight0,MCCU_weight1;
}; };
//assign slv_reg_wren = axi_wready && S_AXI_WVALID_i && axi_awready && S_AXI_AWVALID_i;
TestCase test_cases[] { TestCase test_cases[] {
//name en,clr,ev0,ev1,ev2,ev3,quota_mask,quota_lim //name en,clr,wren,ev0,ev1,ev2,ev3,quota_mask,quota_lim,MCCU_cfg,MCCU_c0_av_quota,MCCU_c1_av_quota,MCCU_weight0,MCCU_weight1
{ "No Int_quota " ,1 ,0 ,2 ,3 ,3 ,4 ,0b11 ,6 }, { "No Int_quota " ,1 ,0 ,1 ,2 ,3 ,3 ,4 ,0b11 ,6 ,0 ,0 ,0 ,0 ,0 },
{ "Int_quota " ,1 ,0 ,1 ,0 ,0 ,0 ,0b11 ,6 }, { "Int_quota " ,1 ,0 ,1 ,1 ,0 ,0 ,0 ,0b11 ,6 ,0 ,0 ,0 ,0 ,0 },
{ "Int_quota " ,1 ,0 ,1 ,3 ,3 ,4 ,0b11 ,6 }, { "Int_quota " ,1 ,0 ,1 ,1 ,3 ,3 ,4 ,0b11 ,6 ,0 ,0 ,0 ,0 ,0 },
{ "Set_MCCU " ,1 ,0 ,1 ,0 ,0 ,0 ,0 ,0b00 ,0 ,0 ,15 ,0 ,0 ,0},
{ "Set_MCCU " ,1 ,0 ,1 ,0 ,0 ,0 ,0 ,0b00 ,0 ,0 ,15 ,10 ,0 ,0},
{ "Set_MCCU " ,1 ,0 ,1 ,0 ,0 ,0 ,0 ,0b00 ,0 ,0 ,15 ,10 ,0xffff ,0},
{ "Set_MCCU " ,1 ,0 ,1 ,0 ,0 ,0 ,0 ,0b00 ,0 ,0 ,15 ,10 ,0xffff ,0xffff },
{ "Set_MCCU " ,1 ,0 ,1 ,0 ,0 ,0 ,0 ,0b00 ,0 ,0xffff ,15 ,10 ,0xffff ,0xffff },
{ "Set_MCCU " ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0b00 ,0 ,0xffff ,15 ,10 ,0xffff ,0xffff },
{ "Set_MCCU " ,1 ,0 ,1 ,0 ,0 ,0 ,0 ,0b00 ,0 ,0x0fff ,15 ,10 ,0xffff ,0xffff },
}; };
int main(int argc, char **argv, char **env) { int main(int argc, char **argv, char **env) {
...@@ -108,14 +125,24 @@ int main(int argc, char **argv, char **env) { ...@@ -108,14 +125,24 @@ int main(int argc, char **argv, char **env) {
for(int k = 0; k < num_test_cases; k++) { for(int k = 0; k < num_test_cases; k++) {
TestCase *test_case = &test_cases[k]; TestCase *test_case = &test_cases[k];
//fill configuration register //fill configuration register
PMU->AXI_PMU->inst_AXI_PMU->slv_reg[16]|=test_case->en; PMU->AXI_PMU->inst_AXI_PMU->slv_reg[addr_PMU_main_cfg]|=test_case->en;
PMU->AXI_PMU->inst_AXI_PMU->slv_reg[16]|=(test_case->clr)<<1; PMU->AXI_PMU->inst_AXI_PMU->slv_reg[addr_PMU_main_cfg]|=(test_case->clr)<<1;
//set the mask for quota //set the mask for quota
PMU->AXI_PMU->inst_AXI_PMU->slv_reg[22]|=test_case->quota_mask; PMU->AXI_PMU->inst_AXI_PMU->slv_reg[addr_PMU_quota_mask]|=test_case->quota_mask;
//Set the limit of quota //Set the limit of quota
PMU->AXI_PMU->inst_AXI_PMU->slv_reg[23]|=test_case->quota_lim; PMU->AXI_PMU->inst_AXI_PMU->slv_reg[addr_PMU_quota_limit]|=test_case->quota_lim;
//set the MCCU values
PMU->AXI_PMU->inst_AXI_PMU->slv_reg[addr_MCCU_main_cfg]=test_case->MCCU_cfg;
PMU->AXI_PMU->inst_AXI_PMU->slv_reg[addr_MCCU_c0_available_quota]=test_case->MCCU_c0_av_quota;
PMU->AXI_PMU->inst_AXI_PMU->slv_reg[addr_MCCU_c1_available_quota]=test_case->MCCU_c1_av_quota;
PMU->AXI_PMU->inst_AXI_PMU->slv_reg[addr_MCCU_weights_r0]=test_case->MCCU_weight0;
PMU->AXI_PMU->inst_AXI_PMU->slv_reg[addr_MCCU_weights_r1]=test_case->MCCU_weight1;
PMU->AXI_PMU->inst_AXI_PMU->slv_reg_wren=1;
// run some cycles // run some cycles
uint64_t tmp=std::max(std::max(test_case->ev0,test_case->ev1),std::max(test_case->ev2,test_case->ev3)); uint64_t tmp=std::max(std::max(test_case->ev0,test_case->ev1),std::max(test_case->ev2,test_case->ev3));
//if no events, still execute one cycle
if(tmp==0)
tmp=1;
for(uint64_t i=0;i<tmp;i++){ for(uint64_t i=0;i<tmp;i++){
tick_and_trace(PMU,tfp); tick_and_trace(PMU,tfp);
tick_and_trace(PMU,tfp); tick_and_trace(PMU,tfp);
...@@ -146,13 +173,22 @@ int main(int argc, char **argv, char **env) { ...@@ -146,13 +173,22 @@ int main(int argc, char **argv, char **env) {
} }
} }
} }
//force overflow
PMU->AXI_PMU->inst_AXI_PMU->slv_reg[4]=0xfffffffe;
for(uint64_t i=0;i<3;i++){
PMU->EV4_i= !PMU->EV4_i;
//waveforms and tick clock
tick_and_trace(PMU,tfp);
//waveforms and tick clock
PMU->EV4_i= !PMU->EV4_i;
tick_and_trace(PMU,tfp);
}
//do a software reset //do a software reset
PMU->AXI_PMU->inst_AXI_PMU->slv_reg[16]|=1<<1; PMU->AXI_PMU->inst_AXI_PMU->slv_reg[addr_PMU_main_cfg]|=1<<1;
tick_and_trace(PMU,tfp); tick_and_trace(PMU,tfp);
tick_and_trace(PMU,tfp); tick_and_trace(PMU,tfp);
//continue monitoring //continue monitoring
PMU->AXI_PMU->inst_AXI_PMU->slv_reg[16]&=0<<1; PMU->AXI_PMU->inst_AXI_PMU->slv_reg[addr_PMU_main_cfg]&=0<<1;
tick_and_trace(PMU,tfp); tick_and_trace(PMU,tfp);
tick_and_trace(PMU,tfp); tick_and_trace(PMU,tfp);
//delay test //delay test
...@@ -163,6 +199,10 @@ int main(int argc, char **argv, char **env) { ...@@ -163,6 +199,10 @@ int main(int argc, char **argv, char **env) {
tick_and_trace(PMU,tfp); tick_and_trace(PMU,tfp);
tick_and_trace(PMU,tfp); tick_and_trace(PMU,tfp);
tick_and_trace(PMU,tfp); tick_and_trace(PMU,tfp);
//do a hard reset
PMU->S_AXI_ARESETN_i=0;
ticktoc_and_trace(PMU,tfp);
PMU->S_AXI_ARESETN_i=1;
//waveforms //waveforms
if (tfp != NULL){ if (tfp != NULL){
tfp->dump (main_time); tfp->dump (main_time);
......
...@@ -7,7 +7,7 @@ echo -e "${RED} Modify the script if you need to set your verilator path ${NC}" ...@@ -7,7 +7,7 @@ echo -e "${RED} Modify the script if you need to set your verilator path ${NC}"
#export VERILATOR_ROOT=$TOP/verilator #export VERILATOR_ROOT=$TOP/verilator
#____________end set path verilator #____________end set path verilator
rm -rf obj_dir rm -rf obj_dir
verilator -Wall --cc --trace ../../hdl/AXI_PMU.v -I../../hdl -I../../submodules/MCCU/hdl --exe AXI_PMU_TB.cpp -CFLAGS "-std=c++14" verilator -Wall --cc --trace ../../hdl/AXI_PMU.sv -I../../hdl -I../../submodules/MCCU/hdl --exe AXI_PMU_TB.cpp -CFLAGS "-std=c++14"
cd obj_dir/ cd obj_dir/
make -f VAXI_PMU.mk make -f VAXI_PMU.mk
./VAXI_PMU ./VAXI_PMU
......
[*] [*]
[*] GTKWave Analyzer v3.3.86 (w)1999-2017 BSI [*] GTKWave Analyzer v3.3.86 (w)1999-2017 BSI
[*] Wed Jul 31 14:12:00 2019 [*] Wed Aug 28 14:44:18 2019
[*] [*]
[dumpfile] "/home/bscuser/GITLAB/multicore_pmu/lagarto-lowrisc/lagarto_modulos/AXI_PMU/tb/verilator/obj_dir/VAXI_PMU.vcd" [dumpfile] "/home/bscuser/GITLAB/multicore_pmu/lagarto-lowrisc/lagarto_modulos/AXI_PMU/tb/verilator/obj_dir/VAXI_PMU.vcd"
[dumpfile_mtime] "Wed Jul 31 14:10:11 2019" [dumpfile_mtime] "Wed Aug 28 14:43:56 2019"
[dumpfile_size] 27515 [dumpfile_size] 29892
[savefile] "/home/bscuser/GITLAB/multicore_pmu/lagarto-lowrisc/lagarto_modulos/AXI_PMU/tb/verilator/tests.gtkw" [savefile] "/home/bscuser/GITLAB/multicore_pmu/lagarto-lowrisc/lagarto_modulos/AXI_PMU/tb/verilator/tests.gtkw"
[timestart] 0 [timestart] 0
[size] 1920 1025 [size] 1920 1052
[pos] 3840 0 [pos] 0 0
*-3.606035 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 *-3.606035 23 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[treeopen] TOP. [treeopen] TOP.
[treeopen] TOP.AXI_PMU. [treeopen] TOP.AXI_PMU.
[treeopen] TOP.AXI_PMU.inst_AXI_PMU. [treeopen] TOP.AXI_PMU.inst_AXI_PMU.
[treeopen] TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.
[treeopen] TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(3). [treeopen] TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(3).
[sst_width] 413 [sst_width] 413
[signals_width] 687 [signals_width] 222
[sst_expanded] 1 [sst_expanded] 1
[sst_vpaned_height] 319 [sst_vpaned_height] 386
@22
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(20)[31:0]
@800022 @800022
TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0] TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
@28 @28
(0)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0] [color] 1
(1)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
(2)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
(3)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
(4)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
(5)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
(6)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
(7)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
(8)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
(9)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
(10)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
(11)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
(12)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
(13)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
(14)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
(15)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0] (15)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
[color] 2
(14)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
[color] 3
(13)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
[color] 7
(12)TOP.AXI_PMU.inst_AXI_PMU.events_i[15:0]
@1001200 @1001200
-group_end -group_end
@28 @28
TOP.AXI_PMU.inst_AXI_PMU.S_AXI_ACLK_i TOP.AXI_PMU.inst_AXI_PMU.S_AXI_ACLK_i
@22
TOP.AXI_PMU.inst_AXI_PMU.MCCU_CORE_EVENTS[31:0]
TOP.AXI_PMU.inst_AXI_PMU.MCCU_DATA_WIDTH[31:0]
TOP.AXI_PMU.inst_AXI_PMU.MCCU_N_CORES[31:0]
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.MCCU_REGS[31:0]
TOP.AXI_PMU.inst_AXI_PMU.MCCU_WEIGHTS_REGS[31:0]
TOP.AXI_PMU.inst_AXI_PMU.MCCU_WEIGHTS_WIDTH[31:0]
@800200
-g0
@24
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(0).ARRAY_BIT_OFFSET_H[31:0]
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(0).SLV_BIT_OFFSET_H[31:0]
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(0).ARRAY_BIT_OFFSET_L[31:0]
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(0).SLV_BIT_OFFSET_L[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(0).CURRENT_REG_OFFSET[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(0).USED_BITS[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(0).USED_REGISTERS[31:0]
@1000200
-g0
@800200
-g1
@24
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(1).ARRAY_BIT_OFFSET_H[31:0]
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(1).ARRAY_BIT_OFFSET_L[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(1).CURRENT_REG_OFFSET[31:0]
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(1).SLV_BIT_OFFSET_H[31:0]
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(1).SLV_BIT_OFFSET_L[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(1).USED_BITS[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(1).USED_REGISTERS[31:0]
@1000200
-g1
@800200 @800200
-g2 -counters_slv_reg
@24 @22
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(2).ARRAY_BIT_OFFSET_H[31:0]
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(2).ARRAY_BIT_OFFSET_L[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(2).CURRENT_REG_OFFSET[31:0]
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(2).SLV_BIT_OFFSET_H[31:0]
[color] 1 [color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(2).SLV_BIT_OFFSET_L[31:0] TOP.AXI_PMU.inst_AXI_PMU.slv_reg(0)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(2).USED_BITS[31:0] [color] 2
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(2).USED_REGISTERS[31:0] TOP.AXI_PMU.inst_AXI_PMU.slv_reg(1)[31:0]
[color] 3
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(2)[31:0]
[color] 7
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(3)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(4)[31:0]
@c00200
-unused
@22
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(4)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(5)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(6)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(7)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(8)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(9)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(10)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(11)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(12)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(13)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(14)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(15)[31:0]
@1401200
-unused
@1000200 @1000200
-g2 -counters_slv_reg
@800200 @800200
-g3 -main_cfg_slv_reg
@24 @22
[color] 1 TOP.AXI_PMU.inst_AXI_PMU.slv_reg(16)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(3).ARRAY_BIT_OFFSET_H[31:0]
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(3).ARRAY_BIT_OFFSET_L[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(3).CURRENT_REG_OFFSET[31:0]
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(3).SLV_BIT_OFFSET_H[31:0]
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(3).SLV_BIT_OFFSET_L[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(3).USED_BITS[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(3).USED_REGISTERS[31:0]
@1000200 @1000200
-g3 -main_cfg_slv_reg
@c00200
-secondary_cfg_svl_reg
@22
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(17)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(18)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(19)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.slv_reg(20)[31:0]
@1401200
-secondary_cfg_svl_reg
@800200 @800200
-g4 -overflow_slv_reg
@24 @22
[color] 1 TOP.AXI_PMU.inst_AXI_PMU.slv_reg(21)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(4).ARRAY_BIT_OFFSET_H[31:0]
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(4).ARRAY_BIT_OFFSET_L[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(4).CURRENT_REG_OFFSET[31:0]
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(4).SLV_BIT_OFFSET_H[31:0]
[color] 1
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(4).SLV_BIT_OFFSET_L[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(4).USED_BITS[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(4).USED_REGISTERS[31:0]
@1000200 @1000200
-g4 -overflow_slv_reg
@800200 @800200
-g5 -quota_slv_regs
@24 @24
[color] 1 TOP.AXI_PMU.inst_AXI_PMU.BASE_QUOTA[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(5).ARRAY_BIT_OFFSET_H[31:0] @22
[color] 1 TOP.AXI_PMU.inst_AXI_PMU.slv_reg(22)[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(5).ARRAY_BIT_OFFSET_L[31:0] @200
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(5).CURRENT_REG_OFFSET[31:0] -quota_mask
[color] 1 @22
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(5).SLV_BIT_OFFSET_H[31:0] TOP.AXI_PMU.inst_AXI_PMU.slv_reg(23)[31:0]
[color] 1 @200
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(5).SLV_BIT_OFFSET_L[31:0] -quota_limit
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(5).USED_BITS[31:0]
TOP.AXI_PMU.inst_AXI_PMU.generate_MCCU.slv_reg_to_flat_bitarray(5).USED_REGISTERS[31:0]
@1000200 @1000200
-g5 -quota_slv_regs
@800204
-g6
@25
[color] 1