Regarding the problem faced on last log entry, I haven't decided yet, but I'm inclined to solve it as follows:
Change the single Execute phase for a dual phase. It makes possible to use any of the registers as both ALU A and B in. All the registers will have its outputs connected together (bus), so only one can be read at a time. The first Execute step would load R1 value in a (new) input temporary register for the ALU A input. In the next step (Execute 2), the R2 value would be driven to ALU B input normally, and (almost) immediatelly the result would be available at ALU output, ready to be loaded in R1 input when CLK-B rises at middle of Execute step 2.
This approach has the notable advantage of barely add hardware complexity (only one new register) while making the Instruction set code far more confortable by allowing all registers to act as both two inputs and the output of ALU.
The main disadvantages is the speed penalty, 25% slower, but I think it's manageable, and one step entirely useless in all non ALU operations. That doesn't make me anyway happy, but...
PS. Just added a list of parts. It's preliminar, and some quantities are very overestimated, as the demux.
Cheers!
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.