- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
(I don't have any specific questions to ask in this post. I just want to share my experiences of working around this problem.)
My company made a board which features a cyclone IV FPGA (EP4CE55F23I7) and a 32MB SDRAM (with 16-bit data bus). The plan is to have a NIOS II processor running on this FPGA, so we need to have an SDRAM. A mistake during PCB design is that UDQS (or DQS[1]) pin was assigned to a wrong pin: it was assigned to pin A20, while it should have been assigned to B13. (If we open the Pin Planner from Quartus tool, we can see that pin A20 is NOT a DQS pin. B13 is.) I didn't realize this mistake until I built and tried compiling a small system consisting of:- A NIOS-II processor
- On-chip RAM and boot ROM
- 8-bit GPIO port
- DDR SDRAM controller
- SDRAM is working.
- But the problem with this method is that half of the SDRAM space is left wasted (usable space reduces from 32 MB to 16 MB);
- Also bandwidth between processor and SDRAM is also halved given the same memory clock frequency. For this, I tried increasing memory clock frequency. I increased the frequency from our nominal 104 MHz to 128 MHz, and tested it to be working also. This compensates, to some extent, the bandwidth loss due to halved size of memory. However, it failed when I increased it to 150 MHz.
- Pin assigned for DQS
- Pin assigned for DQS
- Pin assigned for my UDQS in my Quartus project is A20. And A20 is connected to external SDRAM.
Link Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Your second workaround is very inventive and, IMHO, will work 100%.
In Cyclone IV the DQS strobes are not used to strobe in the read data coming from the DDR device. In stead a PLL-generated clcok is used to capture these read data. Writing some selected values for a memory test is a bit simple, if you truly want to test your memory you need to generate quite complicated patterns to exercise the silicon at its fullest. But to verify whether Altera's IP is functioning it will suffice.- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks for sharing and glad that you found a work around for your system. Regarding checking your solution fully, my suggestion is to create a test system with your modified controller and the Avalon-MM Traffic Generator and BIST Engine, and keep it running across the temperature range, watching the status bits somehow (SignalTap, probes, custom logic, etc.).
As some additional information: what I ran into while modifying the ALTMEMPHY to work with LPDDR was that the primary statement in the generated files which causes the fitter to complain about the DQ/DQS signals is the embedded DQ_GROUP clause within phy_alt_mem_phy.v (search for DQ_GROUP). This attribute statement causes the fitter to enforce the pin placement and I/O standard to match it's expected values/rules. Without that statement, the fitter no longer performs those checks and presumably there is some (negative) trade-off for not using the DQ/DQS group, but certainly at low performance points (I have gone up to 150MHz) the resulting system works fine.
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page