Вопрос вам : схема моделировалась ?
не знаю интерфейс вашего ЦАПА, но если он берет данные по положительному фронту сигнала dclk (т.е. при переходе 0 -> 1) то ИМХО работать корректно не будет. Будет пропуск младшего бита и код выставляемый на цап будет в 2 раза меньше.
причина вот здесь
Код
if (dclk_loc = '1') then
mosi_loc <= data_out(counter)
и разберитесь с сигналом dclk. Вот это место
Код
dclk_loc <= '1';
end if;
работать не будет %)
По оптимальности
Код
mosi_loc <= data_out(counter);
мультиплексор 32в1 (правда в вашем случае 16в1 + LUT) это уже слишком для обычного сдвигового регистра.
Думаю что данной информации вам будет достаточно для размышления %)
Удачи!