Skip to content

Commit e87f281

Browse files
ADI AMD agent abstractization: Added linker macro to simplify VIP linking
Signed-off-by: Istvan-Zsolt Szekely <istvan.szekely@analog.com>
1 parent afcd1be commit e87f281

File tree

3 files changed

+18
-32
lines changed

3 files changed

+18
-32
lines changed

library/utilities/utils.svh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@
4848
// Help build VIP parameter name e.g. test_harness_dst_axis_vip_0_VIP_DATA_WIDTH
4949
`define GETPARAM(th,vip,param) th``_``vip``_0_``param
5050

51+
// Help link AMD AXI and AXIS VIPs to ADI Environment VIPs
52+
`define LINK(top,env,inst) \
53+
top``.pre_link_agent(``env``.``inst``); \
54+
env``.``inst`` = ``top``; \
55+
top``.post_link_agent(``env``.``inst``);
56+
5157
// Macros used in Simulation files during simulation
5258
`define INFO(m,v) \
5359
PrintInfo($sformatf("%s", \

testbenches/ip/base/tests/test_program.sv

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ program test_program;
7474
mng = new("", `TH.`MNG_AXI.inst.IF);
7575
ddr = new("", `TH.`DDR_AXI.inst.IF);
7676

77-
mng.link_agent(base_env.mng);
78-
ddr.link_agent(base_env.ddr);
77+
`LINK(mng, base_env, mng)
78+
`LINK(ddr, base_env, ddr)
7979

8080
base_env.start();
8181
base_env.sys_reset();

testbenches/ip/scoreboard/tests/test_program.sv

Lines changed: 10 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,8 @@ program test_program();
104104
mng = new("", `TH.`MNG_AXI.inst.IF);
105105
ddr = new("", `TH.`DDR_AXI.inst.IF);
106106

107-
mng.pre_link_agent(base_env.mng);
108-
ddr.pre_link_agent(base_env.ddr);
109-
base_env.mng = mng;
110-
base_env.ddr = ddr;
111-
mng.post_link_agent(base_env.mng);
112-
ddr.post_link_agent(base_env.ddr);
107+
`LINK(mng, base_env, mng)
108+
`LINK(ddr, base_env, ddr)
113109

114110
scb_env_0 = new("Scoreboard Environment 0");
115111

@@ -118,18 +114,10 @@ program test_program();
118114
adc_dst_axi_pt_agent_0 = new("", `TH.`ADC_DST_AXI_PT_0.inst.IF);
119115
dac_src_axi_pt_agent_0 = new("", `TH.`DAC_SRC_AXI_PT_0.inst.IF);
120116

121-
adc_src_axis_agent_0.pre_link_agent(scb_env_0.adc_src_axis_agent);
122-
dac_dst_axis_agent_0.pre_link_agent(scb_env_0.dac_dst_axis_agent);
123-
adc_dst_axi_pt_agent_0.pre_link_agent(scb_env_0.adc_dst_axi_pt_agent);
124-
dac_src_axi_pt_agent_0.pre_link_agent(scb_env_0.dac_src_axi_pt_agent);
125-
scb_env_0.adc_src_axis_agent = adc_src_axis_agent_0;
126-
scb_env_0.dac_dst_axis_agent = dac_dst_axis_agent_0;
127-
scb_env_0.adc_dst_axi_pt_agent = adc_dst_axi_pt_agent_0;
128-
scb_env_0.dac_src_axi_pt_agent = dac_src_axi_pt_agent_0;
129-
adc_src_axis_agent_0.post_link_agent(scb_env_0.adc_src_axis_agent);
130-
dac_dst_axis_agent_0.post_link_agent(scb_env_0.dac_dst_axis_agent);
131-
adc_dst_axi_pt_agent_0.post_link_agent(scb_env_0.adc_dst_axi_pt_agent);
132-
dac_src_axi_pt_agent_0.post_link_agent(scb_env_0.dac_src_axi_pt_agent);
117+
`LINK(adc_src_axis_agent_0, scb_env_0, adc_src_axis_agent)
118+
`LINK(dac_dst_axis_agent_0, scb_env_0, dac_dst_axis_agent)
119+
`LINK(adc_dst_axi_pt_agent_0, scb_env_0, adc_dst_axi_pt_agent)
120+
`LINK(dac_src_axi_pt_agent_0, scb_env_0, dac_src_axi_pt_agent)
133121

134122
scb_env_1 = new("Scoreboard Environment 1");
135123

@@ -138,18 +126,10 @@ program test_program();
138126
adc_dst_axi_pt_agent_1 = new("", `TH.`ADC_DST_AXI_PT_1.inst.IF);
139127
dac_src_axi_pt_agent_1 = new("", `TH.`DAC_SRC_AXI_PT_1.inst.IF);
140128

141-
adc_src_axis_agent_1.pre_link_agent(scb_env_1.adc_src_axis_agent);
142-
dac_dst_axis_agent_1.pre_link_agent(scb_env_1.dac_dst_axis_agent);
143-
adc_dst_axi_pt_agent_1.pre_link_agent(scb_env_1.adc_dst_axi_pt_agent);
144-
dac_src_axi_pt_agent_1.pre_link_agent(scb_env_1.dac_src_axi_pt_agent);
145-
scb_env_1.adc_src_axis_agent = adc_src_axis_agent_1;
146-
scb_env_1.dac_dst_axis_agent = dac_dst_axis_agent_1;
147-
scb_env_1.adc_dst_axi_pt_agent = adc_dst_axi_pt_agent_1;
148-
scb_env_1.dac_src_axi_pt_agent = dac_src_axi_pt_agent_1;
149-
adc_src_axis_agent_1.post_link_agent(scb_env_1.adc_src_axis_agent);
150-
dac_dst_axis_agent_1.post_link_agent(scb_env_1.dac_dst_axis_agent);
151-
adc_dst_axi_pt_agent_1.post_link_agent(scb_env_1.adc_dst_axi_pt_agent);
152-
dac_src_axi_pt_agent_1.post_link_agent(scb_env_1.dac_src_axi_pt_agent);
129+
`LINK(adc_src_axis_agent_1, scb_env_1, adc_src_axis_agent)
130+
`LINK(dac_dst_axis_agent_1, scb_env_1, dac_dst_axis_agent)
131+
`LINK(adc_dst_axi_pt_agent_1, scb_env_1, adc_dst_axi_pt_agent)
132+
`LINK(dac_src_axi_pt_agent_1, scb_env_1, dac_src_axi_pt_agent)
153133

154134
dmac_tx_0 = new("DMAC TX 0", base_env.mng.master_sequencer, `TX_DMA_BA_0);
155135
dmac_rx_0 = new("DMAC RX 0", base_env.mng.master_sequencer, `RX_DMA_BA_0);

0 commit comments

Comments
 (0)