Skip to content

Commit 76665e5

Browse files
util_axis_fifo: Updated ADI AXI and AXIS agents
Signed-off-by: Istvan-Zsolt Szekely <istvan.szekely@analog.com>
1 parent 2f11dc9 commit 76665e5

File tree

4 files changed

+82
-18
lines changed

4 files changed

+82
-18
lines changed

library/vip/amd/axi/adi_axi_agent.sv

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,23 @@ package adi_axi_agent_pkg;
6060
super.new(name, parent);
6161

6262
this.agent = new("Agent", master_vip_if);
63-
this.sequencer = new("Sequencer", this.agent, this);
63+
this.sequencer = new("Sequencer", this.agent.wr_driver, this.agent.rd_driver, this);
6464
this.monitor = new("Monitor TX", this.agent.monitor, this);
6565
endfunction: new
6666

67+
task start();
68+
this.agent.start_master();
69+
endtask: start
70+
71+
task run();
72+
this.monitor.run();
73+
endtask: run
74+
75+
task stop();
76+
this.monitor.stop();
77+
this.agent.stop_master();
78+
endtask: stop
79+
6780
endclass: adi_axi_master_agent
6881

6982

@@ -85,12 +98,27 @@ package adi_axi_agent_pkg;
8598
this.monitor = new("Monitor TX", this.agent.monitor, this);
8699
endfunction: new
87100

101+
task start();
102+
this.agent.start_slave();
103+
endtask: start
104+
105+
task run();
106+
this.monitor.run();
107+
endtask: run
108+
109+
task stop();
110+
this.monitor.stop();
111+
this.agent.stop_slave();
112+
endtask: stop
113+
88114
endclass: adi_axi_slave_mem_agent
89115

90116

91117
class adi_axi_passthrough_mem_agent #(int `AXI_VIP_PARAM_ORDER(passthrough)) extends adi_agent;
92118

93119
axi_passthrough_mem_agent #(`AXI_VIP_PARAM_ORDER(passthrough)) agent;
120+
m_axi_sequencer #(`AXI_VIP_PARAM_ORDER(passthrough)) master_sequencer;
121+
s_axi_sequencer #(`AXI_VIP_PARAM_ORDER(passthrough)) slave_sequencer;
94122
adi_axi_monitor #(`AXI_VIP_PARAM_ORDER(passthrough)) monitor;
95123

96124
function new(
@@ -101,9 +129,26 @@ package adi_axi_agent_pkg;
101129
super.new(name, parent);
102130

103131
this.agent = new("Agent", passthrough_vip_if);
132+
this.master_sequencer = new("Slave Sequencer", this.agent.mst_wr_driver, this.agent.mst_rd_driver, this);
133+
this.slave_sequencer = new("Slave Sequencer", this.agent.mem_model, this);
104134
this.monitor = new("Monitor TX", this.agent.monitor, this);
105135
endfunction: new
106136

137+
task start();
138+
this.warning($sformatf("Start must called manually in the test program or environment"));
139+
endtask: start
140+
141+
task run();
142+
this.slave_sequencer.run();
143+
this.monitor.run();
144+
endtask: run
145+
146+
task stop();
147+
this.monitor.stop();
148+
this.agent.stop_slave();
149+
this.agent.stop_master();
150+
endtask: stop
151+
107152
endclass: adi_axi_passthrough_mem_agent
108153

109154
endpackage

library/vip/amd/axi/adi_axi_monitor.sv

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package adi_axi_monitor_pkg;
1616
adi_publisher #(logic [7:0]) publisher_rx;
1717

1818
protected bit enabled;
19+
protected event enable_ev;
1920

2021
// constructor
2122
function new(
@@ -39,14 +40,27 @@ package adi_axi_monitor_pkg;
3940
return;
4041
end
4142

42-
fork
43-
this.get_transaction();
44-
join_none
45-
4643
this.enabled = 1;
4744
this.info($sformatf("Monitor enabled"), ADI_VERBOSITY_MEDIUM);
45+
46+
fork
47+
begin
48+
this.get_transaction();
49+
end
50+
begin
51+
if (this.enabled == 1) begin
52+
@enable_ev;
53+
end
54+
disable fork;
55+
end
56+
join_none
4857
endtask: run
4958

59+
function void stop();
60+
this.enabled = 0;
61+
-> enable_ev;
62+
endfunction: stop
63+
5064
// collect data from the DDR interface, all WRITE transaction are coming
5165
// from the ADC and all READ transactions are going to the DAC
5266
task get_transaction();

library/vip/amd/axi/m_axi_sequencer.sv

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,22 @@ package m_axi_sequencer_pkg;
4545

4646
class m_axi_sequencer #(`AXI_VIP_PARAM_DECL(AXI)) extends reg_accessor;
4747

48-
axi_mst_agent #(`AXI_VIP_PARAM_ORDER(AXI)) agent;
48+
axi_mst_wr_driver #(`AXI_VIP_PARAM_ORDER(AXI)) wr_driver;
49+
axi_mst_rd_driver #(`AXI_VIP_PARAM_ORDER(AXI)) rd_driver;
4950

5051
semaphore reader_s;
5152
semaphore writer_s;
5253

5354
function new(
5455
input string name,
55-
input axi_mst_agent #(`AXI_VIP_PARAM_ORDER(AXI)) agent,
56+
input axi_mst_wr_driver #(`AXI_VIP_PARAM_ORDER(AXI)) wr_driver,
57+
input axi_mst_rd_driver #(`AXI_VIP_PARAM_ORDER(AXI)) rd_driver,
5658
input adi_agent parent = null);
5759

5860
super.new(name, parent);
5961

60-
this.agent = agent;
62+
this.wr_driver = wr_driver;
63+
this.rd_driver = rd_driver;
6164

6265
reader_s = new(1);
6366
writer_s = new(1);
@@ -137,15 +140,15 @@ package m_axi_sequencer_pkg;
137140
input bit [63:0] data =0);
138141

139142
axi_transaction wr_trans;
140-
wr_trans = agent.wr_driver.create_transaction(name);
143+
wr_trans = wr_driver.create_transaction(name);
141144
wr_trans.set_write_cmd(addr, burst, id, len, size);
142145
wr_trans.set_prot(prot);
143146
wr_trans.set_lock(lock);
144147
wr_trans.set_cache(cache);
145148
wr_trans.set_region(region);
146149
wr_trans.set_qos(qos);
147150
wr_trans.set_data_block(data);
148-
agent.wr_driver.send(wr_trans);
151+
wr_driver.send(wr_trans);
149152

150153
endtask : single_write_transaction_api
151154

@@ -164,7 +167,7 @@ package m_axi_sequencer_pkg;
164167
input bit [63:0] data =0);
165168

