Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Active Serial Remoute не стартует
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
rolin
Решил вот обзавестись загрузчиком в проекте.
Для переконфигурации FPGA с разных адресов памяти использую Remoute Update.

Но вот проблема - при использовании этого IP, компилятор требует установки в свойствах проекта вместо Active Serial - Standart, Active Serial - Remoute, и как только я выставляю этот параметр, плисина перестает грузиться.

Что я не так делаю ? Cyclone 4 E. EPCS16 подключена к ногам как обычно.
vikS
Не должна влиять эта установка. Базовая ж прошивка по 0му адресу лежит в epcs? А какие еще параметры установлены у вас на вкладке Configuration?
rolin
Цитата(vikS)

Специально подготавливал фйл прошивки бутлоадера чтобы с нулевого адреса начинался - не работает.
Компилю бутлоадер без Remote - работает.

Установка Active serial - Remote требует применения IP Remote в проекте, они связаны между собой.

По идее должно с нулевого адреса грузиться в любом случае, но что мешает - ума не приложу.


Посмотрел осциллографом - плисина пытается читать память в цикле.
На выходе флешки вижу данные, равно как и клок и синхро и данные к ней.
А ПЛИС не грузится, хотя попытки делает.
doom13
Вероятно, отсутствует (либо неправильно сформирован) сигнал reset_timer - WDT сбрасывает FPGA.
rolin
Цитата(doom13 @ Jun 13 2016, 11:08) *
Вероятно, отсутствует (либо неправильно сформирован) сигнал reset_timer - WDT сбрасывает FPGA.

Точно! Сразу после запуска нужно конфигурировать ALT_REMOTE и отключать WDT, а у меня таймер на секунду стоял по глобальному сбросу.

Теперь загрузчик работает, но появилась вторая проблема - после попытки загрузить рабочую конфигурацию, плисина тут же перезагружается опять в загрузчик. Рабочий код не содержит ALT_REMOTE, то есть это уже не проблема WDT.
doom13
Цитата(rolin @ Jun 15 2016, 01:33) *
Теперь загрузчик работает, но появилась вторая проблема - после попытки загрузить рабочую конфигурацию, плисина тут же перезагружается опять в загрузчик. Рабочий код не содержит ALT_REMOTE, то есть это уже не проблема WDT.

Каким образом в данном случае сбрасывается WDT при переходе в Application?
Ядро Remote Update должно присутствовать в обоих проектах (и в Factory и в Application). Factory при переходе в Application должен стартануть WDT, а Application его сбрасывает (периодически).
rolin
Цитата(doom13 @ Jun 15 2016, 09:30) *
Ядро Remote Update должно присутствовать в обоих проектах (и в Factory и в Application). Factory при переходе в Application должен стартануть WDT, а Application его сбрасывает (периодически).

Тут я с вами пожалуй не соглашусь. Зачем мне в рабочей прошивке Remote_Update, если я не планирую переконфигурироваться из нее ?
Еще в загрузчике я отключаю WDT чтоб не мешал, а после переконфигурации так и вовсе режим Remote не представлен.

Есть рабочий проект, с которого я черпаю вдохновение, правда он под циклон 3, а у меня 4. Так там рабочие прошивки самые обычные, Active serial - Standart.

Вот код инициализации в загрузчике
CODE
// Remote Update State Machine
always @ (posedge clock)
begin
if (reset) ConfigState <= 0;

case (ConfigState)
// Reset State
0: begin
ResetRU <= 'b1;
if (Busy)
ConfigState <= 0;
else
ConfigState <= ConfigState + 1'b1;
end

//Setup Defaults
1: begin
ResetRU <= 'b0;
CRC_error <= 1'b0;
done <= 1'b0;
ReconfigLine <= 1'b0;
WriteParam <= 1'b0;
ReadSource <= 2'b0;
Reason <= 5'b01011;
loop <= 0;
ConfigState <= ConfigState + 1'b1;
end

//Turn on CONFG_DONE early
2: begin
DataIn <= 1'b1;
Param <= 3'b001;
ConfigState <= ConfigState + 1'b1;
end
3: begin
WriteParam <= 1'b1;
ConfigState <= ConfigState + 1'b1;
end
4: begin
WriteParam <= 1'b0;
ConfigState <= ConfigState + 1'b1;
end
5: begin
if (Busy)
ConfigState <= 5;
else
ConfigState <= ConfigState + 1'b1;
end

//Turn on OSC_INT
6: begin
DataIn <= 1'd1;
Param <= 3'b110;
ConfigState <= ConfigState + 1'b1;
end
7: begin
WriteParam <= 1'b1;
ConfigState <= ConfigState + 1'b1;
end
8: begin
WriteParam <= 1'b0;
ConfigState <= ConfigState + 1'b1;
end
9: begin
if (Busy)
ConfigState <= 9;
else
ConfigState <= ConfigState + 1'b1;
end

