the unit has some number of inputs dependent on which instructions it processes
That phrasing is confusing.
When discussing the register unit (which is the topic here), the only relevant inputs are register operands.
Flags, immediates, and other instruction fields are "aside inputs" and should not be counted as operands.
Instructions have either zero, one or two input register operands.
I believe the Power ISA has no three input register-operand instructions.
Therefore, each ALU unit can accept at most two register-operand inputs, and that is clearly shown on my schematic.
the unit has some number of inputs dependent on which instructions it processes
Well, that is true, but also it is also a completely irrelevant and obvious "always-truth".
Also true: Each ALU unit always has the same number of inputs (because inputs are physical wires).
Also true: Each ALU has at most two register-operand inputs (but it is likely that all ALUs will have 2 register-operand inputs because we canot afford a high ALU unit count; the ALU unit count will be either 3+1 or 7+1)
for add-carry it's 3 inputs
For add-carry, it has many other wires as inputs, not just 3 inputs.
For add-carry, it's two register-operand inputs.
That is drawn on my schematic.
I'm not going to draw every single control wire that goes into an ALU in that overview schematic.
I call them input registers because
That terminology is misleading and a poor conceptual fit for your design.
Confusingly, on your original schematic they are called "output registers".
I know there hasn’t been time to standardize terms yet, so let’s do that now.
I used "operand registers"; you may choose a different name if you prefer, but please avoid "input registers" and "output registers."
In the ISA: architectural registers (or architected registers).
After register renaming: physical registers (or renamed physical registers).
duplicate physical registers: replica registers
"operand/input/output registers": ...choose something
they sneakily have N read ports for a N-input unit, by duplicating them N times so each duplicate only needs 1 read and 1 write port.
That's simply called "dual-port read."
That you plan to implement it with replica registers is irrelevant and need not be mentioned.
If a detail about those replica registers is important, explicitly say "replica registers" so it's clear what you mean.
Otherwise, it is just "dual-port read" physical registers, and abstract away their implementation.
To be clear, if you want to make a new image to replace the one on the website, please use a format that ends up as SVG
Yes — I want to create a new image. The original drawing is an SVG composed of lines, triangles, and rectangles.
That image is documentation, so I believe the appropriate license is the GNU FDL. I’ll find out how to apply that license to an image.
You can submit a PR here.
I will not submit it.
I’ll post the images in the forum, and you can submit them to the Git repository if you want.
Those images are basic documentation, and they should be publicly discussed on this forum and easily accessible to anyone on this forum, not just submitted to the GIT where they will be lost in some sub-folder.
One of the project’s major Achilles’ heels is the near-total lack of documentation, and I intend to change that.
That’s why I want us to agree on common terminology so we can communicate more easily.
on the ECP5 each block RAM is 18kbit (see page 25 of the data sheet), so, since they max out at 36-bits wide we use 2 block RAMs per input/output pair so that's 18kbit*2/72-bit=512
OK. But the ECP5 has only about 32 BRAMs. And you pair them into 16 pairs.
That allows max. 16 simultaneous reads, and you are going to use it up for the physical "operand" registers.
I'm not an FPGA expert, I'm just mentioning it, maybe I'm wrong.
It seems to me that those BRAMS could maybe be more useful elsewhere.
Implementing a total of 128 physical "operand" registers as LUTs would use up about 10 K LUTs, I guess.
Add another 6 K for the read MUXes. It is a lot, but not prohibitive.