Skip to content

Commit 33cf8c5

Browse files
author
David Beneš
committed
feat(axi_ver): add tuser signal
1 parent 0825ebd commit 33cf8c5

File tree

2 files changed

+21
-11
lines changed

2 files changed

+21
-11
lines changed

comp/ver/axi/axi_driver.sv

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@ class Axi4SDriver #(DATA_WIDTH, USER_WIDTH, ITEM_WIDTH = 8) extends Driver;
3737
this.vif = v;
3838

3939
this.vif.cb.TVALID <= 0;
40+
this.vif.cb.TUSER <= 0;
4041
endfunction
4142

42-
task sendTransaction(AxiTransaction transaction);
43+
task sendTransaction(AxiTransaction #(ITEM_WIDTH, USER_WIDTH) transaction);
4344
Transaction tr;
4445
$cast(tr, transaction);
4546

@@ -57,7 +58,7 @@ class Axi4SDriver #(DATA_WIDTH, USER_WIDTH, ITEM_WIDTH = 8) extends Driver;
5758
endtask
5859

5960
task run();
60-
AxiTransaction transaction;
61+
AxiTransaction #(ITEM_WIDTH, USER_WIDTH) transaction;
6162
Transaction to;
6263
time before_get;
6364

@@ -113,13 +114,15 @@ class Axi4SDriver #(DATA_WIDTH, USER_WIDTH, ITEM_WIDTH = 8) extends Driver;
113114

114115
virtual task invalidateWordData();
115116
logic[DATA_WIDTH-1:0] data = 'x;
116-
logic[WORD_ITEMS-1:0] keep= 'x;
117+
logic[USER_WIDTH-1:0] user = 'x;
118+
logic[WORD_ITEMS-1:0] keep = 'x;
117119

118120
vif.cb.TDATA <= data;
121+
vif.cb.TUSER <= user;
119122
vif.cb.TKEEP <= keep;
120123
endtask
121124

122-
virtual task exposeWordData(AxiTransaction tr, int cycle, inout finished);
125+
virtual task exposeWordData(AxiTransaction #(ITEM_WIDTH, USER_WIDTH) tr, int cycle, inout finished);
123126
logic[DATA_WIDTH-1:0] data = 'x;
124127
logic[WORD_ITEMS-1:0] keep = '0;
125128
int j;
@@ -133,10 +136,11 @@ class Axi4SDriver #(DATA_WIDTH, USER_WIDTH, ITEM_WIDTH = 8) extends Driver;
133136
finished = 1;
134137

135138
vif.cb.TDATA <= data;
139+
vif.cb.TUSER <= tr.user;
136140
vif.cb.TKEEP <= keep;
137141
endtask
138142

139-
virtual task sendWord(AxiTransaction tr, int cycle, inout finished);
143+
virtual task sendWord(AxiTransaction #(ITEM_WIDTH, USER_WIDTH) tr, int cycle, inout finished);
140144
wordRandomWait();
141145
exposeWordData(tr, cycle, finished);
142146
validateWord(finished);
@@ -146,7 +150,7 @@ class Axi4SDriver #(DATA_WIDTH, USER_WIDTH, ITEM_WIDTH = 8) extends Driver;
146150
invalidateWordData();
147151
endtask
148152

149-
virtual task sendFrame(AxiTransaction tr);
153+
virtual task sendFrame(AxiTransaction #(ITEM_WIDTH, USER_WIDTH) tr);
150154
int cycle = 0;
151155
int finished = 0;
152156

@@ -157,4 +161,3 @@ class Axi4SDriver #(DATA_WIDTH, USER_WIDTH, ITEM_WIDTH = 8) extends Driver;
157161
endtask
158162

159163
endclass
160-

comp/ver/axi/axi_transaction.sv

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@
1414
*
1515
*/
1616

17-
class AxiTransaction #(ITEM_WIDTH = 8) extends Transaction;
17+
class AxiTransaction #(ITEM_WIDTH = 8, USER_WIDTH = 1) extends Transaction;
1818

1919
int frameSizeMin = 1;
2020
int frameSizeMax = 512;
2121

2222
rand bit [ITEM_WIDTH-1 : 0] data[];
23+
rand bit [USER_WIDTH-1 : 0] user;
2324
logic [3:0] fbe;
2425
logic [3:0] lbe;
2526

@@ -41,10 +42,13 @@ class AxiTransaction #(ITEM_WIDTH = 8) extends Transaction;
4142
$write("%x ",data[j]);
4243
end
4344
$write("\n");
45+
$write("Metadata value: %x \n",user);
46+
$write("\n");
47+
4448
endfunction
4549

4650
virtual function Transaction copy(Transaction to = null);
47-
AxiTransaction #(ITEM_WIDTH) tr;
51+
AxiTransaction #(ITEM_WIDTH, USER_WIDTH) tr;
4852

4953
if (to == null)
5054
tr = new();
@@ -54,13 +58,14 @@ class AxiTransaction #(ITEM_WIDTH = 8) extends Transaction;
5458
tr.fbe = fbe;
5559
tr.lbe = lbe;
5660
tr.data = data;
61+
tr.user = user;
5762
tr.frameSizeMax = frameSizeMax;
5863
tr.frameSizeMin = frameSizeMin;
5964
return tr;
6065
endfunction
6166

6267
virtual function bit compare(input Transaction to, output string diff, input int kind = -1);
63-
AxiTransaction #(ITEM_WIDTH) tr;
68+
AxiTransaction #(ITEM_WIDTH, USER_WIDTH) tr;
6469
$cast(tr, to);
6570
if (lbe != tr.lbe || fbe != tr.fbe) begin
6671
return 0;
@@ -76,9 +81,11 @@ class AxiTransaction #(ITEM_WIDTH = 8) extends Transaction;
7681
break;
7782
end
7883
return 0;
84+
end else if (user != tr.user) begin
85+
diff = $sformatf("User data does not match!");
86+
return 0;
7987
end else
8088
return 1;
8189
endfunction
8290

8391
endclass
84-

0 commit comments

Comments
 (0)