cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Visitor
Visitor
6,003 Views
Registered: ‎04-19-2016

lwIP - Fails BSP Generation for PL AXI Ethernet

Vivado & SDK Versions = 2015.4

PS Ethernet disabled.

PL Ethernet has DMA interface to PS.

PL Ethernet core = AXI 1G/2.5G Ethernet Subsystem (7.0)

project is at C:/firmware/designs/design_name   ( short directory name ).

 

When attempting to generate a new lwIP application within SDK I receive the following error:

Failed to regenerate sources for BSP project proj_lwIP

Reason:

Internal error occurred while generating bsp sources. Please check the SDK Log view for further details

 

The SDK Log is as follows:

18:29:28 ERROR : (XSDB Server)ERROR: [Hsi 55-1545] Problem running tcl command ::sw_lwip141_v1_3::lwip_drc : can not find channel named "axi_ethernet_0"
while executing
"puts $emac " periph value ""
(procedure "lwip_axi_ethernet_hw_drc" line 19)
invoked from within
"lwip_axi_ethernet_hw_drc $libhandle $ip"
("foreach" body line 8)
invoked from within

 

I have experienced a similar error with building the lwIP for the PS Ethernet.  That was resolved by removing the PL Ethernet port as, per the tcl scripting, only one Ethernet port can be present in a design for the lwIP application build.

 

Any insight into this error?

 

Tags (3)
0 Kudos
2 Replies
Highlighted
Visitor
Visitor
5,895 Views
Registered: ‎04-19-2016

Re: lwIP - Fails BSP Generation for PL AXI Ethernet

Digging through the processes at into .tcl file <lwip141.tcl> that's generating the error, I found that within the <process axieth_target_periph> process the line:

 

set conn_busif_handle [::hsi::utils::get_connected_intf $emac $busif_name]

 

generates an empty variable conn_busif_handle.  This is even true when $emac and $busif_name do have values 

 

emac = axi_ethernet_0
busif_name = M_AXIS_RXD

 

I'm not that familiar with the HSI tool and why it's command would yield no value.

 

I'm referencing this for debug now:

http://www.xilinx.com/support/documentation/sw_manuals/xilinx2015_2/ug1138-generating-basic-software-platforms.pdf

0 Kudos
Highlighted
Visitor
Visitor
5,883 Views
Registered: ‎04-19-2016

Re: lwIP - Fails BSP Generation for PL AXI Ethernet

I was able to track down the issue.

 

The messaging in lwip141.tcl didn't elaborate that the error was due to a missing connection on the M_AXIS_RXD input for the Ethernet Subsystem IP block (which was the empty variable returned from the line set conn_busif_handle [::hsi::utils::get_connected_intf $emac $busif_name])

 

I rebuilt the block such that all connections (m_axis_rxd, m_axis_rxs, s_axi, s_axis_txd, s_axis_txc, mac_irq, interrupt) are all connected.

 

Recompiled.

 

Then, in SDK, created a new lwIP Application and made sure to select the newly generated Hardware Platform.  

 

This generation was successfull and resulted in the following XSDB Console outputs with my debug print statements added to lwip141.tcl:

 

BEGIN DEBUG PRINTS
*******************************
*** FUNC axieth_target_periph
*******************************
*** emac = axi_ethernet_0
*** p2p_busifs_i = m_axis_rxd m_axis_rxs mdio rgmii
*******************************
*** conn_busif_handle = S_AXIS_S2MM
*** busif_name = M_AXIS_RXD
*** frz: interace_handle == FIFO or DMA
*** frz: setting target_periph_name
*** frz: FUNC completed
BEGIN DEBUG PRINTS
*******************************
*** FUNC axieth_target_periph
*******************************
*** emac = axi_ethernet_0
*** p2p_busifs_i = m_axis_rxd m_axis_rxs mdio rgmii
*******************************
*** conn_busif_handle = S_AXIS_S2MM
*** busif_name = M_AXIS_RXD
*** frz: interace_handle == FIFO or DMA
*** frz: setting target_periph_name
*** frz: FUNC completed
BEGIN DEBUG PRINTS
*******************************
*** FUNC axieth_target_periph
*******************************
*** emac = axi_ethernet_0
*** p2p_busifs_i = m_axis_rxd m_axis_rxs mdio rgmii
*******************************
*** conn_busif_handle = S_AXIS_S2MM
*** busif_name = M_AXIS_RXD
*** frz: interace_handle == FIFO or DMA
*** frz: setting target_periph_name
*** frz: FUNC completed
WARNING: [Hsi 61-9] Current Software design may not be compatible with "lwip_echo_server" app. Tool is ignoring the MSS file specified in the app directory

 

 

Here's the modified process within lwip141.tcl

proc axieth_target_periph {emac} {
puts " BEGIN DEBUG PRINTS "
puts " ******************************* "
puts " *** FUNC axieth_target_periph "
set p2p_busifs_i [get_intf_pins -of_objects [get_cells -hier $emac] -filter "TYPE==INITIATOR"]
puts " ******************************* "
puts " *** emac = $emac"
puts " *** p2p_busifs_i = $p2p_busifs_i"
puts " ******************************* "
foreach p2p_busif $p2p_busifs_i {
set busif_name [string toupper [get_property NAME $p2p_busif]]
set conn_busif_handle [::hsi::utils::get_connected_intf $emac $busif_name]
#puts " *** hsi = $::hsi"
puts " *** conn_busif_handle = $conn_busif_handle"
puts " *** busif_name = $busif_name"
if { [string compare -nocase $conn_busif_handle ""] == 0} {
puts " *** frz: conn_busif_handle == 0 !!!"
puts " *** busif_name = $busif_name"
puts " *** conn_busif_handle = $conn_busif_handle"
continue
} else {
# if there is a single match, we know if it is FIFO or DMA
puts " *** frz: interace_handle == FIFO or DMA "
set conn_busif_name [get_property NAME $conn_busif_handle]
set target_periph [get_cells -of_objects $conn_busif_handle]
set target_periph_type [get_property IP_NAME $target_periph]
if { [string compare -nocase $target_periph_type "tri_mode_ethernet_mac"] == 0 } {
continue
}
puts " *** frz: setting target_periph_name "
set target_periph_name [string toupper [get_property NAME $target_periph]]
puts " *** frz: FUNC completed "
break
}
}

return $target_periph_type
}

 

 

 

Noname.bmp
0 Kudos