01-06-2013 12:52 AM
I want to generate a clock by coregen to drive DDR3 controller and DDR3 memory on ML605. I dont know how to configure the clock to generate the clk_ref(200MHz), clk_mem(400MHz), clk_rd_base(400MHz, nobuf_varphase).
Could someone please tell me how to archive it? Thank you!
01-06-2013 11:19 AM
The easiest way is to use the Clocking Wizard from CoreGen/IP catalog.
You can ask the wizard to take in the 200MHz differential clock inputs from the ML605, and generate the outputs you want. This will instantiate the IBUFGDS for the clock input, the MMCM with the appropriate feedback, and the outputs - automatically selecting the right frequency for the VCO in the MMCM and all the dividers - along with all the clock buffers (including telling the tool you don't want a clock buffer for the last output).
01-06-2013 11:37 PM
01-07-2013 08:00 AM
Thanks for your reply. Could you please tell the details of every parameters in Clocking Wizard?
I believe that the Clocking Wizard has a comprehensive help file, which is much larger than the space available on a forum post.
01-08-2013 05:34 AM
Hello, i did the same. I took a DDr3 Memory, which runs at 400 MHz.
Therefore you need to feed the MIG Interface with the half clock (200 MHz) and feed the clk_ref input of it.
For the sys_clk port of the MIG Controller i took 100 MHz, you can vary it but have to adjust it in the DDR3 DMC parameter.
I guess it easy to generate the 100 and 200 MHz with a DCM and feed the DDR3 MIG Controller with it.
Next you need to set the MIG parameters that they accept the 100 MHz on the sys_clk input.
Therefore you need to adjust the MIG parameters as following:
MMCM_ADV_BANDWIDTH : string := "OPTIMIZED"; -- MMCM programming algorithm CLKFBOUT_MULT_F : integer := 8; -- write PLL VCO multiplier. DIVCLK_DIVIDE : integer := 1; -- write PLL VCO divisor. CLKOUT_DIVIDE : integer := 2; -- VCO output divisor for fast (memory) clocks. nCK_PER_CLK : integer := 2;
So the MIG always puts you an output clock to drive your logic, which is recommended.
But its always the half clock 200 MHz (DDR3 runs at 400 MHz).
If your logic is slower like in my case, you need to do a Clock domain crossing.
Easiest way: use dual clocked FiFos.
01-11-2013 06:41 AM
02-19-2013 01:17 AM
Hello, yes this should work.
By the way if you simulate the DDR memory in Modelsim then you get many many errors if you got a wrong clock anyway!
So i really suggest to you to simulate the DDR3 memory also.
By the way there is no post place and route simulation with the DDR3 Model.
But errors about wrong clock will also appear in the behavioral simulation.
I guess you can also simulate it within ISIM but i dont have tested it.