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