Операции EQ, NEQ, LT, GE, ULE, UGE (равно, не равно, меньше, больше или равно, беззнаковое меньше, беззнаковое больше или равно; всё это нужно для условных переходов) фунциклируют как надо; флаги TRUE/FALSE выдаются; константы для инструкций SLT/SLTU формируется.
Вообще сравнение можно было бы сделать и на арифметике, но я решил, что так будет проще - два разных отдельных блока могут работать одновременно, например, чтобы вычислять условные переходы: компаратор сравнивает регистры, а арифметика в этот момент вычисляет предполагаемый адрес. Если сравнение не сработало, вычисленное значение просто отбрасывается, а если сработало - загружается в Program Counter. Поэтому отдельный флажок COND_TRUE очень даже нужен и полезен.
Отступать некуда - надо собирать АЛУ, а потом ещё блок регистров общего назначения; затем дешифратор команд (с поддержкой сжатых инструкций, так уж и быть); program counter с костылями для branch prediction; блоки выборки памяти инструкций и данных; блок форвардинга и ожидания; прочую мелочь...
----
* у китайцев, с электротестом. Этот экземпляр я заказал в Дефолт-Сити и пожадничал на электротест - вот мне и урок: экономия пары сотен рублей (или сколько он там стоит, я не помню) оборачивается бессонной ночью и бессильными злобными матюками в никуда.