I had something of a similar experience writing software for a company that designed its own chips. I was writing in C, and occasionally, the programs had errors that I couldn’t debug. At that point I’d dive into the Verilog for the chip and see how it was all wired up. And often that would be the problem.
It’s a commonplace that the thing that determines the meaning of a computer program is itself a computer program. But it’s still weird to get bitten by that fact when you’re writing C.
The chip is a program, which determines the meaning of the machine code, which is a program produced by the C compiler, which is a program interpreting the program I’m writing. And whether you look at the chip as a compiled version of the verilog (compiled by another program, with silicon as the target) or as a logical program which you’re proving things about in your head, or as a program being interpreted by a simulator, that’s a lot of turtles.....
I had something of a similar experience writing software for a company that designed its own chips. I was writing in C, and occasionally, the programs had errors that I couldn’t debug. At that point I’d dive into the Verilog for the chip and see how it was all wired up. And often that would be the problem.
It’s a commonplace that the thing that determines the meaning of a computer program is itself a computer program. But it’s still weird to get bitten by that fact when you’re writing C.
The chip is a program, which determines the meaning of the machine code, which is a program produced by the C compiler, which is a program interpreting the program I’m writing. And whether you look at the chip as a compiled version of the verilog (compiled by another program, with silicon as the target) or as a logical program which you’re proving things about in your head, or as a program being interpreted by a simulator, that’s a lot of turtles.....