alonsocd2006 Posted March 16, 2023 Share Posted March 16, 2023 I want to measure the data transmission speed between the DDR memory and the Artix 7 on the Nexys 4 board. I can design the memory interface with MIG (from the IP Catalog in Vivado). But after that, I don't know how write or run a test for this block. Link to comment Share on other sites More sharing options...
0 asmi Posted March 17, 2023 Share Posted March 17, 2023 What exactly do you mean by "data transmission speed"? Link to comment Share on other sites More sharing options...
0 zygot Posted March 24, 2023 Share Posted March 24, 2023 (edited) Figuring out the maximum data rate for read and write commands is straightforward, if using the MIG controller. Multiply the number of DQ pins connecting the FPGA to the memory device(s) by the DDR Controller PHY clock rate, double that because you are transferring data on both clock edges and divide the result by 8. For the Nexys Video with a 400 MHz MIG PHY clock and 16 DQ pins this works out to be 400*16*2/8 = 1600 MiB/s. Is this a data rate that someone using the Nexys Video board should expect to see under all use cases, all the time? No. You don't write directly to DDR memory, but issue read and write commands to the controller in the memory. Also, DDR memory needs to be refreshed periodically, so there are periods when you can't issue read or write commands. For MIG DDR3 designs with read/write bursts of 8, it's possible to get an average of around 90% of the maximum theoretical data rate for large blocks of data. I've posted a tutorial here if you are interested: https://forum.digilent.com/topic/22197-a-guide-to-using-ddr-in-the-all-hdl-design-flow/ Doing performance testing of external memory connected to FPGA devices is a lot more complicated than the simple explanation above. If you implement your design completely in HDL, then you can expect optimal results. If you are using a soft-processor to run your MIG controller to do random read/write operations then you can expect lower results. Usually, the maximum data rate that can be sent between an FPGA and DDR device doesn't have to be near the peak rate; and you can achieve timing closure easier in a complex design. This tutorial: https://forum.digilent.com/topic/25315-using-ddr-as-a-video-frame-buffer/ doesn't try issuing read or write commands to the DDR as fast as the MIG controller allows. It's still good enough for low resolution HDMI video work though. My point is that instantiating a MIG controller doesn't do anything. You have to design some logic to control the controller, and this is where reading from or writing to external memory can suffer in performance. For other FPGA devices, some have hard memory controllers ( like the Spartan 6 and Cyclone V ). Memory controllers implemented in FPGA logic vary from vendor to vendor and often can be tweaked at the expense of resources and timing closure. Edited March 24, 2023 by zygot Link to comment Share on other sites More sharing options...
Question
alonsocd2006
I want to measure the data transmission speed between the DDR memory and the Artix 7 on the Nexys 4 board.
I can design the memory interface with MIG (from the IP Catalog in Vivado). But after that, I don't know how write or run a test for this block.
Link to comment
Share on other sites
2 answers to this question
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now