You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
we're currently working on a plugin for the 250MHz user box that includes two VitisNetP4 instances and a custom PIFO (Push-In First-Out) queue in between. Our P4 implementation is based on https://github.com/OCT-FPGA/P4Framework.
When there is a single VitisNetP4 instance, it is directly connected to the AXI-Lite interface of the user box and it can be addressed at address 0x100000 from the host.
How can multiple AXI-Lite slaves be connected to the AXI-Lite interface? We thought about the following approaches:
Somehow modify the AXI crossbar in the glue logic of the user box to handle additional AXI-Lite slaves. We noticed that there is at least one AXI-Lite interface per physical function/interface and increasing NUM_INTF increases the number of AXI-Lite interfaces, but I think it makes the most sense to keep NUM_INTF at 1 if only one is used.
What approaches can you recommend, do you have any further ideas? Can someone provide us with an example that shows similar behavior?
Thanks!
Update: We decided to focus on modifying the AXI crossbar in the user box's glue logic because it does not involve any additional components.
The following changes yielded the expected result:
Add an additional AXI-Lite interface to the p2p_250mhz module (p2p_250mhz.sv)
Adjust the AXI-Lite interfaces in box_250mhz_address_map_inst.vh and user_plugin_250mhz_inst.vh accordingly
Also add the new interface in box_250mhz_address_map.v. C_NUM_SLAVES needs to be increased by 1, new ..._INDEX and ..._ADDR parameters need to be added and new connections/assignments are required. Example:
The new interface is configured in box_250mhz_axi_crossbar.tcl: Increase CONFIG.NUM_MI by 1 and add CONFIG.Mmm_Aaa_BASE_ADDR and CONFIG.Mmm_Aaa_ADDR_WIDTH for the new interface (see PG059: AXI Interconnect v2 , page 107)
CONFIG.NUM_MI {3}
CONFIG.M00_A00_ADDR_WIDTH {16}
CONFIG.M00_A00_BASE_ADDR {0x0000000000000000}
CONFIG.M01_A00_ADDR_WIDTH {16}
CONFIG.M01_A00_BASE_ADDR {0x0000000000010000}
Each of the VitisNetP4 instances needs to be connected to one of the two AXI-Lite connections. The host driver "c-driver" code needs to be adjusted accordingly: UserCtxPtrOne->VitisNetP4Address = 0x100000 and UserCtxPtrTwo->VitisNetP4Address = 0x110000
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Hi everyone,
we're currently working on a plugin for the 250MHz user box that includes two VitisNetP4 instances and a custom PIFO (Push-In First-Out) queue in between. Our P4 implementation is based on https://github.com/OCT-FPGA/P4Framework.
When there is a single VitisNetP4 instance, it is directly connected to the AXI-Lite interface of the user box and it can be addressed at address
0x100000from the host.How can multiple AXI-Lite slaves be connected to the AXI-Lite interface? We thought about the following approaches:
NUM_INTFincreases the number of AXI-Lite interfaces, but I think it makes the most sense to keepNUM_INTFat 1 if only one is used.What approaches can you recommend, do you have any further ideas? Can someone provide us with an example that shows similar behavior?
Thanks!
Update: We decided to focus on modifying the AXI crossbar in the user box's glue logic because it does not involve any additional components.
The following changes yielded the expected result:
p2p_250mhzmodule (p2p_250mhz.sv)box_250mhz_address_map_inst.vhanduser_plugin_250mhz_inst.vhaccordinglybox_250mhz_address_map.v.C_NUM_SLAVESneeds to be increased by1, new..._INDEXand..._ADDRparameters need to be added and new connections/assignments are required. Example:C_NUM_SLAVES = 3C_P2P_ONE_INDEX = 0,C_P2P_TWO_INDEX = 1C_P2P_ONE_BASE_ADDR = 32'h0,C_P2P_TWO_BASE_ADDR = 32h10000`assign axil_p2p_one_awaddr = axil_awaddr[C_P2P_ONE_INDEX*32 +: 32] - C_P2P_ONE_BASE_ADDRassign m_axil_p2p_one_awvalid = axil_awvalid[C_P2P_ONE_INDEX]assign axil_p2p_two_awaddr = axil_awaddr[C_P2P_TWO_INDEX*32 +: 32] - C_P2P_TWO_BASE_ADDRassign m_axil_p2p_two_awvalid = axil_awvalid[C_P2P_TWO_INDEX]box_250mhz_axi_crossbar.tcl: IncreaseCONFIG.NUM_MIby1and addCONFIG.Mmm_Aaa_BASE_ADDRandCONFIG.Mmm_Aaa_ADDR_WIDTHfor the new interface (see PG059: AXI Interconnect v2 , page 107)CONFIG.NUM_MI {3}CONFIG.M00_A00_ADDR_WIDTH {16}CONFIG.M00_A00_BASE_ADDR {0x0000000000000000}CONFIG.M01_A00_ADDR_WIDTH {16}CONFIG.M01_A00_BASE_ADDR {0x0000000000010000}Each of the VitisNetP4 instances needs to be connected to one of the two AXI-Lite connections. The host driver "c-driver" code needs to be adjusted accordingly:
UserCtxPtrOne->VitisNetP4Address = 0x100000andUserCtxPtrTwo->VitisNetP4Address = 0x110000Beta Was this translation helpful? Give feedback.
All reactions