rolin 0 9 июня, 2016 Опубликовано 9 июня, 2016 · Жалоба Решил вот обзавестись загрузчиком в проекте. Для переконфигурации FPGA с разных адресов памяти использую Remoute Update. Но вот проблема - при использовании этого IP, компилятор требует установки в свойствах проекта вместо Active Serial - Standart, Active Serial - Remoute, и как только я выставляю этот параметр, плисина перестает грузиться. Что я не так делаю ? Cyclone 4 E. EPCS16 подключена к ногам как обычно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vikS 0 10 июня, 2016 Опубликовано 10 июня, 2016 · Жалоба Не должна влиять эта установка. Базовая ж прошивка по 0му адресу лежит в epcs? А какие еще параметры установлены у вас на вкладке Configuration? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rolin 0 10 июня, 2016 Опубликовано 10 июня, 2016 · Жалоба Специально подготавливал фйл прошивки бутлоадера чтобы с нулевого адреса начинался - не работает. Компилю бутлоадер без Remote - работает. Установка Active serial - Remote требует применения IP Remote в проекте, они связаны между собой. По идее должно с нулевого адреса грузиться в любом случае, но что мешает - ума не приложу. Посмотрел осциллографом - плисина пытается читать память в цикле. На выходе флешки вижу данные, равно как и клок и синхро и данные к ней. А ПЛИС не грузится, хотя попытки делает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 13 июня, 2016 Опубликовано 13 июня, 2016 · Жалоба Вероятно, отсутствует (либо неправильно сформирован) сигнал reset_timer - WDT сбрасывает FPGA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rolin 0 14 июня, 2016 Опубликовано 14 июня, 2016 · Жалоба Вероятно, отсутствует (либо неправильно сформирован) сигнал reset_timer - WDT сбрасывает FPGA. Точно! Сразу после запуска нужно конфигурировать ALT_REMOTE и отключать WDT, а у меня таймер на секунду стоял по глобальному сбросу. Теперь загрузчик работает, но появилась вторая проблема - после попытки загрузить рабочую конфигурацию, плисина тут же перезагружается опять в загрузчик. Рабочий код не содержит ALT_REMOTE, то есть это уже не проблема WDT. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 15 июня, 2016 Опубликовано 15 июня, 2016 · Жалоба Теперь загрузчик работает, но появилась вторая проблема - после попытки загрузить рабочую конфигурацию, плисина тут же перезагружается опять в загрузчик. Рабочий код не содержит ALT_REMOTE, то есть это уже не проблема WDT. Каким образом в данном случае сбрасывается WDT при переходе в Application? Ядро Remote Update должно присутствовать в обоих проектах (и в Factory и в Application). Factory при переходе в Application должен стартануть WDT, а Application его сбрасывает (периодически). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rolin 0 15 июня, 2016 Опубликовано 15 июня, 2016 (изменено) · Жалоба Ядро Remote Update должно присутствовать в обоих проектах (и в Factory и в Application). Factory при переходе в Application должен стартануть WDT, а Application его сбрасывает (периодически). Тут я с вами пожалуй не соглашусь. Зачем мне в рабочей прошивке Remote_Update, если я не планирую переконфигурироваться из нее ? Еще в загрузчике я отключаю WDT чтоб не мешал, а после переконфигурации так и вовсе режим Remote не представлен. Есть рабочий проект, с которого я черпаю вдохновение, правда он под циклон 3, а у меня 4. Так там рабочие прошивки самые обычные, Active serial - Standart. Вот код инициализации в загрузчике // 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) ); Изменено 15 июня, 2016 пользователем rolin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 15 июня, 2016 Опубликовано 15 июня, 2016 · Жалоба Тут я с вами пожалуй не соглашусь. Зачем мне в рабочей прошивке Remote_Update, если я не планирую переконфигурироваться из нее ? Еще в загрузчике я отключаю WDT чтоб не мешал, а после переконфигурации так и вовсе режим Remote не представлен. Да, наверное можно и так. Теперь загрузчик работает, но появилась вторая проблема - после попытки загрузить рабочую конфигурацию, плисина тут же перезагружается опять в загрузчик. Рабочий код не содержит ALT_REMOTE, то есть это уже не проблема WDT. Ну и что за причина перезагрузки? Судя по всему, должна быть "CRC Error". Уверены, что с адресами ничего не напутали, каким образом происходит загрузка образа Application в конфигурационную флэшку? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rolin 0 15 июня, 2016 Опубликовано 15 июня, 2016 · Жалоба Ну и что за причина перезагрузки? Судя по всему, должна быть "CRC Error". Трудно сказать, код, что выше эту ошибку не выдает. Согласно коду выше, если бы Remote выдал бы эту ошибку, то процесс не пошел бы дальше и до переконфигурации не дошел. Причем ошибку не выдает даже когда я намеренно неправильно готовлю образ флешки. Непонятно, на каком этапе происходит проверка CRC фактически, но проверка этого флага в коде происходит после установки адреса и перед командой реконфиггурации. Как-то странно это. Прошивку для флешки делаю так Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 15 июня, 2016 Опубликовано 15 июня, 2016 · Жалоба Трудно сказать, код, что выше эту ошибку не выдает. Согласно коду выше, если бы Remote выдал бы эту ошибку, то процесс не пошел бы дальше и до переконфигурации не дошел. Проверяйте источник реконфигурации и всё станет ясно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться