I'm a bit late getting started, so I thought that I should configure a basic platform for my project. The Arty S7 already has quite an array of user IO - 4 LEDs, 4 switches, 4 pushbuttons, and 2 RGD LEDs, so I think that there's more than enough inputs that could be configured for control. I think I'd like to add a display, so I ordered a PMOD RGB OLED. I read somewhere (during a Google search) that since the Digilent IP libraries haven't been updated for a few years that there might be some issues with a few of the PMODs - the RGB OLED was one that was mentioned, but I thought I'd try it. I have a monochrome PMOD OLED that I can use as backup.
Here are links to the Digilent Pmod descriptions for the 3 Pmods that I am going to use for my basic platform. I'll add additional sensors when I determine what types of experiments that I want to do for my project. The Arty S7 is great in that it has 4 Pmod ports and an Arduino shield connector (some of the pins are shared), so it's easy to add sensors to the board without a lot of jumper wiring. I have both Arduino shield and Pmod Grove adapters that I used with the PYNQ-Z2 and I have lots of Grove modules.
My intent when I signed up for this challenge was to develop experience using MicroBlaze processors for sensor interfacing. I've used various Zynq 7000 and MPSoC boards in the past, but really haven't designed anything with a MicroBlaze (although I've run pre-built MicroBlaze examples). A couple of other challengers have done a great job in documenting the process to add Digilent Pmod IP to the Arty S7, so I won't repeat all of the detail of the steps required. In particular, javagoza, has done a great tutorial Arty S7-50 Rapid Prototyping Environmental Monitor.
A problem that I've always encountered with Xilinx tools and hardware is that many examples and tutorials that are available only work with specific versions of the tools. The tools are also supported by multiple OS's in various formats (Window, Linux, and Linux Virtual Machines). So, there are lot of ways that you can run into problems trying to develop firmware and software from existing examples. I've followed with interest as different challengers have selected different tool versions based on their particular constraints. I'll document any issues that I run into caused by the choices that I made.
Like javagoza, I found this 2020 webinar by Jayson Bethurem of Xilinx to be helpful in getting started with Digilent MicroBlaze IP. Since this webinar was using Xilinx 2020.1 versions of Vivado and Vitis, I decided to use a VirtualBox VM that I have on my Win10 desktop that runs Ubuntu 18.04 with the Xilinx 2020.2 tools installed. I had previously used this VM for developing with the Ultra96.
The only real issue that I had with the webinar was that the link to the Digilent IP library didn't work https://github.com/Digilent/vivado-library/archive/v2020.1.zip. It's interesting because the Digilent github vivado-library repo only has releases that support up to 2019 tools. I have seen other references (even in the Digilent forum) to 2020 files, but I can't find them and all the referenced links don't work. I asked on the Digilent forum and was told that the IP is only supported up to 2019. So where are the mystery 2020 files (the latest tag archive of the 2019.1-2 files was in Oct 2021)? Good news is that I decided to try the latest 2019 files from the repo and they worked - at least for the 3 Pmods listed above. You do get annoying warnings in Vivado that the IP was packaged with a different board but this also happened in the webinar. Apparently, the IP was packaged with the Arty Z7 instead of the Arty S7, but these warnings can be ignored.
Here is the Block diagram of my design in Vivado.
with a closeup of the IP elements
Here is a video showing my sensor base platform working. I start with the challenge text on the RGB OLED and then switch to a picture of my granddog and the accelerometer data from the PmodNAV on the OLED.
I had a funny issue with the OLEDrgb in Vitis that I haven't yet figured out. The color order is supposed to be (R,G,B) and the comments in the example code support this, but in actual use I found the color order to be (B,R,G). Easy to change in the code, but don't know why it's not as expected.
I haven't gotten an app to change the shutter speed on my iPhone, so the video does have the annoying update flicker on the OLED. Below are a couple of snapshots from the video. The fonts are a bit clunky.
Now to figure out what type of sensors and experiments that I want to do with the Arty S7....