decode1: Use block RAMs in decode
authorPaul Mackerras <paulus@ozlabs.org>
Tue, 26 Jul 2022 04:55:29 +0000 (14:55 +1000)
committerPaul Mackerras <paulus@ozlabs.org>
Tue, 9 Aug 2022 09:52:01 +0000 (19:52 +1000)
commit5380d800399e8fddd6c25281617f97eeea8f7ff3
treef86b3d6cacebab7935bf1aa004d8623e925c1785
parent47895f8aff5f8ff0d1a3f86509e22c4e5290b181
decode1: Use block RAMs in decode

This combines the various decode arrays in decode1 into two, one
indexed by the major opcode (bits 31--26 of the instruction) together
with bits 4--0 of the instruction, and the other indexed mostly by the
minor opcode (bits 10--1), with some swizzles to accommodate the
relevant parts of the minor opcode space for opcodes 19, 31, 59 and 63
within a 2k entry ROM (11 address bits).  These are called the "major"
and the "row" decode ROMs respectively.  (Bits 10--6 of the
instruction are called the "row index", and bits 5--1, or 5--0 for
some opcodes, are called the "column index", because of the way the
opcode maps in the ISA are laid out.)

Both ROMs are looked up each cycle and the result from one or other,
or from an override in ri.override_decode, are selected after a clock
edge.

This uses quite a lot of BRAM resources.  In future a predecode step
will reduce the BRAM usage substantially.

Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
decode1.vhdl