2 ALLТема интересная, и думаю - нужная.
Хотел бы поучаствовать в открытом Verilog-проекте по АВР-совместимому софт-процессору - при условии, если кто-то возмется за разработку/изготовление/рассылку, за недорого, простых макеток со Spartan3A(AN)/Cyclone2(3) (те с одинаковым форм-фактором, но разными FPGA) - на которых и будет доводка.
"Чистый" АВР мне неинтересен(зачем клонировать изъяны), я бы подумал об
1) максимально ортогонализированной системе 18-битных команд и программе перекодирования скомпилированного 16-битного кода АВР в загружаемый 18-битный код софт-процессора (естественно, придется отказаться от поддержки команд LPM/ELPM/SPM),
2) однотактном исполнении всех команд (по возможности - опция вставки пустых тактов для совместимости по таймингам).
Это позволит оптимизировать софт-процессор по компактности/быстродействию
и сохранить возможность использовать ПО для АВР.
Под максимальной ортогонализацией понимаю, например, такие частные случаи для команды "MOV dst, src" - как раз укладывается в 18 бит и в 1 такт(по предварительным прикидкам для Спартанов), и вроде охватывает все случаи АВР
(кроме LPM/ELPM/SPM):
MOV Rd, Rs
MOV Rd, (Rs)
MOV Rd, (-Rs)
MOV Rd, (Rs+)
MOV Rd, (s) // (s) ::= {SR|(PC+)|(SP)|Pn|,...}
MOV (Rd), Rs
MOV (Rd), (Rs)
MOV (Rd), (-Rs)
MOV (Rd), (Rs+)
MOV (Rd), (s)
MOV (-Rd), Rs
MOV (-Rd), (Rs)
MOV (-Rd), (-Rs)
MOV (-Rd), (Rs+)
MOV (-Rd), (s)
MOV (Rd+), Rs
MOV (Rd+), (Rs)
MOV (Rd+), (-Rs)
MOV (Rd+), (Rs+)
MOV (Rd+), (s)
MOV (d), Rs // (d) ::= {SR|(PC+)|(SP)|Pn|,...}
MOV (d), (Rs)
MOV (d), (-Rs)
MOV (d), (Rs+)
MOV (d), (s)
MOV Rd, K
MOV Rd, (Rz) // Rz ::= {X|Y|Z}
MOV (Rz), Rs // Rz ::= {X|Y|Z}
Ну и остальные команды (арифметико-логические и переходов) - тоже ортогонализировать.