Jump to content

jmckinney

Members
  • Posts

    4
  • Joined

  • Last visited

jmckinney's Achievements

Newbie

Newbie (1/4)

0

Reputation

  1. I am running a Microblaze design with the freertos bsp on a Digilent Arty A7. My microblaze design uses the Arty's DDR, Ethernet, and UART. It has an AXIDMA, an interrupt controller and a timer I think. I have an AXI-S interface exiting my block design and talking to a custom IP, as well as a System ILA. When I run/debug the xaxidma_example_sg_poll example code (from https://github.com/Xilinx/embeddedsw/tree/master/XilinxProcessorIPLib/drivers/axidma/examples) I can see the proper data (0x0C - 0x2B) come out of the microblaze and onto the AXI-S interface using my ILA. but the code doesn't ever return from: (xaxidma_example_sg_poll.c - main) ..Status = SendPacket(&AxiDma); (xaxidma_example_sg_poll.c - SendPacket) ..Status = XAxiDma_BdRingToHw(TxRingPtr, 1, BdPtr); (xaxidma_bdring.c - XAxiDma_BdRingToHw) .. XAxiDma_WriteReg(RingPtr->ChanBase, XAXIDMA_TDESC_OFFSET, (XAXIDMA_VIRT_TO_PHYS(RingPtr->HwTail) & XAXIDMA_DESC_LSB_MASK)); Looking at the ILA, all the AXI-S signals seem right. TVALID is high only during the transfer. TREADY is always high. Has anyone had to deal with this or similar types of issues, with the stock dma sg example code? After doing some more debugging, I am still stumped. In the HW, removed my AXI-S peripheral and replaced it with a direct loopback and see the same behavior on the software side, on the hardware side the AXI-S interfaces look the same, minus the latency my AXI-S peripheral was inducing. I've looked at the example code and added printf's all over the place, and observed the BD chain initialization for both the RX and TX channels. I've changed the packet size from the default of 0x20 bytes to 0x200 bytes. According to the UG, the "XAxiDma_WriteReg(RingPtr->ChanBase, XAXIDMA_TDESC_OFFSET, (XAXIDMA_VIRT_TO_PHYS(RingPtr->HwTail) & XAXIDMA_DESC_LSB_MASK))" command is the actual write that starts the DMA HW reading the BD chain, and I have observed that. The WriteReg command is is an alias of xil_out32() and so for it to not return seems to imply either some logic error on the AXIDMA axi-lite interface or some error in the my Block Diagram design that enables a register write to hang forever. But the fact that I see the entire packet go out on the AXI-S interface, implies that, at the least the axi-lite write enable / write strobes get there. It might be notable that the BD ptr (81000000) that is written into the TDESC_OFFSET register is the First/Head BD. The example code appears to check for TXSOF and TXEOF, and appears to send a single packet that lives at one contiguous memory location, so that seems like only processing 1 BD would be correct. It's also notable that the xaxidma_sg_intr.cc and xaxidma_sgcyclic_intr.cc examples hang at the same call, on XAxiDma_bdringToHw(TxRingPtr...). I’ve added another ila to look at the axi-lite interface to the DMA. It looks right too. I can see the TAILDESC data value (0x81000000) going on WDATA line, The TAILDESC addr (0h010) going on the AWADDR line in clk later, then both the AWVALID and WVALID lines going high 2 clks later, The AWREADY and WREADY signals gloing high it looks like 23 clocks later, and then both the VALIDs and READYs dropping 1 clk later, and then 1 clk later the BVALID goes high and 1 clk later BVALID and BREADY drop low. I’m running out of ideas. 1) modify the example to process and send 2 BDs. 2) Add a slice register to the AXI interconnect on that MAXI port? 3) tinker with the code to see if I can ever execute a read/write to the the TAILDESC register? Everything seems right but the processor hangs. “stalled on memory access.”
  2. I'm running on an Arty A7 100T, using vivido/vitis 2022.1 trying to run the Microblaze/DDR/Ethernet Echo Server example. If I program the Arty via the run command in vitis, the echo server works for like 5 seconds, and then stops. I set up a ping to it's IP address, and I see the Ping replies for a few seconds and then it changes to "Destination host Unreachable." I added a printf to the main loop that prints a "." Watching the Console I see this: -----lwIP TCP echo server ------ TCP packets sent to port 6001 will be echoed back XEMacLite detect_phy: PHY detected at address 1. XEMacLite detect_phy: PHY detected. link speed: 100 netif: added interface xe IP addr 0.0.0.0 netmask 0.0.0.0 gw 0.0.0.0 netif: setting default interface xe DHCP Timeout Configuring default IP of 10.48.30.104 Board IP: 10.48.30.104 Netmask : 255.255.255.0 Gateway : 10.48.30.1 Start Application TCP echo server started @ port 7 ............................................................................... ............................................................................... ............................................................................... ............................................................................... netif: GW address of interface xe set to 10.48.30.255 netif_set_ipaddr: netif address being changed And the: netif: GW address of interface xe set to 10.48.30.255 netif_set_ipaddr: netif address being changed happens at right about the same time as the pings stop. Has anyone experienced and defeated this problem?
  3. turns out my eth_ref_clk wasn't set to 25MHz. Although I'm sure I set it to that.....(Looking at You Vivado!)
  4. I'm trying to standup an Arty A7 100. I'm using Vivado/Vitus 2022.1. I followed the instructions for the LWIP Echo Server. In Putty, I can see: -----lwIP TCP echo server ------ TCP packets sent to port 6001 will be echoed back link speed: 100 DHCP Timeout Configuring default IP of 10.48.30.104 Board IP: 10.48.30.104 Netmask : 255.255.255.0 Gateway : 10.48.30.1 Start Application TCP echo server started @ port 7 But I am un able to open a telnet session. Pinging it doesn't work. So I try to manually arp it via: user@host:~$ sudo arp -v 10.48.30.104 Address HWtype HWaddress Flags Mask Iface 10.48.30.104 (incomplete) eno1 Entries: 22 Skipped: 21 Found: 1 And it appears I'm getting no arp back. So I run a wireshark capture, while pinging, and I can see the ARP requests go out, but nothing coming back. Looking at the board, on powerup in JTAG programming mode (so before it's configured with my bitstream), The Left RJ45 LED is on continuously. When I program my bitstream it turns off and stays off. It may be noteable that I had to turn off link speed autonegotiation in the BSP in Vitis, to get to/past the "link speed: 100" line in the terminal output above. Has anyone else had to overcome this problem?
×
×
  • Create New...