3 ms·
https://www.nand2tetris.org/ https://www.nand2tetris.org/ - Another course. I'm not familiar with Hotz's course, but I like what this one covers and it's very a
by Jtsummers 3y ago
https://www.nand2tetris.org/ https://www.nand2tetris.org/ - Another course. I'm not familiar with Hotz's course, but I like what this one covers and it's very approachable. It's roughly a survey version of a computer engineering curriculum so not deep (and ignores a lot of technical details, like assuming perfect timing for the logic circuits instead of dealing with actual electronics) but it's pretty comprehensive. It's a good introduction before going on to study the various areas it covers in more depth.
EDIT:
Looking up the course you mentioned it seems like it's intended to cover similar terrain as Nand2Tetris but doesn't have nearly as much material available or a reasonable timeline. Is this https://github.com/geohot/fromthetransistor https://github.com/geohot/fromthetransistor really all he has posted? I'd definitely recommend Nand2Tetris first, it consists of 12 projects. It can be reasonably completed in 12 weeks of part time effort and then you can take that as a jumping off point into fuller treatments of the topics that catch your interest or where you find yourself with an obvious gap in knowledge.
Also this concerns me:
Section 4: Compiler: A “high” level language -- 3 weeks
- Building a C compiler(Haskell, 2000) -- A bit more interesting, cover the basics of compiler design. Write in haskell. Write a parser. Break this into subchapters. Outputs ARM assembly.
- Building a linker(Python, 300) -- If you are clever, this should take a day. Output elf files. Use for testing with QEMU, semihosting.
- libc + malloc(C, 500) -- The gateway to more complicated programs. libc is only half here, things like memcpy and memset and printf, but no syscall wrappers.
- Building an ethernet controller(Verilog, 200) -- Talk to a real PHY, consider carefully MMIO design.
- Writing a bootloader(C, 300) -- Write ethernet program to boot kernel over UDP. First thing written in C. Maybe don’t redownload over serial each time and embed in FPGA image.
That does not seem like a 3 week project to me if you've never written a compiler or linker before. Especially given he provides (from here) no other material or guidance and you end up using 3 separate languages. "basics of compiler design" in less than 3 weeks along with "if you're clever, this should take a day"? And an ethernet controller, and a libc and malloc, and a bootloader?
If you know Haskell enough to make a compiler, Python enough to make a linker, C well enough to make libc + malloc + a bootloader, Verilog well enough to make an ethernet controller all in three weeks, then you don't need this "course" at all. Just the C compiler in Haskell part is a semester long academic course, and rarely actually results in a full compiler with a teacher setting the pace (with assignments, quizzes, and tests).
- apricot 3y agoMy son is at this very moment doing the nand2tetris course on Coursera as a summer project, because he wanted to understand how computers work. It's very well done and the tools provided isolate the beginner from a lot of low-level EE details. The first half of the project has you build a simple 16-bit computer starting from logic gates, using a basic hardware description language, as well as an assembler for it. Simulators are provided. As you wrote, timing considerations are sweeped under the rug, which is too bad. The second half is more software-oriented: you start by writing a stack machine emulator for your computer, and then you write a compiler for an object oriented high-level language that outputs stack machine code. Finally, you write a standard library for your language. As a third part to this course, we will then implement that computer on an FPGA, following Michael Schröder at https://gitlab.com/x653/nand2tetris-fpga/ https://gitlab.com/x653/nand2tetris-fpga/ . This will be my first experience with FPGA development, so I'm looking forward to it as well.