oldben wrote:
If you are using a FPGA why not go 24 bits. Memory is cheap compared to 1974.
A bit stale, but it is worth considering:
FPGA resources are surprisingly limiting:
* On-board block RAM is at a premium as going off-board is much slower, noisier and more error-prone. It never comes in 24 bits. To build 24-bit memories we will use up a lot of interconnects and extra decoding and selection logic.
* Off-board SRAMS require custom boards, as modern FPGA devboards come with dynamic RAM. Dynamic RAM is much slower for random access and requires complex memory controllers - either proprietary or DIY projects more complex than a small CPU;
* If you ever do decide to go off-board, where do you get 24-bit memory?
* Interconnects are limited and the faster paths get used up quickly, the wider you go; this compromises other circuitry on the FPGA as well;
* ALUs get slower as ripple carry propagation has finite per-bit cost. Building more sophisticated carry circuits makes for undue complexity;
* The problems are multiplied many times over, as typical MISC CPUs immediately perform many simultaneous ALU operation on TOS and NOS while the opcode is being decoded; the decoder muxes the appropriate result. So we don't have a single ALU, we have multiple units for each possible operation - add, subtract, and, or, shift, etc. Each unit brings more above-mentioned interconnect and carry issues.
* Wide muxes get very expensive quickly and require more layers of logic (especially on cheaper older FPGAs). This also requires more interconnects and compromises maximum speed.
I could probably keep going but you get the idea. The whole point of these devices is to be very simple and very fast.