Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Spartan6 (ISE 14.7) how to generate differential clock?

Status
Not open for further replies.

FlyingDutch

Advanced Member level 1
Joined
Dec 16, 2017
Messages
457
Helped
45
Reputation
92
Reaction score
55
Trophy points
28
Location
Bydgoszcz - Poland
Activity points
4,942
Hello,

I would like to ask: How to generate differential (two lines) clock from "normal" clock (one line). The clock frequency is 100 MHz. Project is written in Verilog and I am using
"ISE Webpack 14.7" (Windows10 Pro) for synthessis. My FPGA is Spartan6 (XC6SLX9 in CSG324 package) on Mimas V.2 board (Numato).

Thanks in advance and Regards
 

By choosing a suitable differential output pin pair and the respective differential IO standard in constraint editor.
 

By choosing a suitable differential output pin pair and the respective differential IO standard in constraint editor.

Hello,

I thought that differential clok is consisted from two signal lines. Signal on second line is square wave shifted in phase for 180 degrees in relation to signal on first line.
I know that in user constraint files are appropriate standards for this (for example DIFF_MOBILE_DDR).

If i have one line clock from PLL, I don't need to generate second signal? I am a bit confusing now, could you clarify this question?

Thanks nad Regards
 

The inverted signal is generated in IO cell, the usual way is to have one output signal (e.g. a top level port of your design) and assign a differential IO standard to it. I have only cursory knowledge of Xilinx tools, but I have seen this method used with it.

Alternatively, there may be an option to instantiate a differential driver low level primitive explicitly, but it doesn't bring any advantage in usual cases.
 
An OBUFDS Xilinx primitive might suite your purpose.
I would suggest you to read the realted "SelectIO Resources" docu for Series6 Xilinx FPGA for details.

This thread might help : http://forums.xilinx.com/t5/Spartan...a-differential-output-for-a-clock/td-p/100268

Hello,

I placed in my Verilog code OBUFDS instance like that:


Code:
wire CLOCK_OUT_P,CLOCK_OUT_N;


  CLKWizard CLKGEN
   (// Clock in ports
    .CLK_IN1(Clk100Mhz),     
    // Clock out ports
    .CLK_OUT1(clkAXIOut),    //50 MHz AXI clock
    .CLK_OUT2(clkVGAOut),    //25.175 MHz VGA clock
    .CLK_OUT3(clkBuf100MHz), //100 MHz DDR memory clock 
    // Status and control signals
    .RESET(io_asyncReset),
    .LOCKED(clkLOCKED));  
	 
	 //buf clkBuffer(clkBuf100MHz,clkDDR100MHz);
	 
  OBUFDS #(
  .IOSTANDARD("DIFF_MOBILE_DDR")
  ) OBUFDS_01 (
   .O(CLOCK_OUT_P),
   .OB(CLOCK_OUT_N),
   .I(clkBuf100MHz)
  );

and project (ISE 14.7) implements without errors, so I assume that it is all right.

Thanks for help and Regards
 

and project (ISE 14.7) implements without errors, so I assume that it is all right.
If there are no more problems then it is time to close the thread! :)
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top