You are hereTeaching


During my Ph.D. studies, I was a lab teaching assistant for the following courses at the University of Toronto:

  • ECE241 Fall 2009 (Digital logic using Verilog HDL)
  • ECE253 Fall 2010–2015 (Digital logic in Verilog and computer organization, Nios II and ARMv7)
  • ECE243 Spring 2010–2016 (Computer organization, Altera Nios II)

I chose to stay with the same courses for my entire time. Was this a good choice? Trade-offs. On one hand, I got less variety, teaching only labs (about 16:1 student:TA ratio) but not tutorials or lectures (with larger class sizes). On the other hand, more time in the same course lets me learn how to teach this particular subject and experiment with ways to improve it.

As a result, during (and after) my time as a teaching assistant, I created (and maintain) several online tools to help teach digital logic and computer organization. These tools are at

  • HDLBits: A set of short Verilog design problems with an online judge to check solutions for correctness and provide immediate feedback. This improves on textbook exercises (no feedback) and lab assignments (too infrequent and difficult). This tool encourages practicing (with feedback), on a larger quantity of easier problems.
  • ASMBits: A set of short assembly language problems (currently Nios II and ARMv7) with an online judge, similar to HDLBits.
  • CPUlator: A CPU and I/O device simulator that runs in a web browser. Originally designed to be an available-anywhere substitute for the Altera Monitor Program and FPGA board, the simulator is now easier, faster, more convenient, and provides debugging tools not available on the real hardware. CPUlator also provides the back-end to the ASMBits judge.

These tools originated from the curriculum at U of T, and are now being used at a few other schools. I'm currently working to extend these tools to be useful for more schools (mainly by adding language support), so that the tools can be more widely used. (Send me an email if you have a feature request!)