Forum Discussion
Agilex-7 AXI MCDMA for PCIe hang
Hi!
I'm working with AGIB023R18A1E1VC device and having issues with AXI Multichanned DMA IP for PCIe.
Since I require a PCIe bridge, I configured the IP in MCDMA+BAS+BAM mode (PCIe Gen 4, 512-bit), generated an example design, and integrated the subsystem into my project. Although I do not use MCDMA, I rely heavily on the BAS and BAM functionality.
The issue I’m seeing is that writing more than 448 bytes to the BAS causes the host to hang and subsequently reset. Notably, between the write transaction and the host reset, the FPGA internal logic is still able to write to the BAS, indicating no hang on the AXI bus. There are no issues with read transactions.
We observe this issue not with only one card. At first we run into it in Q25.1 but still have it in Q25.3.1
If you need some captures from the signal tap or any additional details I may provide them.
Thank you in advance! Mikhail.
16 Replies
- VenT_Altera
Frequent Contributor
Hi Mikhail_a
Thanks for reaching out.
May I ask the following to help us understand the issue:- Could you attach the AXI MCDMA .ip file so we can review the parameter settings?
- Which design example variant and which driver did you use?
- Is the issue first observed in Q25.1, then in Q25.3.1? Did it work correctly prior to Q25.1?
- Are you using an Altera Dev Kit or a custom board?
- Could you share the STP when the issue occurs?
- Could you provide the exact steps to reproduce the issue?
Thanks.
Best Regards,
Ven - Mikhail_a
Occasional Contributor
Hi VenT_Altera
- Could you attach the AXI MCDMA .ip file so we can review the parameter settings?
I will attach an archive with the whole subsystem we use
- Which design example variant and which driver did you use?
Unfortunately I don't remember what particular example design we used. We use our own driver for our device, but it does nothing with PCIe itself.
- Is the issue first observed in Q25.1, then in Q25.3.1? Did it work correctly prior to Q25.1?
There was no AXI MCDMA for PCIe before 25.1 version. At least it was the first version where we started to use this IP core.
- Are you using an Altera Dev Kit or a custom board?
We use Bittware IA-440i board
- Could you share the STP when the issue occurs?
Not at the moment, but we see no protocol errors there.
- Could you provide the exact steps to reproduce the issue?
One may just create an example design for BAS+BAM mode and then try to write 449 bytes to BAS. With the subsustem in attachments it should not take much time.
- VenT_Altera
Frequent Contributor
Hi Mikhail_a
Thank you for your reply.
Since you are using your own driver and application, to isolate whether the issue is software or hardware, please run our Example Design on your board. Port the Example Design to your platform and run the accompanying application. Follow the steps in the user guide to generate Example Design and run the application. https://docs.altera.com/r/docs/817911/25.3.1/axi-multichannel-dma-ip-for-pci-express-user-guide/functional-description?tocId=ak5zOaugZ0426etSxKRO0Q
You may generate the AXI-MM DMA Example Design and use the Custom or DPDK driver to perform the perfq_app or mcdma_test: AXI-MM DMA test. Please share your test results.
Also, could you share the design goal for your implementation? If MCDMA is not required, you might consider using BAM + BAS (user mode) to simplify the design.
Thanks.
Best Regards,
Ven- VenT_Altera
Frequent Contributor
Hi Mikhail_a
I understand that you observed the failure in Example Design as well. Let's focus on the Example Design. Please provide the log from the prerequisites setup to running the application and hit the errors. I'd like to see the exact commands and their output. Which driver (Custom or DPDK) and which AXI-MM DMA test did you perform (perfq_app or mcdma_test)? Please share the detailed steps in the log.
Thanks.
Best Regards,
Ven
- Mikhail_a
Occasional Contributor
Hi VenT_Altera
We have already done running the example design and the result was positive. But we also found out that example design writes or reads number of bythes that is multiple of data bus width, and we run into the same issue when modified it and made it send 449, 450 and so on number of bytes.
We had the same issue in both MCDMA+BAS+BAM and BAS+BAM modes. But we need the first option as only in that configuration having user MSI-X and user FLR is possible.
Best,
Mikhail - Mikhail_a
Occasional Contributor
Hi!
Are there any updates about that issue?
I've tried to run example project on Quartus 26.1 and I still observe the issue. Now I can provide signaltap capture for any signals you may want. So I would ask for your help to solve this issue.
- VenT_Altera
Frequent Contributor
Hi Mikhail_a,
Could you please confirm the Design Example variant, user mode, application test, and the exact steps/commands you used to reproduce the error? This will help me to set up the same environment and replicate the error. It would also be helpful if you could provide the log that captures all the commands and their outputs.
Thanks.
Best Regards,
Ven
- Mikhail_a
Occasional Contributor
Hi VenT_Altera ,
My setup looks next way:
I've generated example design with traffic generator and then substituted traffic generetor with my own simple TG that can send arbitrary number of bytes.
So general structure and IPs connection comes from example design except traffic generator.
I can send you screenshots of settings window of both PCIe related IPs. But generally it is almost the same as in files i've send at the begining.
I can setup signaltap signals to any you may need, run the test and send you results.
Thanks,
Mikhail
- VenT_Altera
Frequent Contributor
Hi Mikhail_a,
Thanks for the detailed description. Based on what you've shared, the following points are very likely contributing to the hang you're observing with 449-byte payloads in your BAS-based custom TG.
1. BAS Address/Payload Alignment Requirement
With your Gen4 x16 configuration, the AXI-MM data width is 512 bits (64 bytes). The Bursting Slave's addresses must be aligned to the width of the data bus — for example, if the data width is 64B, the addresses must align to 64B.
449 bytes is not a multiple of 64 bytes, which immediately violates this constraint. Your custom TG needs to ensure that both the start address and the transfer length are 64-byte aligned for the BAS interface at Gen4 x16 (512-bit data width).
Note that, in the design example, the burst size is set to 256 bytes. Therefore the BAS transfer size must be a multiple of 256 bytes.
2. "Enable Address Byte Aligned Transfer" Is Not Supported
The "Enable address byte aligned transfer" option has a value of Off and default of Off — this option is not supported in the current release. AXI Multichannel DMA IP for PCI Express* User Guide There is a documented known issue associated with this: when address byte aligned transfers are enabled, a DMA failure may be observed for lower payload sizes on the AXI interface. Byte aligned access is not supported — address should be aligned to the data width.
So even if you were to attempt byte-aligned operation, the IP doesn't support it, and using non-aligned transfers risks exactly the DMA failure / hang you're seeing.
You may round your custom TG's transfer sizes up to the nearest 64-byte boundary (e.g., 449 → 512 bytes), and ensure the start address is also 64-byte aligned.
If you can set up SignalTap on the BAS write address channel (
bas_axi_mm_awaddr,bas_axi_mm_awvalid,bas_axi_mm_awready,bas_axi_mm_awlen) and the write response channel (bas_axi_mm_bvalid,bas_axi_mm_bresp), that would confirm whether the hang occurs at address acceptance or at the write response phase. But fixing the alignment to 64B first is the most direct next step.Thanks.
Best Regards,
Ven
- Mikhail_a
Occasional Contributor
Hi VenT_Altera
Thank you for your reply. I've run some experiments and took screenshoots from signaltap
All writes burst start from address 0xFFFC0000 - so it is 64 bytes aligned in every case. Below there are different bursts for differend data length in bytes.
448 - no server hang
400 - no server hang
399 - no server hang
459 - no server hang
449 - instant server hang
So you see that in that case only 64 bytes aligned address was used and even when wstrb is not all ones write transaction may not cause server hang. Only particular data size like 449, 450, 451 bytes cause server hang, while 559 cause no problems.
Best regards,
Mikhail