REGISTER
FILE
During
each cycle, we must read two register operands and
write back one result. You get two read ports (AREG
and BREG) by keeping two copies of the 16 × 16-bit
register file REGFILE, and reading one operand from
each. On each cycle you must write the same result
value into both copies.
So,
for each REGFILE and each clock cycle you must do
one read access and one write access. Each REGFILE
is a 16 × 16 RAM. Recall that each CLB has two 4-LUTs,
each of which can be a 16 × 1-bit RAM. Thus, a REGFILE
is a column of eight CLBs. Each REGFILE also has an
internal 16-bit output register that captures the
RAM output on the CLK falling edge.
To
read and write the REGFILE each clock, you double-cycle
it. In the first half of each clock cycle, the control
unit presents a read-port source operand register
number to the RAM address inputs. The selected register
is read out and captured in the REGFILE output register
as CLK falls.
In
the second half cycle, the control unit drives the
write-port register number. As CLK rises, the RESULT15:0
is written to the destination register.