Initial commit
This commit is contained in:
56
Libs/NanoBlaze/hdl/instructionDecoder_RTL.vhd
Normal file
56
Libs/NanoBlaze/hdl/instructionDecoder_RTL.vhd
Normal file
@@ -0,0 +1,56 @@
|
||||
ARCHITECTURE RTL OF instructionDecoder IS
|
||||
|
||||
constant opCodeIndexH : integer := instruction'high;
|
||||
constant opCodeIndexL : integer := opCodeIndexH - opCodeBitNb + 1;
|
||||
|
||||
constant twoRegInstrIndex : integer := opCodeIndexL - 1;
|
||||
constant ioAddrIndexed : integer := twoRegInstrIndex;
|
||||
|
||||
constant addrAIndexH : integer := twoRegInstrIndex - 1;
|
||||
constant addrAIndexL : integer := addrAIndexH - registerAddressBitNb + 1;
|
||||
|
||||
constant immediateDataIndexH : integer := registerBitNb-1;
|
||||
constant immediateDataIndexL : integer := 0;
|
||||
constant addrBIndexH : integer := addrAIndexL - 1;
|
||||
constant addrBIndexL : integer := addrBIndexH - registerAddressBitNb + 1;
|
||||
|
||||
constant aluCodeIndexH : integer := opCodeIndexH;
|
||||
constant aluCodeIndexL : integer := aluCodeIndexH - aluCodeBitNb + 1;
|
||||
|
||||
constant portAddressH : integer := registerBitNb-1;
|
||||
constant portAddressL : integer := portAddressH-portAddressBitNb+1;
|
||||
constant spadAddressH : integer := registerBitNb-1;
|
||||
constant spadAddressL : integer := spadAddressH-spadAddressBitNb+1;
|
||||
|
||||
constant branchCondH : integer := opCodeIndexL-1;
|
||||
constant branchCondL : integer := branchCondH-branchCondBitNb+1;
|
||||
|
||||
BEGIN
|
||||
------------------------------------------------------------------------------
|
||||
-- ALU control
|
||||
aluCode <=
|
||||
instruction(aluCodeIndexH downto aluCodeIndexL)
|
||||
when instruction(aluCodeIndexH) = '0' else
|
||||
'1' & instruction(aluCodeBitNb-2 downto 0);
|
||||
opCode <= instruction(opCodeIndexH downto opCodeIndexL);
|
||||
twoRegInstr <= instruction(twoRegInstrIndex);
|
||||
addrA <= unsigned(instruction(addrAIndexH downto addrAIndexL));
|
||||
addrB <= unsigned(instruction(addrBIndexH downto addrBIndexL));
|
||||
instrData <= signed(instruction(immediateDataIndexH downto immediateDataIndexL));
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
-- I/O control
|
||||
portIndexedSel <= instruction(ioAddrIndexed);
|
||||
portAddress <= unsigned(instruction(portAddressH downto portAddressL));
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
-- scratchpad control
|
||||
spadIndexedSel <= instruction(ioAddrIndexed);
|
||||
spadAddress <= unsigned(instruction(spadAddressH downto spadAddressL));
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
-- branch control
|
||||
branchCond <= instruction(branchCondH downto branchCondL);
|
||||
instrAddress <= unsigned(instruction(instrAddress'range));
|
||||
|
||||
END ARCHITECTURE RTL;
|
||||
Reference in New Issue
Block a user