Our design is integrated with Intel P-Tile AV-MM for PCI Express and On Chip RAM. PCIe is configured as Gen3x16,512 bit. We are writing 64bytes into OCR (in single write) from PC over PCIe-BAM AVMM Master. While capturing PCIe BAM_WRITE signal through signal tap, we could see 2 write transactions of 512 bit in each only 256 bit is valid. Shall we have the behavior of PCIe write transaction? and Is there any possibility to get these 2 write transactions into single 512 bit write transaction?
Attachment : stp file and software log file.
Please update on the same.
To understand this issue further, it will be helpful if the following info is available:
- Do you observe a similar behavior when performing a single 128 bytes write?
- Does the same behavior happen for memory read?
- Can you please capture the following signals to determine if there is more than one memory write TLP received? The trigger condition is the rising edge of *_sop_o.
Thanks for your support.
As mentioned, we are using Intel P-Tile AV-MM for PCI Express IP in our design. We also have DDR4 in our design which has AV-MM interface ports. So, we chose Intel P-Tile AV-MM for PCI Express IP to connect with AV-MM ports of DDR4 in qsys. Herewith I attach stp files for 128bytes write and read operation. Similarly, I have attached 64 bytes write and read for reference.
Yes, understand that you are using P Tile AV-MM for PCI Express IP. However, you can still add those AVST signals into the design, from the AVST interface it can help us understand what is the TLP packet that endpoint received.
Does the data width of the DDR 4 is also 512 bits? Just a sanity check, will it be any different if you connect to an On-chip memory (512 bits)?
Thanks for your response.
I will add AVST interface signals and update you. In our design, we have PCIe, DDR4 and OCR. Each interface has 512bits datawidth.Here PCIe BAM ports are connected to DDR4 and OCR through PCIe BAR Interpreter(Master to other interfaces) and pipeline bridge.
Sanity check is done many times and it is working properly.
By referring to the “p0_rx_st_hdr_0” signals, the length of the memory write/read TLP received is 8 DW (256 bits) not 16 DW (512 bits). It seems like the host is actually sent two TLP packets to the endpoint for 16 DW memory read or write. You might need to review the driver to confirm how it handles more than 16DW memory requests.
Header = 40000008000000FFF480000000000000
40h = Memory request with data
F4800000h = Memory Address [63:32]
I will set this case to close-pending for now. Please do not hesitate to get back to me within the next 20-day close-pending period if more help is needed.