Week of February 11, 2024

Project Work:

I enrolled late into the course so this is my first design notebook entry.

I got really stuck on Onboarding Lab 3: I have the general idea of how each test should be implemented but got really wrapped up in the details. I kept trying to think of ways to write my code cleaner (despite not yet having the tools to do so), which really slowed me down. I’ve also been learning how the models work through the tests written for Onboarding Lab 2, plus a lot of trial and error.

This upcoming week, I’m gonna try to finish Onboarding Lab 3 and Onboarding Lab 4. I’m not sure how much further I’ll get since I’m also quite ill right now.

Week of February 18, 2024

Project Work:

I finally completed all the onboarding labs. Lab 3 ended up being super tricky for me. When I got really stuck I ended up heavily referencing Michael’s completed labs - my exercise 1 is identical to his as I didn’t (and still don’t) understand if the model will allocate more bits than necessary to what we’ve defined for a input/output. However when I got to Lab 4, I took more inspiration from Vito’s code (from Lab 2) and made my solutions way more concise.

I also talked to Vito during the makeup meeting and will be joining AMBA.

Week of February 25, 2024

Project Work:

  • Read Ch. 1 and Sections 5.1-5.2 of the AMBA Specs
  • Started brainstorming diagram of APB Manager

I talked to Rishyak on Tuesday, and I’ve decided to work on the APB Manager. I read the “Introduction to the AMBA Buses” to learn how the AMBA buses work together in general. I asked a lot of questions about the bus signals and what “speed” meant in regards to the different buses, which ended up sparking a lot of discussion and debate in the dev channel (oopsies). I am very grateful for everyone who responded to me - I feel more comfortable with the high-impedance state and purpose of multi-driver wires. I also appreciate the Physics II review from Michael and Krzysztof.

I also read the first two sections of Ch. 5, which were about the APB manager, and drew a rough mock-up of my plans for its implementation.

Rough Sketch of APB Manager

I am still shaky on the timing of the data transfers, so I’m currently awaiting feedback from Rishyak.

Week of March 3, 2024

Project Work:

  • None

I spent 12 hours grading E15 Turbo for CompArch, so I had no time to work on PD.

Week of March 10, 2024

Project Work:

  • None

Similar to last week, I spent 10 hours grading the array reversal question early for the upcoming CompArch midterm. Was also too busy helping students prepare for said midterm.

Week of March 24, 2024

Project Work:

  • Talked to Vito and Rishyak about what the APB actually does
  • Redid some of the pseudocode

I talked to both Vito and Rishyak about the purpose of the APB manager and took extensive notes. Essentially the APB manager receives signals from a device using the generic interface, and its purpose is to translate those signals into APB-specific signals. Conversely, the APB subordinate’s purpose to translate those APB-specific signals back into generic. The reasons why we do these translations rather then just using the generic signals directly are:

  1. Generic is slow.
  2. Generic can only connect two devices, whereas AHB/APB is capable of connecting multiple devices.

My next goal is to sit down and crank out the APB Manager module whenever I have time.

Week of March 31, 2024

Project Work:

  • None

Was very busy with other work (mainly CompArch related, but also I had a Japanese composition and exam due this week.). Life just sucks ass sometimes. :P

Week of April 7, 2024

Project Work:

  • None

To be honest, I’ve been procrastinating real hard on the work I have to do for ProcDesign. I was frustrated with how long it was taking me to understand the APB specs on my own, and I started feeling overwhelmed by how much work I have to complete by the end of the semester (especially since I’m a three-credit student). I did talk to Vito about all of this, and have decided to sit down with him next weekend to talk about the APB Manager module.

Week of April 14, 2024

Project Work:

This Saturday I sat down with Vito for four hours and cranked out the APB module. To be honest, it was much simpler than I thought it would be. I definitely feel silly in hindsight since I put it off for so long. After finishing the APB Manager module, I wrote a test bench for the APB Manager (using the test bench for the Generic Bus Manager as a template).

I wasn’t able to test it myself, so I just made a pull request. I am currently waiting to hear feedback from Rishyak on Tuesday.

Week of April 21, 2024

Project Work:

  • Tried to debug test bench for APB Manager Module
  • Started working on APB Sub Module

Unfortunately my test bench had some bugs (bummer) so I sat down with Vito to debug them. We didn’t get very far though since CMake was having trouble configuring my project – this was mostly due to me not updating my computer for three years (I was using macOS 11, current version is macOS 14).

While we were waiting for my computer’s package manager to finish upgrading cmake (which it took over an hour to do), Vito made me read some of the messages that popped in my terminal. I learned some new terminology, which I’ll write here:

  • Dependencies are inputs (for our purposes) to Verilator, so Verilator depends on them. Thus they must be installed before we install Verilator.

  • CMake Configure is the process of “setting up” our project. Our IDE creates a build folder, put a bunch of files in there, and then tells CMake to do its setup within the build folder.

  • Make/Ninja: CMake doesn’t actually build any software, it just configures things. Make is build system, which is responsible for building our executable (aka compiling and linking).

  • make install: During configure, the build system was told which folder we want to copy the results of the build into. The process of copying only what came our of the build step is called “installing”.

I also got to ask about the purpose of BaseAddr and AddrMask from the Generic Subordinate module, added to my APB notes. My goal for next week is to write the module for the APB subordinate, finish debugging my APB Manager test bench with Vito, and write the APB Sub test bench. (This is what I get for putting off my work all semester :P)

Week of April 28, 2024

Project Work:

It’s crazy, but I completely finished everything (yay!)

First off, I was still having trouble configuring my project even after updating my laptop, so I sat down with Vito this Thursday. Basically I was having trouble because at some point I downloaded Anaconda onto my computer, which completely trashed my file path and caused me to get errors about incompatible file types. We managed to amend this somewhat (my project configures now), but my filepath is still trash (Vito recommends saving the data I care abt to a hard drive and nuking my computer lmao).

After that, I was able to build my project and realized that bugs with my test bench were from direction that some of the APB signals were declared in my top level for the APB Manager test bench, as well as APBCommon_if. After fixing those, my module passed all test cases.

Secondly, I finished both the APB Sub module AND its associated test bench (pause for applause). I wrote the APB Sub module this past Sunday, and cranked out the test bench this Friday. Once again I had trouble running my test bench – this time it was because it was having trouble building. After my presentation, I sat down with Vito again who explained why I was running into my issue. He told me about how labels for functions get declared (using C and C++ as an example), and explained that I was getting errors because I was using gcc as my compiler (hence using the gcc standard library), whereas when I did brew upgrade, it used the clang standard library (which has a different implementation). Long story short, I switched to clang, compiled my test bench, and was able to run my test bench.

Finally I made slides about the work I did this semester and presented it today in front of Vito (and Geoffrey). Tbh I didn’t take it super seriously since I have little-to-no honor left about the (lack of) work I’ve done for PD. I’m glad I also went to the PD meeting this past Thursday bc

  1. I learned it was totally fine to talk about our mistakes or things we learned along the way
  2. I got to see everyone in in-person, including meeting Krzysztof and seeing my old student Joe Aronov.

Overall, I shouldn’t have procrastinated on the work I had to do for PD for as long as I did, but I am very happy that I made it to the finish line. These past 2-3 weeks, I’ve learned a lot about CMake, build systems, compilers, etc. I’m especially grateful to both Vito and Rishyak, who sat down with me for many hours and explained stuff to me because I can’t read (esp Vito). I hope that the stuff I’ve written this sem gets merged with the main for the AMBA repo, so I can finally have my profile on the list of contributors :D