A little double post to document the porting of a small FPGA design from a Zynq with ARM + Linux + Pynq + Python to a smaller Spartan with MicroBlaze soft controller + bare metal.
The post focuses on the software / firmware aspect. How I migrated logic running on the physical microcontroller inside the Zynq package, to firmware in a MicroBlaze soft controller core inside the Spartan fabric.
The original VHDL design is a set of IPs that generate pulses for an ultrasone instrument. That part ports as-is between Spartan and Zynq without changes. I will not elaborate on it. Check here to learn more: Learning AMD Zynq: a project to generate a set of PWM signals. 1 - problem statement and possible approach.
Hardware
This is the Spartan-7 block diagram. Blue on the left is the MicroBlaze soft controller core and friends. Middle green parts is the interface between the software and fabric. Virtually identical to what I used in the Zynq. The blue block on the right is the unchanged VHDL. A few contraptions to replace the Pynq / Jupyter user interface are purple at the top right side.
And the same design on a Zynq. Here, the software runs on a hard ARM microprocessor core, at the left in blue. The green register and clock bridges, and VHDL at the right, are identical.
part 2 will review the software and the process to write it.