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
