During my second week of internship, I encountered two unexpected surprises concerned with the project I was given. My project was the continuation of what another intern, Jun Wen, was working on. It was the development of a web application that would simplify the programming of different models of FPGAs. My first surprise was that I was going to work with FPGAs instead of microprocessors (which I was expecting). This meant that I had to study at least the very basic structure and operation of an FPGA, in order to have the big picture of what the project is and what my role in this project is.
Luckily, my knowledge of basic digital circuits from first-year lectures proved to be helpful. My second surprise was from the c++ codes in the project. There were lots of external library functions and classes from Wt, Poco, and Cereal, that I had to learn about in order to develop the web application. I intend to spend time familiarizing myself with those libraries when I get to the coding stage later.
My specific role in this project was to focus on the ice40 FPGA and find a tool which could replace the BRAM contents of the FPGA without having to go back to the design entry and synthesis stages, as well as knowing how to generate the bitstream after the place-and-route stage. The opensource project icestorm luckily had a tool named icebram which would generate a random hexfile to initialize the FPGA BRAM memory with, and replace those hex values with the values we need to implement after place and route. It also had a tool named icepack which could generate bitstreams from .asc files generated by next-pnr.
Most of this week was spent on trying to understand the basic structure of the FPGA, exploring the icestorm tools, and learning about the project from Jun Wen. Next week’s focus will be on searching other tools to replace the BRAM contents of different FPGA models.