Version 15

    Programmable Logic

    Enter Your Electronics & Design Project for a chance to win up to a $200 Shopping Cart of Product!

    Back to The Project14 homepage

    Project14 Home
    Monthly Themes
    Monthly Theme Poll


    Buy NowBuy Now
    We're giving away a limited number of Arduino MKR VIDOR 4000 boards for Projects that use them!

    In the comments below: Let Us Know Your Ideas for Projects that Use Programmable Logic Devices!


    If Your Idea Uses an Arduino VIDOR 4000, We'll Send Out a Limited number of Arduino VIDOR 4000 boards for Project Proposals that Use Them!


    The theme this month is Programmable Logic  and it comes from a suggestion from kk99 .  You can do any project that uses programmable logic such as an FPGA or a CPLD project. This will be a good opportunity for many people on the community to try their hands on an FPGA (Field Programmable Logic Gate) project.  FPGA is a type of Integrated Circuit that can be reconfigured again and again and used to perform different tasks. You can configure FPGA to function as a processor, then reconfigure it to function as a Graphics Processing Unit (GPU), a hardware video encoder, and literally any digital integrated circuit you can imagine.  As the term logic gate suggests, an FPGA consists of a large number of logic gates and flip-flops grouped into Configurable Logic Blocks (CLBs).  Thousands of CLB are embedded in a programmable matrix that can be interconnected to one another to implement a specific circuit functionality.  FPGAs are quite cheap and they are getting easier to program.


    If you're new to FPGA we suggest that you check out element14 Essentials: FPGA I. Andy West has some great videos on element14 presents such as Episode 353: Program Your Own FPGA Video Game , Episode 371: FPGA "Game Genie" for Atari 2600 , and Episode 388: FPGA MIDI Music Synthesizer.   We also had a Path to Programmable online training program for programmable devices which introduced many of our members to FPGA. Last year, Arduino released the VIDOR 4000 in Recorded Live Stream: Arduino MKR VIDOR 4000 - Democratizing FPGA! and we held a Freedom of FPGA competition that produced a couple of great projects such as On-line battery bank monitor and Vidor4000 CAN-Bus Project .   We are giving away a limited number of Arduino VIDOR 4000 (on board FPGA) boards left over from this project competition so if you have a project proposal that uses one of them!


    FPGAs are typically programmed on a low level using an HDL (Hardware Description Language).  The two most popular HDLs emerged in the 80s, having seen little revision and offering a low level of abstraction to the user, are Verilog and VHDL.  ASICs, short for application-specific integrated circuit, which is a general purpose, integrated circuit that is customized for a particular use, is also typically programmed using an HDL (Hardware Description Language). Both ASICs and FPGA are really fast and can perform an number of operations at the same time in parallel. This makes them ideal for applications in digital signal processing, video & image processing, voice recognition, biometrics, cryptography, and more.


    A modern ASIC such an SoC (system on a chip) is a custom fabricated circuit that can include entire microprocessors, memory blocks such as ROM, RAM, FLASH, EEPROM, and other large building blocks.  With an FPGA on the hand, you are literally defining the entire circuit, there is no processor to run software on, it can be as simple as an AND gate or as complex as a multi-core processor. Designing on FPGA forces you to think in terms of low level building blocks such as gates, flip-flops (aka registers), counters, latches, memory, and multiplexors.  An FPGA can be configured to literally be any digital circuit! 


    Using HDL hardware code, while typically used to program an FPGA or an ASIC, has never been the only option for programming an FPGA. A bitstream is the term used to describe the configuration data on an FPGA.  One solution would be to reverse engineer the bitstream.  This is considerably more difficult for an ASIC than an FPGA.  The need to reverse engineer the bitstream is necessary to operate on a low level because FPGA manufacturers use an unpublished format, that is proprietary to the manufacturer, for bitstreams. High-Level synthesis is seeing more adoption lately.  HLS (high-level syntesis) enables the ability to use C-based languages in FPGA design. Alterea and Xlinx offer HLS through their respective toolsets. A number of C-based implementations are available, such as Open CL, for software engineers who want to boost their FPGA performance without a deep understanding of FPGA design.


    The main difference between the HDL hardware code, such as VHDL or Verilog is used to define the logic required in an ASCI or FPGA, unlike coding a microcontroller where the code runs on logic which is already defined.such as Verilog or VHL.  With a microcontroller such as an Arduino, the code goes to a compiler, such as AVR--GCC Compiler, and is then compiled to a hex file that is stored in the flash memory. When programming the FPGA for the Arduino Vidor 4000, the code you write in the IDE is primarily targeting hardware for the SAMD21 microcontrollers.  The on-board FPGAs powers-on blank and loads its bitstream from the EEPROM. The device side USB port is only connected to the SAMD21, not the FPGA. JTAG is an industry standard for interfacing, controlling, and programming chips. The Arduino Vidor 4000 uses the SAMD21 as a JTAG controller, allowing the host machine to re-program the FPGA's EEPROM.


    FPGA applications include digital signal processing, bioinformatics, device controllers, software-defined radio, random logic, ASIC prototyping, medical imaging, computer hardware emulation, voice recognition, cryptography, and automotive.  FPGA is commonly used for applications in Aerospace and Defense, medical electronics, broadcast, monetary systems, data center, high performance computing, video and image processing, and distributed monetary systems.


    What is a Programmable Logic Device (PLD)?


    The desire to have programmable hardware has been in existence ever since the beginning of digital hardware. A Programmable Logic Device (PLD) is an IC (Integrated Circuit) with internal logic gates connected through electronic paths that behave similarly to fuses . In the original state, all the fuses are intact, but when we program these devices, we blow out certain fuses along the path that need to be removed in order to reach a particular configuration. This is what happens with  ROM (read-only memory), which consists of nothing but basic logic gates arranged in such a way that they store the specified bits. Because Read Only Memory (ROM) stores binary information permanently, the data that is stored on it can not be changed later.  The first programmable logic device (PLD) to allow users to program binary information once was PROM (Programmable Read Only Memory).  A PROM chip requires a special device called a PROM programmer or PROM burner to write data.  Once the data is stored in it, it can not be modified, it is referred to as a one- time programmable device. PROM has a fixed AND plane and a programmable OR plane. It was invented in 1956 but not made commercially available until 1969.  Applications for PROM include cell phones, video game consoles, RFID tags ,medical devices, and other electronics.


    PROM was followed by EPROM (Eraseable Programmable Read-Only Memory) in 1971, PLAs (Programmable Logic Arrays) in 1975, and PALs (Programmable Array Logic) in 1978. PAL is a programmable logic device that has Programmable AND array & fixed OR array. A PLA is a programmable logic device that has both Programmable AND array & Programmable OR array.  A PAL device is easier to use but not as flexible as a PLA device. If a programmable logic device (PLD) has has a programmable AND array and a fixed OR array than it uses Programmable Array Logic (PAL). PALS's only limitation is the number of AND gates. PAL consists of small programmable read only memory (PROM) and additional output logic used to implement a desired logic function with limited components.


    Complex Programmable Logic Devices (CPLDs) and Field Programmable Gate Arrays (FPGAs) are two different types of general-purpose semiconductor devices that can be programmed by users after being shipped.  They are design-flexible and user-customizable hardware devices that can implement any logical function that an application-specific integrated circuit (ASIC) can perform, allowing users update their functionality, which is advantageous for a number of applications. PLDs contain programmable logic components called Logic Elements (LEs) and a hierarchy of reconfigurable interconnects that allow the LEs to be physically connected. LEs can be configured to perform complex combinational functions, or simple logic gates like AND and XOR. Logic blocks may include memory elements, either simple flip-flops or more complete blocks of memory. CPLDs are large-scale logic devices with up to thousands of programmable logic elements, non-volatile memory, and I/O block on one chip. Connections between the logic elements on these semiconductor chips are customized by the user with software tools. CPLD architecture has a predictable timing performance and speed, offers a range of logic capabilities, and is often employed in portable, battery-operated applications. FPGAs are denser and more complex than CPLDs and are used to implement larger or more complex designs. An FPGA is not restricted to any predetermined hardware function. FPGA allows you to program product features and functions, adapt to new standards, and reconfigure hardware for specific applications even after the product has been installed in the field (field programmable).


    Unlike previous generation FPGAs using Input and Output (I/O) with programmable logic and interconnects, modern FPGAs consist of a mix of configurable embedded SRAM, high-speed transceivers, high-speed I/O, logic blocks, and routing. Programmable Logic Devices have many design advantages, including rapid prototyping, less time to market, and of course the ability to re-program in the field.



    Your Monthly Theme


    The Monthly Theme You Voted For: Programmable Logic
    Vidor4000 CAN-Bus Project An FPGA-Based Organ Tuner


    Your Chance to Win


    Be Original
    Stick to the Theme
    • You could come up with a clever name that make's your project memorable!
      • This project is your baby! Part of the fun of bringing something new into the world is coming up with a name.
    • Your project could introduce something new or that is not commercially available or affordable!
    • If you have an idea for a project that doesn't fit the current theme then submit your idea in the comments section of the monthly poll.
    List the Steps
    Submit Video Proof
    • Provide the steps you took to complete your project (text, video, or images).
      • This could be a step by step how-to-guide, vlog, schematics, coding, napkin drawings, voice narration, or whatever you think will be useful!
    • If it doesn't work that's fine, this is more about the journey than the end product.
    • A short video is all that is required but you can shoot as much video as you like.
    • You are encouraged to be creative and have as much fun as possible!


    Your Project Examples


    Programmable Logic
    Path to Programmable Blog 14 - Project: A MiniZed WS2812 Controller [PP-22] Gamma radiation measurement with MiniZed



    Programmable Logic
    Episode 371: FPGA "Game Genie" for Atari 2600 Episode 388: FPGA MIDI Music Synthesizer


    Your Prizes


    1 Grand Prize Winner, 3 First Place Winners: Win a Shopping Cart of Product!


    Your Project, Your Ideas!



    About Project14

    Every month you'll have a new poll where you'll get to decide an upcoming project competition, based on your interests, that will take place a couple of months in advance. Themes are broad in scope so that everyone can participate regardless of skill set.


    What are Monthly Themes?

    • Every month (around the 14th of each month) a new theme will be posted on Project14.
    • Submit your ideas (proposals) for your projects to get feedback from the rest of the community.
    • Submit a project entry in the Theme space once you start working on it.


    What are Monthly Theme Polls?

    • Every month (around the 14th of each month) there is a project theme poll.
    • Vote on which project competition you want to see for the following upcoming theme.
      • The themes voted on during the previous poll decided the upcoming theme.
      • If you submit an idea for a theme that is not used then it can still be used in a future poll.
    • Themes comments and ideas from the comments section of the project theme poll.

    Step 1: Log in or register on element14, it's easy and free.

    Step 2: Post in the comments section below to begin a discussion on your idea. Videos, pictures and text are all welcomed forms of submission.

    Step 3: Submit a blog post of your progress on your project by the end of the month.  You are free to submit as many blog entries as you like until the beginning of the next theme.


    Be sure to include video proof of your project!


    Visit:  Programmable Logic  or tag your project blog programmablelogicch


    You have until July 15th End of Day to submit your completed project!


    A jury consisting of your peers will judge project submissions!


    In the comments below: Let Us Know Your Project Ideas for Programmable Logic!


    If Your Idea Uses an Arduino VIDOR 4000, We'll Send Out a Limited number of Arduino VIDOR 4000 boards for Project Proposals that Use Them!