Optimize hmac code Change modulos and exponentials to left/right shifts
diff --git a/hw/dv/sv/tl_agent/tl_seq_lib.sv b/hw/dv/sv/tl_agent/tl_seq_lib.sv index d7ea029..9e9a2e6 100644 --- a/hw/dv/sv/tl_agent/tl_seq_lib.sv +++ b/hw/dv/sv/tl_agent/tl_seq_lib.sv
@@ -24,32 +24,32 @@ begin : wait_response_thread for (int i = 0; i < req_cnt; i++) begin get_response(rsp); - `uvm_info(get_full_name(), $sformatf("Received rsp[%0d] : %0s", + `uvm_info(`gfn, $sformatf("Received rsp[%0d] : %0s", i, req.convert2string()), UVM_HIGH) process_response(pending_req.pop_front(), rsp); end end begin : request_thread - `uvm_info(get_full_name(), $sformatf("Start sending %0d host requests", req_cnt), UVM_HIGH) + `uvm_info(`gfn, $sformatf("Start sending %0d host requests", req_cnt), UVM_HIGH) for (int i = 0; i < req_cnt; i++) begin req = tl_seq_item::type_id::create("req"); start_item(req); randomize_req(req, i); finish_item(req); - `uvm_info(get_full_name(), $sformatf("Sent req[%0d] : %0s", + `uvm_info(`gfn, $sformatf("Sent req[%0d] : %0s", i, req.convert2string()), UVM_HIGH) pending_req.push_back(req); end end join - `uvm_info(get_full_name(), $sformatf("Finished sending %0d host requests", req_cnt), UVM_HIGH) + `uvm_info(`gfn, $sformatf("Finished sending %0d host requests", req_cnt), UVM_HIGH) endtask // Request randomization, override this functiont to do custom request generation virtual function void randomize_req(tl_seq_item req, int idx); if (!(req.randomize() with { a_valid_delay inside {[min_req_delay:max_req_delay]};})) begin - `uvm_fatal(get_full_name(), "Cannot randomize req") + `uvm_fatal(`gfn, "Cannot randomize req") end endfunction @@ -82,7 +82,7 @@ a_source == source; a_mask == mask; a_data == data;})) begin - `uvm_fatal(get_full_name(), "Cannot randomize req") + `uvm_fatal(`gfn, "Cannot randomize req") end endfunction @@ -109,11 +109,11 @@ forever begin p_sequencer.a_chan_req_fifo.get(req); rsp = randomize_rsp(req); - `uvm_info(get_full_name(), $sformatf("Sent rsp[%0d] : %0s, req: %0s", + `uvm_info(`gfn, $sformatf("Sent rsp[%0d] : %0s, req: %0s", rsp_cnt, rsp.convert2string(), req.convert2string()), UVM_HIGH) start_item(rsp); finish_item(rsp); - `uvm_info(get_full_name(), $sformatf("Sent rsp[%0d] : %0s", + `uvm_info(`gfn, $sformatf("Sent rsp[%0d] : %0s", rsp_cnt, rsp.convert2string()), UVM_HIGH) rsp_cnt++; end @@ -133,7 +133,7 @@ rsp.d_size == rsp.a_size; rsp.d_user == '0; // TODO: Not defined yet, tie it to zero rsp.d_source == rsp.a_source;})) begin - `uvm_fatal(get_full_name(), "Cannot randomize rsp") + `uvm_fatal(`gfn, "Cannot randomize rsp") end if (mem != null) begin if (req.a_opcode inside {PutFullData, PutPartialData}) begin
diff --git a/hw/ip/hmac/dv/env/seq_lib/hmac_base_vseq.sv b/hw/ip/hmac/dv/env/seq_lib/hmac_base_vseq.sv index 3de90af..a26e491 100644 --- a/hw/ip/hmac/dv/env/seq_lib/hmac_base_vseq.sv +++ b/hw/ip/hmac/dv/env/seq_lib/hmac_base_vseq.sv
@@ -11,9 +11,9 @@ bit do_hmac_init = 1'b1; bit do_back_pressure = 1'b0; - rand bit [2:0] wr_size; - rand int wr_addr; - rand bit [3:0] wr_mask; + rand bit [TL_AW-1:0] wr_addr; + rand bit [TL_SZW-1:0] wr_size; + rand bit [TL_DBW-1:0] wr_mask; constraint wr_size_c { wr_size inside {[0:2]}; // 0 is 2**0 byte size @@ -21,12 +21,12 @@ constraint wr_addr_c { wr_addr inside {[HMAC_MSG_FIFO_BASE : HMAC_MSG_FIFO_LAST_ADDR]}; - wr_addr % (2 ** wr_size) == 0; + wr_addr << (TL_AW - wr_size) == 0; solve wr_size before wr_addr; } constraint wr_mask_c { - $countones(wr_mask) == 2 ** wr_size; + $countones(wr_mask) == (1 << wr_size); (wr_addr & 'b01) -> wr_mask[0] == 0; (wr_addr & 'b10) -> wr_mask[1:0] == 0; (wr_addr & 'b11) -> wr_mask[2:0] == 0; @@ -135,7 +135,7 @@ if (msg_q.size() < 4) begin `DV_CHECK_FATAL(randomize(wr_size, wr_addr, wr_mask) - with {2 ** wr_size <= msg_q.size();}) + with {1 << wr_size <= msg_q.size();}) end else begin `DV_CHECK_FATAL(randomize(wr_size, wr_addr, wr_mask)); end