Path To Programmable - Lab 1
Through Xilinx and Element14, a training program to learn about the Zynq 7000 platform which is System On Chip combining an FPGA with an ARM processor. This comes to the students as complete development board packed with goodies like a wireless chip from MuRata (BT/BTLE/WIFI), 8GB Flash memory, onboard RAM, USB to JTAG (JTAG programmable over USB), Arduino-style headers (3.3V compatible only), Microphone, Bi-Color LED, and two additional expansion ports.
See all blog posts for this training here.
In this post, I'll walk through the first setup of getting a project started. This roughly covers Lab #1 from the training.
We begin in the Vivado IDE - I'm using Vivado 2017.4. And like the others doing this training, it keeps bugging me to update to version 2018.
It quickly becomes clear through these lessons that working in this environment is much more advanced than someone who is only familiar with Arduino style or graphical style programming. Things like defining clock rates are now necessary and enabling input/output pins aren't necessarily as straight forward. Once familiar with the development environment however, things get much easier.
We start by creating a new project in Vivado.
One of the first parts of this process is targeting a Xilinx part (or board). This must be done as part of project creation because so much of the development depends on the specific chip. This is different from Arduino where one can [somewhat] freely change the target board at any time. In my experience with Arduino there are generally minimal issues with porting code to different boards; aside from the target chipset actually being able to work with the code - for example targeting an ESP-based program onto an Atmel 328 chipset which obviously doesn't support WIFI.
The training lessons walk the user through targeting the exact Zync 7007s chip itself; and not the MiniZed development board. The dev board /could/ be chosen, but as the instructions point out; this wouldn't teach as much. We add the chip; then in later lessons we add links the flash, SPI, RAM, and other GPIO peripherals; just as if we were doing stand-alone development with "any given" accessories. Although this approach makes sense, sometimes it is nice to get a "hello world" sketch up and running as fast as possible; then delve deeper into the guts a little later on. Or maybe that is just me...
Here is the first block diagram after targeting the chip and finishing creating the first diagram.
The IDE shows a "TCL" interface (Pronounced "tickle" by Josh Foster in the videos that accompany the lessons). It appears to be a command-line interface in which advanced users can manually punch stuff in to script the development a little. I'm looking forward to learning more about this later on. But in Lab #1, I could at least see commands and responses scrolling through this area at the bottom of the screen.
Run Block Automation
The Block Automation interface speeds up the act of enabling peripherals and configuring IO.
Configuring IO can be seen below:
There was also a reference in the lesson to reading through the Z7000 Technical Reference Manual. It linked to this PDF. Have a peek if you dare - it is over 1800 pages!
Lab #1 stops at this point. We have created a new project targeting the the Z7000 chip and done a basic configuration. We haven't yet configured the RAM or any other external chips required to make the board do cool stuff, but that will come soon enough...
I have been thinking very seriously about updating my line follower robot using the MiniZed. The two biggest hurdles that I've found so far:
- Apparent lack of analog inputs on the Zynq
- Arduino-style headers are only 3.3V compatible.
The platform that I built the original line follower on (about 7 years ago) was this one. It uses a typical Arduino Atmel chipset and all the stuff runs at 5V logic levels. The line sensors are analog (LDRs).
I still want to do this; or something along those lines. Either rebuild my existing one or make a new one based on the same kit - desolder the Atmel chip and use the Zync via the expansion headers. This is starting to look like a little bit of a project though. I'm going through the schematic for the robot kit and would basically have to convert the signals going to the H-Bridge from 3.3 to 5V (probably just using simple transistors) or doing a more complicated conversion of the robot board to 3.3V with a different chips. Or even more complicated with making my own PCB... Or even leaving the board as-is and talking to the Atmel chip over SPI or Serial. So I'm going to dwell on this one over the next week or so before making my decision.
BUT I NEED YOUR HELP DECIDING!
If you can think of a cool or simple way of using the chassis and the MiniZed; please let me know in the comments.
That's all for this post. Keeping it short and to the point as I work through the backlog to get caught back up on this project.