mem_data_in ----------------------o-------, | | | +---+--+ | | IR |<---- ir_en | +---+--+ | '-------- ir | ,---------------------------, | ,-----------------------------------, | | | | | | ---+---+---+--- | | \ 2 1 0 / | | \ /<--- regbank_mux_sel | | \_________/ | | | | | | | | +----------------+----------------+ | | | i_data |<--- i_sel | | | |<--- i_en | | | Register Bank |<--- mode | | | |<--- oa_sel | | | pc oa ob |<--- ob_sel | | +---+-------+--------------+------+ | | | | | ,------- Immediate | | ,-----------)-------o ---+---+--- | | | backup_en | | \ 1 0 / | | +----+---+ | | | \ /<---- shifter_mux_sel | | | backup |<-' | | \_____/ | | +----+---+ | | | shifter_amount_immediate| '------o-----------)-------)----------------)---------, | | | | | | ---+---+--- | | | | | \ 1 0 / shifter_| | | | | \ /<- amount_ | | | | ----+------ \_____/ mux_sel | | | | / /<----' | | | | / Shifter /<--- shifter_carry_in | | | | / out /<---- shifter_opcode | | | | /__________/--, | | | | | | shifter_carry_out | | | ------+----. ,-----+----- | | | | \ a \/ b /<---' | | | \ ALU /<----- alu_c_flag_in | | | \ /<------ alu_v_flag_in | | | \ result /<------- alu_opcode | | | \_______________/--------> alu_{n,z,c,f}_out | | | | | | | o--------------------------o-----------' | | | | | | +----+----+ | | | | address |<--- address_en | | | +----+----+ | | '---------, | | '-----------------, | | | | | | | ---+---+---+--- | \ 2 1 0 / | \ /<---- mem_addr_mux_sel | \____+____/ | | | mem_addr mem_data_out