66 logic <3:0>
qos = 0x0;
136 addr[6] == 0b00_0000;
139 addr[7] == 0b000_0000;
168 len[7] == 0b000_0000;
178 len inside {2, 4, 8, 16};
180 len inside {3,4, 7,8, 15,16, 31,32};
182 len inside {[4], [13:16], [29:32], [61:64]};
184 len inside {[9:16], [25:32], [57:64], [121:128]};
187 len inside {[17:32], [49:64], [113:128], [241:256]};
189 len inside {[33:64], [97:128], [225:256], [481:512]};
191 len inside {[65:128], [193:256], [449:512], [960:1024]};
193 len inside {[129:256], [385:512], [897:1024], [1921:2048]};
199 len <= ((2**byte(burst_size)) * c_AXI4_MAXBEATCNT) - byte(
addr[0]);
201 len <= ((2**byte(burst_size)) * c_AXI4_MAXBEATCNT) - byte(
addr[2]);
203 len <= ((2**byte(burst_size)) * c_AXI4_MAXBEATCNT) - byte(
addr[3]);
205 len <= ((2**byte(burst_size)) * c_AXI4_MAXBEATCNT) - byte(
addr[4]);
207 len <= ((2**byte(burst_size)) * c_AXI4_MAXBEATCNT) - byte(
addr[5]);
209 len <= ((2**byte(burst_size)) * c_AXI4_MAXBEATCNT) - byte(
addr[6]);
211 len <= ((2**byte(burst_size)) * c_AXI4_MAXBEATCNT) - byte(
addr[7]);
216 len <= ((2**byte(burst_size)) * c_AXI3_MAXBEATCNT) - byte(
addr[0]);
218 len <= ((2**byte(burst_size)) * c_AXI3_MAXBEATCNT) - byte(
addr[2]);
220 len <= ((2**byte(burst_size)) * c_AXI3_MAXBEATCNT) - byte(
addr[3]);
223 len <= ((2**byte(burst_size)) * c_AXI3_MAXBEATCNT) - byte(
addr[4]);
225 len <= ((2**byte(burst_size)) * c_AXI3_MAXBEATCNT) - byte(
addr[5]);
227 len <= ((2**byte(burst_size)) * c_AXI3_MAXBEATCNT) - byte(
addr[6]);
229 len <= ((2**byte(burst_size)) * c_AXI3_MAXBEATCNT) - byte(
addr[7]);
254 new (
string name=
"axi_seq_item");
257 bit
do_compare (uvm_object rhs, uvm_comparer comparer);
258 void do_print (uvm_printer printer);
265 input
int data_bus_bytes,
266 ref bit <7:0> data[],
293 $sformat(s,
"%s", super.convert2string());
294 $sformat(s,
"%s Protocol: %s", s, protocol.name);
295 $sformat(s,
"%s Cmd: %s ", s,
cmd.name);
296 $sformat(s,
"%s Addr = 0x%0x ", s,
addr);
297 $sformat(s,
"%s ID = 0x%0x ", s,
id);
298 $sformat(s,
"%s Len = 0x%0x (%0d) ", s,
len,
len);
299 $sformat(s,
"%s BurstSize = 0x%0x ", s,
burst_size);
300 $sformat(s,
"%s BurstType = 0x%0x ", s,
burst_type);
301 $sformat(s,
"%s BID = 0x%0x", s,
bid);
302 $sformat(s,
"%s BRESP = 0x%0x", s,
bresp);
306 for (
int i =0; i < j; i++) {
307 $sformat(sdata,
"%s 0x%02x ", sdata,
data[i]);
309 $sformat(s,
"%s Data[]: %s", s, sdata);
313 for (
int i =0; i < j; i++) {
314 $sformat(sdata,
"%s%0b", sdata,
valid[i]);
316 $sformat(s,
"%s valid[]: %s", s, sdata);
374 if(!$cast(_rhs, rhs)) {
378 for (
int i=0;i <
len;i++) {
381 return (super.do_compare(rhs, comparer) &&
398 uvm_info(this.get_type_name(),
"Starting pre_randomize", UVM_HIGH)
400 uvm_info(this.get_type_name(),
"Done pre_randomize", UVM_HIGH)
413 int valid_assert_bit;
415 uvm_info(this.get_type_name(),
"Starting post_randomize", UVM_HIGH)
418 super.post_randomize;
429 for (
int i=0; i <
len; i++) {
439 for (
int i=0;i <j;i++) {
447 for (
int i=0;i <j;i++) {
449 if (
valid[i] == 0b1) {
455 if (valid_asserts==0) {
456 valid_assert_bit=$urandom_range(j-1,0);
457 valid[valid_assert_bit] = 0b1;
458 uvm_info(
"axi_seq_item.post_randomize()",$sformatf(
"All zeros. Settin bit %0d to 1", valid_assert_bit), UVM_INFO)
462 for (
int i=0;i <j;i++) {
463 $sformat(valid_s,
"%s%0b", valid_s,
valid[i]);
475 uvm_info(this.get_type_name(),
"Done post_randomize", UVM_HIGH)
494 input
int data_bus_bytes,
495 ref bit <7:0>
data[],
509 if (data.size() != data_bus_bytes) {
510 data =
new[data_bus_bytes];
512 for (
int z=0;z <data_bus_bytes;z++) {
517 if (wstrb.size() != data_bus_bytes) {
518 wstrb =
new[data_bus_bytes];
520 for (
int z=0;z <data_bus_bytes;z++) {
527 .burst_length (
len));
530 if (beat_cnt == last_beat_cnt) {
541 .beat_cnt (beat_cnt),
542 .data_bus_bytes (data_bus_bytes),
543 .Lower_Byte_Lane (Lower_Byte_Lane),
544 .Upper_Byte_Lane (Upper_Byte_Lane),
545 .offset (data_offset));
548 for (
int i=Lower_Byte_Lane;i <=Upper_Byte_Lane;i++) {
549 if (data_offset+i-Lower_Byte_Lane <
len) {
551 data[i] = this.data[data_offset+i-Lower_Byte_Lane];
557 for (
int i=data_bus_bytes-1; i>=0;i--) {
558 $sformat(data_s,
" %s 0x%2x", data_s, data[i]);
559 $sformat(wstrb_s,
" %s%0b", wstrb_s, wstrb[i]);
563 $sformat(msg_s,
"%s beat_cnt:%0d", msg_s, beat_cnt);
564 $sformat(msg_s,
"%s Lower_Byte_Lane:%0d", msg_s, Lower_Byte_Lane);
565 $sformat(msg_s,
"%s Upper_Byte_Lane:%0d", msg_s, Upper_Byte_Lane);
566 $sformat(msg_s,
"%s data_offset:%0d", msg_s, data_offset);
568 $sformat(msg_s,
"%s wstrb:%s", msg_s, wstrb_s);
569 $sformat(msg_s,
"%s data:%s", msg_s, data_s);
571 uvm_info(
"axi_seq_item::get_beat_N_data", msg_s, UVM_HIGH)
logic< ID_WIDTH-1:0 > bid
bit< C_AXI_LEN_WIDTH-1:0 > calculate_axlen(input bit< C_AXI_ADDR_WIDTH-1:0 > addr, input bit< 2:0 > burst_size, input shortint burst_length)
calculate awlen or arlen
string convert2string()
Convert item's variable into one printable string.
const shortint c_AXI4_MAXBEATCNT
rand bit< ID_WIDTH-1:0 > id
constraint burst_type_c()
constraint burst_size_c()
rand bit< ADDR_WIDTH-1:0 > addr
uvm_object_utils(axi_seq_item) rand axi_protocol_version_t protocol
rand logic< 2:0 > burst_size
void get_beat_N_data(input int beat_cnt, input int data_bus_bytes, ref bit< 7:0 > data[], ref bit wstrb[], output bit wlast)
return beat values for write data and read data channels
const shortint c_AXI3_MAXBEATCNT
void get_beat_N_byte_lanes(input bit< C_AXI_ADDR_WIDTH-1:0 > addr, input bit< 2:0 > burst_size, input shortint burst_length, input bit< 1:0 > burst_type, input int beat_cnt, input int data_bus_bytes, output int Lower_Byte_Lane, output int Upper_Byte_Lane, output int offset)
return byte lanes that contain valid data
bit< LEN_WIDTH-1:0 > axlen
new(string name="axi_seq_item")
Constructor.
void post_randomize()
Tweak things after randomization.
bit do_compare(uvm_object rhs, uvm_comparer comparer)
Deep compare.
rand logic< 31:0 > toggle_pattern
void do_print(uvm_printer printer)
prints out immediate object, but no parents' stuff.
cmd_t
Command type - what is the purpose of this packet?
rand logic< 1:0 > burst_type
void do_copy(uvm_object rhs)
Deep copy.
contains all data and functions related to axi and usage
axi_protocol_version_t
Version 3 or Version 4.