Thanks for your reply Mac, definitely helpful.
---- Power Islands can be bad for EMI. Make sure you bridge the island with lots of small caps.
-----
Good tip!
----------- There are tiny little resistor networks. I think they are about the size of an 805 resistor, but they have 4 resistors on them. I don't know the manufacturer off-hand, but I have used them on SBC's. Maybe take a look at CTS.
----------
Ok, I wasn't aware of these.. I was sure something had to be made for this purpose since terminations are used everywhere, and probably can't consume as much space as I was seeing....
-------------- Could you please draw the complete clock schematic for me? I don't understand from your wording. In general, put resistors close to the clock driver, and put a shunt capacitor near the clock load.
If the clock is coming from the FPGA, and going to a buffer, how much delay does the buffer add? You would probably need to use a so-called zero delay buffer (PLL) unless you can create an offset copy of the clock inside the FPGA (similar to a DCM in the Xilinx line).
Another option is to generate the clock inside the FPGA (if that is what you are doing), feed it to a low-skew buffer, and use three of the buffer's outputs: One goes BACK to the FPGA, one goes to SDRAM 1, and another goes to SDRAM 2. These would all have matched lengths. Inside the FPGA, you would use the clock which comes in from the low-skew buffer in all logic which interfaces with the SDRAM.
----------
Ok, let me clarify this. I have one PLL out pin from the FPGA going to a Clock buffer under the FPGA (It's a TI CDCVF2310). The pin to pin skew is < 100ps, which I didn't think was significant enough to worry about here. Two outputs from the buffer then go to the SDRAM ICs, one each... and these lines are matched. I terminated them at the load with a series R and parallel C, but I will change that to the R at the source per your advice. Another option I saw was to directly drive the SDRAMs with the PLL out pin, but then I knew I would have balancing issues on each line to the SDRAM since I don't have controlled impedance, and it's tricker than just point to point. Also, the modules are on opposite sides of the board, so the split would have to be at the driver (which I believe isn't good??).
I like your idea about feeding the clock back and using that however... maybe I could try it with just the clock buffer, and if I run into problems, at least I have this as an option?
------------- There is always overshoot (and undershoot and ringback) on SDRAM data and address lines. I can't remember whether 900mV is too much. You should look at the IBIS model for the SDRAM parts. I think the max overshoot is actually built-in to the model. Or look at the datasheet. Likewise for the FPGA. If the FPGA allows you to specify drive strength, start with the weakest one available.
---------------
Agreed; there will always be some overshoot. I am using IBIS models for the FPGA, Clock buffer and the SDRAM... but I am new at SI simulation, so I wasn't aware the max/min parameters were actually specified in the model. I will look at this. Also, I was using typical drive strenght, but I will definitely use weak since it makes more sense.
I guess my biggest issue is the terminators; whether to include them or not. Considering I am releasing the board tonight, I don't think I have much option anymore (except the clock line change) :)
Thanks for your help!