Tag Archives: FPGA

Unconventional uses of FPGAs

My favorite phenomenon in digital circuitry is when digital threatens to become analog again. For example, a lot of people are interested in the idea of overclocking an FPGA for more performance and are usually encouraged not to do so. However, thinking about the reasons why overclocking goes wrong and learning to understand the issues with overclocking can allow you to achieve a stable overclock or at least help you understand your chip better. This is only one example of exploring odd behavior of FPGAs when pushing beyond suggested limits.

Every sensor is a temperature sensor, nearly everything is a resistor or a conductor if you try hard enough and anything is an antenna. Datasheets are just a suggestion, and finally, often we pretend things are ideal, when they often are not.

Continue reading Unconventional uses of FPGAs

FPGA – Development Board Selection

The focus of this article is on the process of selecting an FPGA development board. A focus is placed on beginners because more advanced users have probably developed an intuition for this process for themselves already. I will not be making a lot of specific suggestion in this guide, but I will link some pages with some more specific suggestions. This guide will help you actually select a board out of those suggestions.

The process is actually quite complicated and nuanced, it depends on quite a few situational details that are worth thinking about. Some initial thoughts are…

  1. Current skill level in general electrical engineering and software development
  2. What they want to make with the FPGA
  3. Whether this is someone looking at FPGAs as a hobby or as a future career
    1. Hobbyists might be interested in open source tooling
    2. Those looking towards a career in the field probably want to look at AMD/Xilinx FPGAs/SoCs to start, unless they are looking at low power solutions, in which case Lattice is a good place to start
  4. How much money they have to spend and the likelihood this is a 4-6 month interest or a career long investment
Continue reading FPGA – Development Board Selection

Growing as an FPGA Developer

March 19, 2023 – Initial

I get asked pretty often about how to get into FPGA design or how to become a good or even great FPGA developer. Since I get asked quite often, I decided to put my thoughts down here instead of typing it out again and again forever. I hope what I write here will help you on your journey. I think some of the content might be useful to non-FPGA developers even though I don’t really plan for it to be as such.

This article is meant for readers who have already made it through their first FPGA course, maybe they are in a masters program or they might be in the first few years of their new job as an FPGA developer. It is not really meant for beginners but might be useful for them none the less.

Continue reading Growing as an FPGA Developer

FPGA – Xilinx JTAG to AXI Master from XSDB and Python

One of the most annoying things when working on an early design on an FPGA development kit is a lack of run-time register interfaces without a lot of effort.

While looking for an interface that would work on basically any Vivado supported Xilinx FPGA I came across the JTAG to AXI Master core supplied by Xilinx. Unfortunately it has a cumbersome interface that is intended for the user to drive from Vivado’s TCL console which is not always the most convenient. Others have been looking for a C API to interact with the hw_server directly. There seems to be someone that has had put together a C library but I was unable to get the files. I wanted something easier to use anyways so I began to look elsewhere for a solution.

Continue reading FPGA – Xilinx JTAG to AXI Master from XSDB and Python

FPGA – LittleRiscy RISC-V RV32I Emulator and HDL Core

LittleRiscy is an RV32I RISC-V emulator and HDL core that I have decided to release as an open source project. The project is a work in progress.

LittleRiscy’s GIT repository contains an instruction set emulator written in C++ and a CPU core written in SystemVerilog. The emulator has been validated against some simple test binaries and the SystemVerilog code has been converted to C++ using Verilator to validate that it behaves functionally identical when running the same test binaries.

At this time, LittleRiscy has been deployed on a Xilinx Series 7 FPGA using Xilinx Vivado and has blinked some LEDs with a simple binary.

The goal of LittleRiscy is to create a simple CPU core for a unique purpose. It will be a classic RISC pipeline with no debugger, no interrupts, no ability to load new code at runtime, and limited peripherals. Inspired by CHIPS2.0 and the PIOs in the RP2040, it will be used to process AXI-Streams for packet processing or digital signal processing when data rates are low enough that custom RTL logic is not required and a CPU is both smaller and simpler. To further simplify creation of software for the core, the AXI-Stream input interface could stall the CPU on read if empty and the output interface could stall the CPU on write if full, negating the requirement for the software to check flags during execution. For some demanding tasks, it should be easy to add a handful of custom instructions to improve throughput.

FPGA – Conflicting FTDI Devices in Quartus

Recently I started using an FTDI FT232H in FT245 synchronous FIFO mode with an Intel MAX10 FPGA. I am using an FT232R based USB Blaster (Not a USB Blaster II, this is an older Altera USB Blaster, Terasic USB Blaster or another clone). Unfortunately when Quartus looks for programming devices it fails if it sees the FT232H first and the FT232H is in use by another program.

Continue reading FPGA – Conflicting FTDI Devices in Quartus

PSoC – AM Radio Transmitter

AM Transmitter with just a dev-kit!
AM Transmitter with just a dev-kit!

Previously, I wrote about the Cypress PSoC5LP microcontroller that I have been playing with. The CY8C5888LTI-LP097 on the CY8CKIT-059 dev-kit can be used to make a very crude radio transmitter. Today I will be explaining how to make some simple transmissions from a PSoC to a computer equipped with an RTL-SDR and SDR# acting as our radio receiver. We will be using configurable digital hardware to create the transmitter.

NOTE: If you decide to recreate my experiment, you should take a look at your country’s regulations for radio communicating devices. For example, the FCC in the United States allows hobbyists to create and operate up to 5 low power devices without a license as long as you follow some rules. Still, be responsible and don’t operate this for any longer then you need to know it works.

Continue reading PSoC – AM Radio Transmitter

PSoC – Intro and Clock Configuration

Top an IMO derived clock not synchronized to MCLK also acting as the edge trigger. Bottom IMO derived clock synchronized to MCLK.
Top an IMO derived clock not synchronized to MCLK also acting as the edge trigger. Bottom IMO derived clock synchronized to MCLK.

I recently picked up a Cypress CY8CKIT-059 to play with for about $10 from Mouser. The kit contains a CY8C5888LTI-LP097 chip that features an ARM Cortex M3 that can run up to 80 Mhz, pretty run of the mill. However, the chip also features a small amount of CPLD resources and configurable datapaths that can be used to implement any digital logic that you can fit in. Cypress calls these blocks universal digital blocks. You can implement your own logic blocks in Verilog or use Cypress’s IP cores that are included with PSoC Creator. The idea is to avoid predefining how many UART, I2C, SPI or other interfaces to include which gives you more freedom to choose the combinations of peripherals you need rather than using pin muxes like on Microchip PIC’s and Atmel AVR’s for example. With the PSoC 5LP you can have 5 UARTs if you wanted and you can put those UARTs on any GPIO pin you want.

Continue reading PSoC – Intro and Clock Configuration