Figure 3 четко указано, что CS выбирает целый 64 разрядный банк.
То есть ваще предположение о том, что cs0/cs1 выбирают старшую или младшую половину не верно.
Выбор байт производится сигналами DQM и используются обычно при записи. При чтении просто игнорируются не нужные байты.
В вашем случае cs0/cs1 используются корректно.
В файле Command.v:
if (do_refresh==1 | do_precharge==1 | do_load_mode==1)
CS_N <= 0; // Select both chip selects if performing
else // refresh, precharge(all) or load_mode
begin
CS_N[0] <= SADDR[`ASIZE-1]; // else set the chip selects based off of the
CS_N[1] <= ~SADDR[`ASIZE-1]; // msb address bit
end
При регенерации памяти - выбираются все микросхемы, при работе старший бит адреса выбирает к каким из 8 микросхем будет идти обращение.