Valent F(x) has been hard at work to bring out the LOGi FPGA development boards that are designed to work in conjunction with the Raspberry Pi and Beaglebone. We are excited to see so many homebrew/professional applications that users have come up using the Raspberry Pi platform alone. Adding an FPGA to the picture of an already pretty amazing platform really opens up the door for some stellar applications.
Currently the LOGi-Team has put together some fun applications that showcase machine vision, autonomous vehicle control, robotic control, bitcoin mining and more. These applications are great examples of how an FPGA is able to handle very time deterministic, computational intensive processing while allowing the CPU platforms to do do what they do best without the need to break a sweat.
Lately we have been thinking about how we might add some new functions while using the LOGi-Boards and the Raspberry Pi or Beaglebone. Some users have asked about the ability of being able to easily add on hardware to the LOGi boards that would allow them to run through some educational examples. Typically such hardware would be designed as an expansion module that would be plugged into the development board, then discarded when not needed anymore. Some hardware expansion modules can costs a lot of money and may not be used again after serving their initial purpose.
This got us thinking about how we might use the LOGi / ARM CPU host to solve this problem. We thought about the little HDMI output port on the Pi that can turn an LCD screen into a 2 dimensional 1920x1200 pixel canvas that could be used as a visual output to the user and a physical input to the LOGi/CPU environment. This would open up user interactivity that at one time was limited to seven segment leds, 2x18 character LCD’s or just a few LEDs. How does 2304000 individually controllable pixels compare!
We thought of a few ways that we might easily implement the HDMI controller and an LCD to create some useful functions while using a LOGi and Raspberry Pi or Beaglebone. We would like show the implementations for customizable Virtual Components and a Virtual Logic Analyzer by Mike Field which both of which are implemented on a cute little LOGi-Pi/Rpi package.
Using Virtual components is a great way of implementing hardware in the loop at the hobbyist/education level. Using Virtual components allows the user to maximize their use of the LOGi Development boards by being able to easily add components to a project that may not be needed as primary functionality on the development board. There is no need to have an FPGA board with multiple LEDs, Switches, Buttons, 7 seg. You can use virtual components to add components you need to use. You can mix and match pre-designed virtual component modules any configuration needed for the project with no cost, no hardware and no chance of burning anything up.
Usually when you buy a FPGA platform to learn HDL, you will inevitably feel the need to drop the board and move to hardware specialized for your next application. Using virtual components solves this issue by allowing the user to add and remove the components to fit and meet the needs of progressing projects. This adds a great amount of flexibility for users of the LOGi-Boards and will hopefully allow the boards to be used in a maximum array of applications.
We have designed some base virtual components to test with the current LOGi-boards. We have developed a full frame-work from HDL to API wrappers that can interface with the virtual components on the Raspberry Pi or beaglebone. Below is a listing of the current components, potential future components, video of components running on the LOGi-Pi and a top level block diagram of the architecture.
- Virtual LED
- Virtual SSEG Display
- Virtual Push button
- Virtual DIP Switch
- Virtual Gauge Output
- Virtual Dial Input
- Virtual PWM LED
- Virtual PWM DAC
- Virtual 8x8 led matrix
- Virtual Servo
In the last update we introduced LOGi Virtual instruments that allows LOGi users to easily add virtual components to a project by using the power of the Raspberry Pi/Desktop. By using the Raspberry Pi in conjunction with the LOGi FPGA boards brings a new realm of possible ways of user interfacing with FPGA’s. In this update we want to show a new example that implements a Virtual Logic Analyzer in a standalone LOGi-Pi/Raspberry Package.
By combining the use of the LOGi FPGA with the Raspberry Pi or Beaglebone, the flexibility and available options for functionality are significantly increased. For instance the Raspberry Pi has built in HDMI video output capability that when used with the LOGi FPGA could be utilized to enable a standard desktop LCD monitor to easily be used as a graphical interface between the user and the FPGA. Valent F(x) previously showed how the user could add Virtual Hardware components to the LOGi boards by quickly and easily using pygame, logi wishbone wrapper and python to create a virtual panel of components that has bidirectional communication between the FPGA. Such a method of adding components enables no cost virtual hardware functionality to the LOGi FPGA user. Valent F(x) has utilized the same method of using the FPGA in conjunction with the Raspberry Pi and utilizing the graphical components of Raspbian desktop to create a Virtual Logic Analyzer, Cheapscope, that was written by Mike Field.
For detailed information about the design of Cheapscope logic Analyzer see Mike Field’s detailed wiki explanation about the Cheapscope design. In short, the cheapscope is a hardware buffering implementation that is constantly monitoring predefined FPGA signals. The user can set a pre-defined trigger pattern that once detected, writes the buffered signal data to the Raspberry Pi through it’s UART connection. The Raspberry Pi host software receives the buffered data and creates visual representation of the data directly within a terminal window. The user then has options to scroll through the channel data, view and interpret the captured channel data.
See the demo video here of cheapscope in action on the LOGi-Pi and the Raspberry Pi.
There are some potential upgrades that would make Cheapscope a much more dynamically usable tool for different types of uses.
Front End GUI to configure Cheapscope
Software Side programmable Analyzer triggers
Configurable Baud Rate to decrease TX/RX latency
Potential for port to pygame graphics for many feature add-on functions
Use SPI/GPMC communication rather than uart to increase throughput/ latency between capture and display
Are any of you guys interested in helping us make any of these improvements? We can can only do so much in a given amount of time and would love to have YOUR help! Strength in numbers is what we are talking about! Or maybe more like, Cool functionality much quicker! If you have any interest in getting involved us a holler!
We were able to create LOGi Virtual Component project using the pre-existing LOGi-Tools including the wishbone HDL, API , python wrapper. Fortunately for us the drivers are very flexible and lend themselves well be easily being adapted to new and contrasting projects. Based on the ease of integration we were able quickly put together the Virtual Component demo (2 days). We hope this showcases some of the flexibility and capability of being able to easily create and interface to a variety of potential applications. So what kind of projects would you like to implement with the LOGi-Tools? Have more ideas of you would like to share that we might think about implementing?
We hope to continue to create useful FPGA tools that fully utilize the wide array of existing Raspberry Pi and Beaglebone software and hardware components. We believe that using the graphical functionality of the Pi/Bone is the beginning of many possible case usage scenarios for the FPGA. What kind of possible case scenarios do you see available? What would you like to us to implement? Let’s create some Cool Stuff!