Maximum IO switching speed?


Recommended Posts

Hello, I have probably quite newbish question. I Would like to make something very simple to test my osiloscope frequency capabilities. So for example a 100 mhz square wave on one of the papilio outputs. The problem is that it seems the most I get is 32mhz and that is not square anymore, but sinusoidal :) I am able to configure DCM, addiding a counter after the DCM to slow down I can see that internaly papilio is working just fine on 100mhz. But not the output. I also saw that guys interface in quite high speeds with LVDS. So am I missing something or spartna 3E just can't handle any more than ~20MHz ? :) Tried to search forums/dataheet, but just can't find anything regarding frequency and IO. Any kind of information would be nice


Thank you :)

Link to comment
Share on other sites

There is no such thing as a "perfect" square wave. Rise and fall times, due to capacitance, inductance and driving capability, will distort your visual signal.


For speeds up to ~80Mhz, a simple output should work, but you have to take care of impedance. For such high frequencies, configure your scope to use a 50ohm input impedance, rather than default 1Mohm. That should give you a better waveform. Depending on the input characteristics (TTL,CMOS, with or without hysteresis) you will see "ones" and "zeros" at different points.


For higher speeds, you may want them to be differential, and observe the output eye pattern rather than the waverform itself:


Pre-emphasys can also be used to make signal a bit better, but will cause overshoot and undershoot.


What's your scope BW ?



Link to comment
Share on other sites

Don't expect a 100 MHz square wave to show up as such on a 100 MHz bandwidth scope.  You need at least 10x bandwidth for a square wave to show up as a square wave.

In your case I would expect anything above 10 MHz to get rounded off and look more and more like a sine wave as the frequency increase.



Link to comment
Share on other sites

Yeah, link on signal fidelity posted by alvieboy speaks just about that. Well you live and learn. Atleast now I know how and why :) In anycase tried to output 91Mhz out of papilio, used 10x attentuation

and a spring ground. Got a waveform (whatever form it was, still saw highs and lows), and got counted frequency value of 90,99Mhz and thats more than enough for me for next few years, and as I said now I know that spartan 3e is able to spit relative high frequency on its outputs and that I can't accuratly meassure them with my gear. So thank you guys for hellping a new guy out. Next to read and try out something with lvds signals :)

Link to comment
Share on other sites



most electronics problems aren't solved by brute force. But that said :) you can increase the drive strength of the IO pins. That is, in the constraints file



Can't say how much it helps for an excessive capacitive load but it's worth a try (using a 1:10 probe is generally a good idea because of the reduced loading)


If you need a faster counter, you can write it yourself (verilog). "MyInput" should be a clock-capable pin, then you should be able to count 200..300 MHz:


reg[23:0] MyCounter = 24'd0;

assign myLedOutput1 = MyCounter[23];

assign myLedOutput2 = MyCounter[20];

assign myLedOutput3 = MyCounter[17];


always @(posedge MyInput)

myCounter <= MyCounter + 24'd1;

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.