166169
axi_transaction wr_trans;
167-
wr_trans = agent.wr_driver.create_transaction(name);
170+
wr_trans = wr_driver.create_transaction(name);
168171
wr_trans.set_write_cmd(addr, burst, id, len, size);
169172
wr_trans.set_prot(prot);
170173
wr_trans.set_lock(lock);
@@ -173,8 +176,8 @@ package m_axi_sequencer_pkg;
173176
wr_trans.set_qos(qos);
174177
wr_trans.set_data_block(data);
175178
wr_trans.set_driver_return_item_policy(XIL_AXI_PAYLOAD_RETURN);
176-
agent.wr_driver.send(wr_trans);
177-
agent.wr_driver.wait_rsp(wr_trans);
179+
wr_driver.send(wr_trans);
180+
wr_driver.wait_rsp(wr_trans);
178181

179182
endtask : single_write_transaction_readback_api
180183

@@ -193,14 +196,14 @@ package m_axi_sequencer_pkg;
193196
input xil_axi_data_beat aruser =0);
194197

195198
axi_transaction rd_trans;
196-
rd_trans = agent.rd_driver.create_transaction(name);
199+
rd_trans = rd_driver.create_transaction(name);
197200
rd_trans.set_read_cmd(addr, burst, id, len, size);
198201
rd_trans.set_prot(prot);
199202
rd_trans.set_lock(lock);
200203
rd_trans.set_cache(cache);
201204
rd_trans.set_region(region);
202205
rd_trans.set_qos(qos);
203-
agent.rd_driver.send(rd_trans);
206+
rd_driver.send(rd_trans);
204207
endtask : single_read_transaction_api
205208

206209
task automatic single_read_transaction_readback_api (
@@ -219,16 +222,16 @@ package m_axi_sequencer_pkg;
219222
output xil_axi_data_beat Rdatabeat[]);
220223

221224
axi_transaction rd_trans;
222-
rd_trans = agent.rd_driver.create_transaction(name);
225+
rd_trans = rd_driver.create_transaction(name);
223226
rd_trans.set_driver_return_item_policy(XIL_AXI_PAYLOAD_RETURN);
224227
rd_trans.set_read_cmd(addr, burst, id, len, size);
225228
rd_trans.set_prot(prot);
226229
rd_trans.set_lock(lock);
227230
rd_trans.set_cache(cache);
228231
rd_trans.set_region(region);
229232
rd_trans.set_qos(qos);
230-
agent.rd_driver.send(rd_trans);
231-
agent.rd_driver.wait_rsp(rd_trans);
233+
rd_driver.send(rd_trans);
234+
rd_driver.wait_rsp(rd_trans);
232235
Rdatabeat = new[rd_trans.get_len()+1];
233236
for( xil_axi_uint beat=0; beat<rd_trans.get_len()+1; beat++) begin
234237
Rdatabeat[beat] = rd_trans.get_data_beat(beat);

library/vip/amd/axis/adi_axis_agent.sv

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@ package adi_axis_agent_pkg;
132132
super.new(name, parent);
133133

134134
this.agent = new("Agent", passthrough_vip_if);
135+
this.master_sequencer = new("Master Sequencer", this.agent.mst_driver, this);
136+
this.slave_sequencer = new("Slave Sequencer", this.agent.slv_driver, this);
135137
this.monitor = new("Monitor", this.agent.monitor, this);
136138
endfunction: new
137139

0 commit comments

Comments
 (0)