module top;
parameter int DATA_WIDTH = 64;
bit [2:0] aw_size;
bit [7:0] aw_len;
bit [31:0] aw_addr;
bit [7:0] w_strb[$];
bit [31:0] addr_align;
function automatic bit [7:0] gen_strb ( input bit [31:0] addr, input bit [2:0] aw_size );
bit [7:0] strb;
int size_in_bytes = 2**aw_size;
addr_align = addr % (DATA_WIDTH/8);
for( int i=0;i<DATA_WIDTH/8;i++) begin
if ( i inside {[addr_align:addr_align+size_in_bytes-1]}) strb[i] = 1;
else strb[i] = 0;
end
//$display("ADDR_A:%0h BY:%0d STRB:%0h",addr_align,size_in_bytes,strb);
return strb;
endfunction
function automatic void load_strb ( );
bit [31:0] addr_l;
for ( int i=0;i<aw_len+1;i++) begin
addr_l = aw_addr + (i << aw_size);
w_strb.push_back(gen_strb(addr_l,aw_size));
$display("ADDR:%0d STRB:%0h",addr_l,w_strb[i]);
end
endfunction
initial begin
aw_addr = 'h3;
aw_len = 'h2;
aw_size = 'h2;
load_strb();
end
endmodule
RESULT:
Compiler version U-2023.03-SP2_Full64; Runtime version U-2023.03-SP2_Full64; Oct 16 02:13 2025
ADDR:3 STRB:78
ADDR:7 STRB:80
ADDR:11 STRB:78
V C S S i m u l a t i o n R e p o r t