Ben's Blog

No description yet.

  • Home
    Home This is where you can find all the blog posts throughout the site.
  • Categories
    Categories Displays a list of categories from this blog.
  • Tags
    Tags Displays a list of tags that have been used in the blog.
  • Archives
    Archives Contains a list of blog posts that were created previously.
  • Login
    Login Login form

First Impression (10) - Lattice Semiconductor's iCE40HX8K Breakout Board - A Minimalist View

Posted by on in First Impressions
  • Font size: Larger Smaller
  • 0 Comments

Lattice Semiconductor must be strong believers in the phrase "less is more", as by providing this minimalist iCE40HX8K Breakout Board they expect one to work one's butt off to get the most out of it. However, they could only be described as true democrats, because not only is the board minimalist so is its sparse user guide, as well the challenging documentation on using the development  software, iCEcube 2.

This means that if you love the excellent iCE40 family of FPGAs, like we do, you need to be prepared to bring your "A" game to the digital design fiesta, like we had to, when figuring out how to use this particular FPGA development board.

Everything should be made as simple as possible, but not simpler - Albert Einstein.

The iCE40HX8K Breakout Board contains, not unsurprisingly, a FPGA from Lattice Semiconductor's iCE40 family, the one they claim "won't break the bank", a phrase we couldn't agree with more.  The device is the HX8K in a 256 caBGA package, which is a very small and handy FPGA comprising of 8,000 logic cells or 7680 to be exact, hence the 8K in the name. Also, the HX8K device contains, rather generously two Phase Lock Loops (PLLs) and 128K of embedded RAM. A bargain!

If you combine these features with a static power consumption of 1140uA of power, then it would be fair to say that the HX8K has over achieved, as a low cost FPGA device. This particular family of devices, the HX range, which is also available in 1K, 2K and 4K versions are competitively priced, too. In fact, if one is designing a circuit with a need for a small amount of digital logic and is seriously interested in value for money, then one should also consider the iCE Ultra and the iCE UltraLite family of devices, too.

111-001-001-000002.png

The outstanding feature on this breakout board is the FPGA, which is understandable as the board does not contain the usual abundance of external peripherals that digital designers and SoC engineers are use to expecting as standard. That is, apart from 8 LEDs and a decent number of I/O pins, some of which are dedicated inputs that can be used as high fanout nets for clocks, global reset or enable signals. However, there is a UART interface connected between the FPGA and the dual USB-UART programmer, but more on this later.

So you do not get much in terms of the hardware, but the great development software, iCEcube2, should compensate for that, shouldn't it? You must be joking. The version we looked at, release 2014.08.26723 had a very 90's look and feel, to say the least. However, for the old school design engineers, amongst you, the good news is that iCEcube2 incorporates Synplify Pro, as its underlying synthesis engine. Also, Aldec's Active HDL is bundled in for free on the Windows version of iCEcube2, but not with the Linux version. Linux users will need to result to using third party simulators, like Modelsim, which is not a bad thing if you can afford it!

Care needs to be taken when designing with, iCEcube2, as anyone from the old school of HDL programming will know and as we found out for ourselves recently, as a reminder. Synplify Pro is very unforgiving, when it comes to incorrectly inferring logic from VHDL or Verilog, compared to say Xilinx's Vivado or Altera's Quartus.  Ones needs to be very disciplined, otherwise the logic synthesised may not be what one intended. In other words, as stated previous, one needs to bring their "A" game if they intend to get the best out of iCEcube2.

111-001-001-000001.png

 To start an iCEcube2 project for the HX8K breakout board, one needs to bear in mind the device family (iCE40), the device (HX8K) and the device package, (CT256). Likewise, to program the SPI serial Flash one needs to know the vendor (Micron), the device (SPI-N25Q032) and the package (8-pin VDFPN8). This information can be found on the schematic drawing in the iCE40HX8K Breakout Board's user guide, part of which can be seen in the screenshot above.

When you do finally work out how to use the software you can't actually use it to program the device as the integrated programmer does not work. Instead one needs to spend endless hours on the community forums wondering why one is such a  dumb-ass, only to realise it is not you. Neither the iCEcube2 integrated programmer or the Lattice Diamond programmer (version 3.3), as far as we could tell, actually work on Windows. We haven't fully tested programming the breakout board with a Linux system, as udev rules need to be setup, which we have not had time to do.

Instead one needs to download version 3.2 of the Lattice Diamond programmer, for Windows. LOL! Eventually, after spending hours frantically searching the net for information it took us a while to figure out that there is a problem in the way the Lattice Diamond programmer attempts to read the USB port, using one of FTDI's dual USB devices, seen in the schematic diagram below.

111-001-001-000004.png

Again, the iCE40HX8K Breakout Board User Guide may not be a beefy manual, but it is invaluable and holds essential items of information required to get a design up and running on the board. For instance, there is a 12MHz clock available to user designs that is connected to FPGA pin, J3. This is the same 12MHz clock used to drive FTDI's high-speed USB device, the FT2232H. 

 The FTDI FT2232H, as mentioned previously, is used to program the HX8K through one of its dual USB ports. According to the Diamond Programmer, used for this purpose, it can be used to program the HX8K in three different modes. The most obvious one is by  programming of the SPI Flash memory, which we have tested and know to work! Also, Lattice Diamond can also be used to program the device's internal configuration RAM (CRAM), which is volatile.

Finally, it can be used in NVCM programming mode, which is programming the on-chip, one-time programmable (Non-volatile Configuration Memory) NVCM to store the configuration bits. According to the schematic diagram of the FT2232H, seen above, it seems that the second USB port is connected to the FPGA and is configured as a UART. We have not tried using this UART ourselves, so we do not know whether it actually works, although considering the problems we have encountered to get this far ..., never mind!

Conclusion

There is no doubt that this is a great FPGA development board, but only because  it hosts a fantastic FPGA. We are currently conducting some test, using this device, with a future product in mind  and we have not dropped or lost a single bit with the board running continuously for more than a week. 

However, although the accompanying software is free, it does look very functional. Also, to get this board up and running one needs to work extremely hard, but when one does the results are very rewarding. This is not a development kit for the FPGA newbie and even the experienced designer needs to be aware of the many banana skins that need to be hurdled to use it successfully.

Bearing this in mind and to ease the pain of others following in our footsteps, when using this breakout board, we intend to follow this article with a tutorial series on using both the iCEcube2 software and the Lattice Diamond programmer, sooner rather than later.

Lattice Semiconductor's family of iCE40 devices are serious contenders for designers that only need an FPGA to implement "a bit of glue logic". In fact they are a serious contender not only for their price point, but also  for offering PLLs and embedded RAM, too, in such a small device. With this FPGA I can see some of the larger FPGA vendors sitting up and taking notes. Conclusion? Lovely!

Last modified on
0