Нашёл решение своей проблемы!
Причина: ножка BSEL2 и NAND_WE физически находятся на одном пине процессора. Когда я с FPGA жёстко задаю значение BSEL2 как 0 или 1, контроллер не может управлять NAND. Когда я убираю из FPGA проекта ножки управления BSEL2, на линии по умолчанию tri-state, контроллер может выставить 0 или 1, NAND управляется.
Решение: на отладочной борде сделано так

Как видно из схемы установленные резисторы не дают конфигурационному уровню заблокировать доступ контроллера NAND к линии.
На нашей плате ножка проца и ножка FPGA закорочены. Что бы освободить линию для NAND контроллера сделал следующую конструкцию:
Код
logic confsel;
logic [31:0] cnt;
always_ff@(posedge clock) begin
if (pll_locked) begin
if (~&cnt) cnt <= cnt + 1'b1;
end
if (cnt==CONFSTART) begin
confsel <= 1'b1;
end
else if (cnt==CONFEND) begin
confsel <= 1'b0;
end
end
assign BOOTSEL2 = confsel ? 1'b0/*1'b1*/ : 1'bz;
где CONFSTART и CONFEND выбираются таким образом, что бы сигнал confsel выставлялся в 1 перед подачей сброса на HPS и падал в 0 после снятия сброса с некоторой задержкой (у меня более 10000 тактов), т.к. инитный код процессора читает состояние BSEL в некоторый момент времени после снятия сброса.
После такой модификации проекта утилита quartus_hps определила NAND на плате, я смог зашить в неё образы preloader'a и простейшего baremetal приложения
Когда я перешиваю sof, происходит сброс HPS и в терминале выводится статусная информация preloader'a и собственно вывод программы
Есть автономный запуск простейшего baremetal приложения на кастомной борде!
Сообщение отредактировал serjj - Feb 12 2015, 12:28