//Set Application Boot_Address
10: begin
DataIn <= (BootAddress >> 2); // Set the Boot Address of the Application Image, Only the 22 MSB bits are written
Param <= 3'b100;
ConfigState <= ConfigState + 1'b1;
end
11: begin
WriteParam <= 1'b1;
ConfigState <= ConfigState + 1'b1;
end
12: begin
WriteParam <= 1'b0;
ConfigState <= ConfigState + 1'b1;
end
13: begin
if (Busy)
ConfigState <= 13;
else
ConfigState <= ConfigState + 1'b1;
end

//Disable the WATCHDOG_EN
14: begin
DataIn <= 1'd0; // set DataIn to 0 to disable
Param <= 3'b011;
ConfigState <= ConfigState + 1'b1;
end
15: begin
WriteParam <= 1'b1;
ConfigState <= ConfigState + 1'b1;
end
16: begin
WriteParam <= 1'b0;
ConfigState <= ConfigState + 1'b1;
end
17: begin
if (Busy)
ConfigState <= 17;
else
ConfigState <= ConfigState + 1'b1;
end

// READ REASON for last Config
18: begin
Param <= 3'b111;
ConfigState <= ConfigState + 1'b1;
end
19: begin
ReadParam <= 1'b1;
ConfigState <= ConfigState + 1'b1;
end
20: begin
ReadParam <= 1'b0;
ConfigState <= ConfigState + 1'b1;
end
21: begin
if (Busy) begin
ConfigState <= 21;
end else
ConfigState <= ConfigState + 1'b1;
end
22: begin
Reason <= DataOut[4:0]; // Read the Reason for Last ReConfig
ConfigState <= ConfigState + 1'b1;
end
23: begin
ConfigState <= ConfigState + 1'b1;
end

// Check if we need to Reconfig
24: begin
if (Reason[3]) begin // If we are here due to CRC Error, skip reconfig &
CRC_error <= 1'b1; // set CRC error flag
ConfigState <= 24;
end
else
ConfigState <= ConfigState + 1'b1;
end
25: begin
if (control == 1) begin ReconfigLine <= 1'b1;
ConfigState <= ConfigState + 1'b1; end
end
26: begin // Hold ReconfigLine high for > 250nS as per handbook
if (loop == delay)
ConfigState <= ConfigState + 1'b1;
else loop <= loop + 1'b1;
end

// End State
27: begin
done <= 1'b1; // Indicate the State Machine is Finished
ConfigState <= 27; // Loop here
end


default: ConfigState <= 0;
endcase
end

remote Remoteinst(
.clock(clock),
.data_in(DataIn),
.param(Param),
.read_param(ReadParam),
.read_source(ReadSource),
.reconfig(ReconfigLine),
.reset(ResetRU),
.busy(Busy),
.data_out(DataOut),
.write_param(WriteParam)
);
doom13
Цитата(rolin @ Jun 15 2016, 12:51) *
Тут я с вами пожалуй не соглашусь. Зачем мне в рабочей прошивке Remote_Update, если я не планирую переконфигурироваться из нее ?
Еще в загрузчике я отключаю WDT чтоб не мешал, а после переконфигурации так и вовсе режим Remote не представлен.

Да, наверное можно и так.

Цитата(rolin @ Jun 15 2016, 01:33) *
Теперь загрузчик работает, но появилась вторая проблема - после попытки загрузить рабочую конфигурацию, плисина тут же перезагружается опять в загрузчик. Рабочий код не содержит ALT_REMOTE, то есть это уже не проблема WDT.

Ну и что за причина перезагрузки? Судя по всему, должна быть "CRC Error". Уверены, что с адресами ничего не напутали, каким образом происходит загрузка образа Application в конфигурационную флэшку?
rolin
Цитата(doom13 @ Jun 15 2016, 14:24) *
Ну и что за причина перезагрузки? Судя по всему, должна быть "CRC Error".

Трудно сказать, код, что выше эту ошибку не выдает. Согласно коду выше, если бы Remote выдал бы эту ошибку, то процесс не пошел бы дальше и до переконфигурации не дошел.
Причем ошибку не выдает даже когда я намеренно неправильно готовлю образ флешки.
Непонятно, на каком этапе происходит проверка CRC фактически, но проверка этого флага в коде происходит после установки адреса и перед командой реконфиггурации. Как-то странно это.

Прошивку для флешки делаю так


doom13
Цитата(rolin @ Jun 15 2016, 15:01) *
Трудно сказать, код, что выше эту ошибку не выдает. Согласно коду выше, если бы Remote выдал бы эту ошибку, то процесс не пошел бы дальше и до переконфигурации не дошел.

Проверяйте источник реконфигурации и всё станет ясно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.