<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Fpga on Colin O'Flynn</title><link>https://colinoflynn.com/tag/fpga/</link><description>Recent content in Fpga on Colin O'Flynn</description><generator>Hugo</generator><language>en-ca</language><lastBuildDate>Sat, 18 Feb 2023 02:20:58 +0000</lastBuildDate><atom:link href="https://colinoflynn.com/tag/fpga/index.xml" rel="self" type="application/rss+xml"/><item><title>Experimenting with Metastability and Multiple Clocks on FPGAs</title><link>https://colinoflynn.com/2020/12/experimenting-with-metastability-and-multiple-clocks-on-fpgas/</link><pubDate>Sat, 26 Dec 2020 22:58:43 +0000</pubDate><guid>https://colinoflynn.com/2020/12/experimenting-with-metastability-and-multiple-clocks-on-fpgas/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;NOTE: This article appeared in Issue 293 of Circuit Cellar, back in December 2014. I’ve posted it here for your reading pleasure as well. References to previous articles are for Circuit Cellar Issues, as this was originally written for the print publication. This version differs slightly from the print version – this is my own ‘author copy’ version before the Circuit Cellar editing&lt;/strong&gt;&lt;/em&gt;. &lt;strong&gt;References to &amp;ldquo;ProgrammableLogicInPractice.com&amp;rdquo; are broken for now, but material has been mirrored to the bottom of this page.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>FPGA Board Design Tips</title><link>https://colinoflynn.com/2020/08/fpga-board-design-tips/</link><pubDate>Tue, 04 Aug 2020 16:33:34 +0000</pubDate><guid>https://colinoflynn.com/2020/08/fpga-board-design-tips/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;NOTE: This article appeared in Issue 315 of Circuit Cellar, back in October 2016. I&amp;rsquo;ve posted it here for your reading pleasure as well. References to previous articles are for Circuit Cellar Issues, as this was originally written for the print publication. This version differs slightly from the print version - this is my own &amp;lsquo;author copy&amp;rsquo; version before the Circuit Cellar editing.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Back in December 2015, I discussed how I solder BGA devices
(such as FPGAs) using a low-cost reflow oven. This article will discuss the
design of the FPGA board itself, which you could then assemble using the tips
in my previous article.&lt;/p&gt;</description></item><item><title>Side-Channel Power Analysis of AES Core in Project Vault</title><link>https://colinoflynn.com/2015/05/side-channel-power-analysis-of-aes-core-in-project-vault/</link><pubDate>Sun, 31 May 2015 17:13:37 +0000</pubDate><guid>https://colinoflynn.com/2015/05/side-channel-power-analysis-of-aes-core-in-project-vault/</guid><description>&lt;h1 id="what-is-project-vault"&gt;What is Project Vault&lt;/h1&gt;
&lt;p&gt;You can read a quick overview on &lt;a href="http://techcrunch.com/2015/05/29/googles-project-vault-is-a-secure-computing-environment-on-a-micro-sd-card-for-any-platform/"&gt;various news sites&lt;/a&gt;, but basically project vault gives you a cryptographic module that you have complete control over. This means *you* decide to trust the module - even to the point of being able to access to implementation details of the crypto cores.
Basically Project Vault is a solution to how you can avoid having unknown backdoors in your hardware. Rather than having to trust some vendor of security modules, you can make sure things are done correctly.&lt;/p&gt;</description></item><item><title>Programmable Logic in Practice</title><link>https://colinoflynn.com/2013/09/programmable-logic-in-practice/</link><pubDate>Thu, 19 Sep 2013 00:39:00 +0000</pubDate><guid>https://colinoflynn.com/2013/09/programmable-logic-in-practice/</guid><description>&lt;p&gt;I wrote for Circuit Cellar in a column titled “Programmable Logic in Practice” from 2013-2015. This column detailed various work around FPGAs. The column later became my “Embedded System Essentials” column, which primarily dealt with security issues in embedded systems.&lt;/p&gt;
&lt;p&gt;The previous domain (programmablelogicinpractice.com) now redirects here. Unfortunately not all posts were transitioned. You can find copies of some of my articles if you check the &lt;a href="https://colinoflynn.com/tag/circuit-cellar/"&gt;Circuit Cellar tag&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Split Ground Plane: Example of failing high-speed signals</title><link>https://colinoflynn.com/2013/04/split-ground-plane-example-of-failing-high-speed-signals/</link><pubDate>Sat, 06 Apr 2013 01:16:00 +0000</pubDate><guid>https://colinoflynn.com/2013/04/split-ground-plane-example-of-failing-high-speed-signals/</guid><description>&lt;p&gt;&lt;img src="https://colinoflynn.com/oldsiteasd/tiki-download_file.php?fileId=76&amp;amp;display&amp;amp;max=600" alt="Image"&gt;
I&amp;rsquo;ve got a SASEBO-W board, which has a FPGA &amp;amp; a FT2232H for high-speed USB comms. I was seeing errors on the high-speed USB device, and couldn&amp;rsquo;t figure out why:
&lt;img src="https://colinoflynn.com/oldsiteasd/tiki-download_file.php?fileId=70&amp;amp;display&amp;amp;x=600&amp;amp;y=156" alt="Image"&gt;&lt;/p&gt;
&lt;h1 id="power-split"&gt;Power Split&lt;/h1&gt;
&lt;p&gt;The SASEBO-W is a multi-purpose board including a Xilinx LX150 Spartan 6 FPGA and a FTDI FT2232H USB interface. One use of the board is for measuring the power consumption of the FPGA and using that power consumption to perform power analysis attacks. I believe for this reason the ground planes are split, to facilitate making those measurements.
This split plane is joined through a common-mode choke. To use the high-speed USB interface it requires passing signals across a split in the plane – something very undesirable. The following figure shows what the ground currents for these signals would be. The signals are running on a 60 MHz clock if using the fastest available FT2232H mode.
&lt;img src="https://colinoflynn.com/oldsiteasd/tiki-download_file.php?fileId=71&amp;amp;display&amp;amp;x=600&amp;amp;y=655" alt="Image"&gt;
A measurement of the potential difference between the two planes (done at CN3) shows the following figure. This is due to the 60 MHz clock being driven from the FT2232H to the FPGA, there was no data being transferred in this image.
&lt;img src="https://colinoflynn.com/oldsiteasd/tiki-download_file.php?fileId=72&amp;amp;display" alt="Image"&gt;
Note that the FPGA I/O interface is 2.5V, meaning that signals being sent from the FPGA to the FT2232H will already have a reduced amplitude compared to the 3.3V I/O voltage. There should be enough headroom in practice such this interface works OK, and the FPGA has 3.3V tolerant I/Os.
The following figure shows a data bus line measured at the FT2232H in blue, the horizontal markers are set at 2.0V and 0.8V respectively, which are the limits for logic High/Low at the FT2232H. Note that due to this ground noise the signal is degraded to the point of crossing this threshold!
&lt;img src="https://colinoflynn.com/oldsiteasd/tiki-download_file.php?fileId=73&amp;amp;display" alt="Image"&gt;
If we mount a jumper on CN3 this shorts the two ground planes together. This isn’t an ideal low-impedance path, but it will make an improvement. In the above figure the yellow line is with this jumper mounted.
The following figure shows the voltage difference between the two planes with such a jumper mounted. Compare to the earlier figure where the peak-to-peak voltage was almost 500mV!
&lt;img src="https://colinoflynn.com/oldsiteasd/tiki-download_file.php?fileId=74&amp;amp;display" alt="Image"&gt;
Monitoring both the ground difference and bus lines show when the line switch there is still some extra noise contributed – the green line below (NB: note scale differs from above figure) shows a still fair amount of bounce during the transition, but in practice the USB communication seems reliable between the FT2232H and the FPGA.
&lt;img src="https://colinoflynn.com/oldsiteasd/tiki-download_file.php?fileId=75&amp;amp;display" alt="Image"&gt;
So, that&amp;rsquo;s why you cannot cross high-speed traces across split planes!&lt;/p&gt;</description></item><item><title>Design a FIR Filter in an FPGA in 30 mins using High Level Synthesis</title><link>https://colinoflynn.com/2013/01/design-a-fir-filter-in-an-fpga-in-30-mins-using-high-level-synthesis/</link><pubDate>Sat, 26 Jan 2013 18:25:00 +0000</pubDate><guid>https://colinoflynn.com/2013/01/design-a-fir-filter-in-an-fpga-in-30-mins-using-high-level-synthesis/</guid><description>&lt;p&gt;&lt;img src="https://colinoflynn.com/oldsite/tiki-download_file.php?fileId=58&amp;amp;display&amp;amp;scale=0.6" alt="Image"&gt;
I&amp;rsquo;ve been working with Xilinx&amp;rsquo;s new High Level Synthesis tools built into Vivado. I&amp;rsquo;m slowly working on posting some more complete tutorials. In the mean-time &lt;a href="https://colinoflynn.com/oldsite/tiki-index.php?page=XilinxHLS" title="XilinxHLS"&gt;here&lt;/a&gt; is a simple tutorial about making &lt;a href="https://colinoflynn.com/oldsite/tiki-index.php?page=XilinxHLS" title="XilinxHLS"&gt;a Finite Impulse Response Filter&lt;/a&gt; on a real ADC/DAC board .&lt;/p&gt;</description></item><item><title>High-Speed ADC with Variable Gain Amp Input</title><link>https://colinoflynn.com/2012/06/high-speed-adc-with-variable-gain-amp-input-2/</link><pubDate>Mon, 04 Jun 2012 01:15:00 +0000</pubDate><guid>https://colinoflynn.com/2012/06/high-speed-adc-with-variable-gain-amp-input-2/</guid><description>&lt;p&gt;Here is an ongoing project: it&amp;rsquo;s a high-speed ADC combined with some nice input preprocessing (amplifier). It&amp;rsquo;s all controlled by a FPGA on the Avnet LX9 Microboard, so it just plugs into that. Here is a simple python app (still being improved) to control it:
&lt;img src="https://colinoflynn.com/oldsite/tiki-download_file.php?fileId=26&amp;amp;display" alt="Image"&gt;
Still need to measure analog BW to see how my layout stood out&amp;hellip;&lt;/p&gt;</description></item><item><title>Avnet Spartan-6 LX9 Board: Or How ChipScope is your Saviour</title><link>https://colinoflynn.com/2012/02/avnet-spartan-6-lx9-board-or-how-chipscope-is-your-saviour/</link><pubDate>Sat, 11 Feb 2012 15:24:00 +0000</pubDate><guid>https://colinoflynn.com/2012/02/avnet-spartan-6-lx9-board-or-how-chipscope-is-your-saviour/</guid><description>&lt;p&gt;I was recently working on a project which needed more gates than I had in my trusty current FPGA Board (Spartan3-200 on DLP-FPGA-HS). I quickly found the Avnet Spartan 6 LX9 board (AES-S6MB-LX9-G), which I could buy for $90 and have here in a few days. It also comes with a license for SDK for ChipScope, as it&amp;rsquo;s designed for experimenting with on-FPGA processors. It doesn&amp;rsquo;t have a full EDK license so you are a little limited in peripherals&amp;hellip;
But for my project I didn&amp;rsquo;t care about that. I was however interested in ChipScope Pro, having used it previously at a job. This quick post will show you how valuable it can be - the license included with the LX9 board is &amp;ldquo;device locked&amp;rdquo; and will only work with XA6SLX9 parts. ChipScope Pro is not normally licensed as part of WebPack so the $90 board is a great deal when you consider the licensing cost.
My normal FPGA debugging, beyond Verilog testbenching, is to use a LogicPort on some spare IO lines. This works well - the LogicPort has a very high sampling rate (200MHz external, 500MHz internal). But it requires a physical connection, which requires a lot of IO pins. I was hoping ChipScope could eliminate this problem.
There is two cores of interest: the Integrated Logic Analyser (ILA) core, and the Virtual IO (VIO) core. They are both controlled by the Integrated Controller (ICON) core. You can only have one ICON, but it can control up to a number of ILA/VIO cores.
The VIO core gives you a virtual dashboard, where you can toggle bits and see results. This is pretty handy for validating/playing with cores to check they function as intended. Here I am checking a UART core from fpga4fun.com:
&lt;img src="https://colinoflynn.com/oldsite/tiki-download_file.php?fileId=22&amp;amp;display&amp;amp;x=120&amp;amp;y=43" alt="ChipScope Pro VIO"&gt;
Note the VIO core doesn&amp;rsquo;t provide buffering, so data is transferred over the JTAG. This limits your polling speed of course, but makes it easy to play with things. It does let you define pulse trains or single pulses if you have special timing requirements on e.g.: load lines, as I had here.
The ILA core is strictly input. But it connects to BRAMs on-board the device, meaning you can buffer a fair amount of data. Since it&amp;rsquo;s all on-device the speed is basically limited by similar constraints to the rest of your design. Of course if you already have a packed chip you might not be able to spare any BRAMs&amp;hellip;
Here I am debugging a state machine, note you how can even define &amp;rsquo;tokens&amp;rsquo; so it decodes the states correctly:
&lt;img src="https://colinoflynn.com/oldsite/tiki-download_file.php?fileId=23&amp;amp;display&amp;amp;x=120&amp;amp;y=51" alt="ChipScope Pro ILA"&gt;
 
So the combination of ChipScope ILA + VIO I&amp;rsquo;m hoping will make designs go by a lot faster.&lt;/p&gt;</description></item></channel></rss>