Вот пример модуля регистровых операций процессора 2А03G, здесь еще дополнительно подмешивается тактовый сигнал процессора 6502 (PHI1), на него не обращайте внимание.
Также ниже привожу логическую схему этого модуля. Имеются порты(регистров) на чтение (Rxxx) и на запись (Wxxx). Порт выбирается комбинаторной схемой, она немного оптимизирована, но сути это не меняет, в оригинале на NOR-ах сделан декодер, а после оптимизации получилось на NOR и ОR. Можете рисовать как вам удобнее, синтезатор в любом случае будет оптимизировать вашу схему при компиляции проекта. Результат синтеза в виде логической схемы вы можете посмотреть на вкладке Tolls/ Netlist Viewers /RTL Viewer
//===============================================================================================
// Register Operations Decoder Module
//===============================================================================================
module REG_SEL(
// Clocks
input PHI1, // Phase PHI1 CPU
//Inputs
input RW, // CPU read/write
input [4:0]ADR, // APU address space
input [15:5]CPU_A, // CPU address space
// Outputs
output W4000, // Port $W4000
output W4001, // Port $W4001
output W4002, // Port $W4002
output W4003, // Port $W4003
output W4004, // Port $W4004
output W4005, // Port $W4005
output W4006, // Port $W4006
output W4007, // Port $W4007
output W4008, // Port $W4008
output W400A, // Port $W400A
output W400B, // Port $W400B
output W400C, // Port $W400C
output W400E, // Port $W400E
output W400F, // Port $W400F
output W4010, // Port $W4010
output W4011, // Port $W4011
output W4012, // Port $W4012
output W4013, // Port $W4013
output W4014, // Port $W4014
output W4015, // Port $W4015
output W4016, // Port $W4016
output W4017, // Port $W4017
output nR4015, // Port $nR4015
output nR4016, // Port $nR4016
output nR4017 // Port $nR4017
);
// Combinatorics
wire REGRD;
wire REGWR;
assign REGRD = ~RW | CPU_A[5] | CPU_A[6] | CPU_A[7] | CPU_A[8] | CPU_A[9] | CPU_A[10] | CPU_A[11] | CPU_A[12] | CPU_A[13] | ~CPU_A[14] | CPU_A[15];
assign REGWR = RW | CPU_A[5] | CPU_A[6] | CPU_A[7] | CPU_A[8] | CPU_A[9] | CPU_A[10] | CPU_A[11] | CPU_A[12] | CPU_A[13] | ~CPU_A[14] | CPU_A[15];
//write port decoder
assign W4000 = ~( PHI1 | ( REGWR | ADR[0] | ADR[1] | ADR[2] | ADR[3] | ADR[4]));
assign W4001 = ~( PHI1 | ( REGWR | ~ADR[0] | ADR[1] | ADR[2] | ADR[3] | ADR[4]));
assign W4002 = ~( PHI1 | ( REGWR | ADR[0] | ~ADR[1] | ADR[2] | ADR[3] | ADR[4]));
assign W4003 = ~( PHI1 | ( REGWR | ~ADR[0] | ~ADR[1] | ADR[2] | ADR[3] | ADR[4]));
assign W4004 = ~( PHI1 | ( REGWR | ADR[0] | ADR[1] | ~ADR[2] | ADR[3] | ADR[4]));
assign W4005 = ~( PHI1 | ( REGWR | ~ADR[0] | ADR[1] | ~ADR[2] | ADR[3] | ADR[4]));
assign W4006 = ~( PHI1 | ( REGWR | ADR[0] | ~ADR[1] | ~ADR[2] | ADR[3] | ADR[4]));
assign W4007 = ~( PHI1 | ( REGWR | ~ADR[0] | ~ADR[1] | ~ADR[2] | ADR[3] | ADR[4]));
assign W4008 = ~( PHI1 | ( REGWR | ADR[0] | ADR[1] | ADR[2] | ~ADR[3] | ADR[4]));
assign W400A = ~( PHI1 | ( REGWR | ADR[0] | ~ADR[1] | ADR[2] | ~ADR[3] | ADR[4]));
assign W400B = ~( PHI1 | ( REGWR | ~ADR[0] | ~ADR[1] | ADR[2] | ~ADR[3] | ADR[4]));
assign W400C = ~( PHI1 | ( REGWR | ADR[0] | ADR[1] | ~ADR[2] | ~ADR[3] | ADR[4]));
assign W400E = ~( PHI1 | ( REGWR | ADR[0] | ~ADR[1] | ~ADR[2] | ~ADR[3] | ADR[4]));
assign W400F = ~( PHI1 | ( REGWR | ~ADR[0] | ~ADR[1] | ~ADR[2] | ~ADR[3] | ADR[4]));
assign W4010 = ~( PHI1 | ( REGWR | ADR[0] | ADR[1] | ADR[2] | ADR[3] | ~ADR[4]));
assign W4011 = ~( PHI1 | ( REGWR | ~ADR[0] | ADR[1] | ADR[2] | ADR[3] | ~ADR[4]));
assign W4012 = ~( PHI1 | ( REGWR | ADR[0] | ~ADR[1] | ADR[2] | ADR[3] | ~ADR[4]));
assign W4013 = ~( PHI1 | ( REGWR | ~ADR[0] | ~ADR[1] | ADR[2] | ADR[3] | ~ADR[4]));
assign W4014 = ~( PHI1 | ( REGWR | ADR[0] | ADR[1] | ~ADR[2] | ADR[3] | ~ADR[4]));
assign W4015 = ~( PHI1 | ( REGWR | ~ADR[0] | ADR[1] | ~ADR[2] | ADR[3] | ~ADR[4]));
assign W4016 = ~( PHI1 | ( REGWR | ADR[0] | ~ADR[1] | ~ADR[2] | ADR[3] | ~ADR[4]));
assign W4017 = ~( PHI1 | ( REGWR | ~ADR[0] | ~ADR[1] | ~ADR[2] | ADR[3] | ~ADR[4]));
//read port decoder
assign nR4015 = REGRD | ~ADR[0] | ADR[1] | ~ADR[2] | ADR[3] | ~ADR[4] ;
assign nR4016 = REGRD | ADR[0] | ~ADR[1] | ~ADR[2] | ADR[3] | ~ADR[4] ;
assign nR4017 = REGRD | ~ADR[0] | ~ADR[1] | ~ADR[2] | ADR[3] | ~ADR[4] ;
// End of register decoder module
endmodule
Там в Quartus можно просто "нарисовать" схему, просто соединяя отдельные элементы?
Да, такая возможность в Квартусе имеется и для новичков это вполне себе хороший метод осваивания ПЛИС(FPGA). Я сначала так и начинал изучать, рисовал отдельные модули в схемнике, отлаживал, а потом переписывал в Верилог. Можете найти на Ютубе примеры схемного ввода для начинающих. Но Одной схемы в Квартусе конечно мало, нужно еще правильно сконфигурировать проект.

И еще небольшая ремарка: Неблокирующее присвоение <= лучше и даже нужно использовать только в блоке always для построения триггеров. А для простой комбинаторики используйте блокирующее присвоение assign. В противном cлучае вы рискуете получить схему отличную от оригинала. Удачи!