"... The independent course will go beyond the interpreter level and look at how we might translate some of the concepts to a hardware machine"
What do you mean by hardware machine?
I ask you this in particular because a long time ago, I was subscribed to the ACM, and I remember that I saw some articles, or references to articles on how to implement combinators directly on hardware.
I roughly remember who and which articles at this time, (I have his name in the tip of the tongue, whose last name may start with H,) about someone who wrote some articles in how to implement combinators in hardware, and some article on how to build an optimal combinator basis for a program.
It maybe was from the UK or some of north of European country.
That was on late 80's or early 90's, later, on 2000, when I was not interested in hardware anymore, I took a course on computer architecture where I was tough to program in a low level language similar to Verilog to program a FPGA (Field Programmable Gate Array), where I noticed the importance of that work.
On that basis, with the clear warning that I am sustaining my suggestion o a very vague memories, I think that a good project could be to:
1) Search for the article about how to find an optimal combinator basis for a particular program, and about implementing combinators in hardware.
2) Search how to implement combinators in a very-low-level language like Verilog.
3) Build a program which translates SKI to Verilog, just to gain some experience with such task.
4) Analyze what is the better way to implement combinators in FPGAs.
5) Use what you learned from the articles to design an appropriate basis.
6) build a compiler for a simple functional language to those combinators, you can learn how to do that from an article by David Turner (I can't remember that title too, but you should not have any problem to find it, I should sleep better ;) )
7) play with a FPGA, by programming one, or just simulating it, and compiling simple programs, first one that just make a simple computation, with no recursive call, then a simple program using a fixed point combinator.
(you should analyze and search in literature which fixed point combinator is more adequate to implement in hardware)
8) Once you have a good experience, you can implement a more serious compiler for a simple but more general functional language (no types yet!)
9) To program an FPGA is not as simple as translating your program into a very-low-level language like Verilog, timing is very important. I remember that in the course that I took where I learned to program FPGA's one had to spent time analyzing the time charts in the simulator to prevent that a computation could not be synchronized.
if your project is for research (you are graduate student or working on research) you should analyze your generated code with some model checking technique, that means that you should also generate something like a temporal logic interpretation of your programs to be able to check it.
When you finish this, you are ready for your PhD exam!