|
Чтение CRC внутри ПЛИС |
|
|
|
Jan 15 2013, 19:24
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(ASN @ Jan 15 2013, 23:04)  то её кто-то грузит из ПЗУ. Ну все таки обычно это делает она сама из подключенной к ней ПЗУ, ну либо ПЗУ ее грузит собственными силами (active или passive) кстати, как вариант, после загрузки, она может еще раз вычитать содержимое ПЗУ и посчитать CRC. Уже не своим загрузочным автоматом, а специально сделанным автоматом. Не ясно вот что - если CRC не сошлось, то ПЛИС не загрузится вообще, и не сможет никому сообщить, какая CRC у ее испорченной конфигурации
|
|
|
|
|
Jan 16 2013, 07:03
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 26-11-07
Из: Москва, Зеленоград
Пользователь №: 32 692

|
Цитата(SM @ Jan 15 2013, 22:46)  Что приходит в голову - завести JTAG на I/O пины этой же ПЛИС, и написать автомат, читающий CRC из самой себя с использованием команд JTAG. Вроде как других вариантов особо и не наблюдается. Как-то уж больно через "левое ухо правой рукой"... А на счет "других вариантов" - на сколько достоверный ответ? С позиции знания - или с позиции предположения? Цитата(ASN @ Jan 15 2013, 23:04)  Почему нельзя посчитать код контроля целостности по массиву, который грузится. Можно - кто ж спорит. Но - это почти то же, что и читать свою CRC из себя же через свой JTAG. Цитата(ASN @ Jan 15 2013, 23:04)  А факт успешной загрузки можно определить по чтению уникального кода. Факт успешной хагрузки определяется по соответствующим внешним сигналам. Если ПЛИС загрузилась "неуспешно" - то она и не уйдет в User Mode. Цитата(SM @ Jan 15 2013, 23:24)  Не ясно вот что - если CRC не сошлось, то ПЛИС не загрузится вообще, и не сможет никому сообщить, какая CRC у ее испорченной конфигурации  Ну - на этот вопрос отвечает документация - по наличию ошибки/отсутствию сигналов подтверждения загрузки делать вывод о дальнейших действиях. Кто до упора пытается в цикле перезагрузить ПЛИС, а кто - тупо свистит в какой-нить свисток вышестоящему "начальству". Но - это уже вопрос скорее системный, а не прикладной. Цитата(vadimuzzz @ Jan 16 2013, 10:54)  контроль целостности по CRC циклон сам умеет делать, есть спец. нога, которая об ошибке сигнализирует Вопрос не в контроле целостности, а в контроле версии прошивки. Т.е. CRC практичеки определяет то, что в ПЛИС загружена легальная прошивка, соответствующая действующему ТУ, а не самопальная подделка. Грубо говоря. Контроль же целостности, как вы тут верно заметили, делает сама ПЛИС и выдает из себя соответствующие сигналы - тут все понятно.
|
|
|
|
|
Jan 16 2013, 08:39
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
QUOTE (Вовка_Бызов @ Jan 16 2013, 14:03)  Вопрос не в контроле целостности, а в контроле версии прошивки. Т.е. CRC практичеки определяет то, что в ПЛИС загружена легальная прошивка, соответствующая действующему ТУ, а не самопальная подделка. Грубо говоря.
Контроль же целостности, как вы тут верно заметили, делает сама ПЛИС и выдает из себя соответствующие сигналы - тут все понятно. Тогда почему бы просто не записывать в прошивку номер ревизии (и другие данные - хоть дату релиза), который будет виден процом по шине? Зачем для этого CRC мутить (CRC всё-таки несколько для другого предназначен)?
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Jan 16 2013, 10:05
|
Местный
  
Группа: Свой
Сообщений: 249
Регистрация: 3-04-11
Из: .
Пользователь №: 64 084

|
может быть такая конструкция на Verilog поможет ... cyclone_crcblock crc_block( .clk(sys_clk), .ldsrc(), .shiftnld(), .crcerror(), .regout() ); и в настройках проекта включить Enable Error detection CRC тут все подробно описано http://www.altera.com/literature/hb/cyc3/cyc3_ciii51013.pdf
|
|
|
|
|
Jan 16 2013, 10:14
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 26-11-07
Из: Москва, Зеленоград
Пользователь №: 32 692

|
Цитата(jks @ Jan 16 2013, 14:05)  может быть такая конструкция на Verilog поможет ... cyclone_crcblock crc_block(.clk(sys_clk),.ldsrc(),.shiftnld(),.crcerror(),.regout()); и в настройках проекта включить Enable Error detection CRC тут все подробно описано http://www.altera.com/literature/hb/cyc3/cyc3_ciii51013.pdf О! (низко кланяясь и одновременно вчитываясь в указанный документ) Правда, нужен VHDL - но это уже мелочи Спасибо!
|
|
|
|
|
Jan 17 2013, 06:35
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 26-11-07
Из: Москва, Зеленоград
Пользователь №: 32 692

|
Цитата(jks @ Jan 16 2013, 14:05)  может быть такая конструкция на Verilog поможет cyclone_crcblock crc_block( .clk(sys_clk), .ldsrc(), .shiftnld(), .crcerror(), .regout() ); Тупею.. Три выходных сигнала: crcerror - бит несовпадения CRC после подсчета regout - бит (!) с выхода сдвигового 32-разрядного регистра ошибки(!) cyclecomplete - бит завершения цикла проверки Нету ни слова об исходной контрольной сумме. Увы  Задал вопрос на форуме альтеры. Но - по опыту - спецы там не отвечают. Даже не знаю, кого спрашивать...
|
|
|
|
|
Jan 17 2013, 07:54
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 26-11-07
Из: Москва, Зеленоград
Пользователь №: 32 692

|
Цитата(SM @ Jan 17 2013, 11:11)  где ни слова нет? В документе - вроде есть.
This signal is an input into the error detection block. If shiftnld=1, the data is shifted from the internal shift register to the regout at each rising edge of clk. If shiftnld=0, the shift register parallel loads either the pre-calculated CRC value or the update register contents depending on the ldsrc port input. This port is required. Нет ни слова о возможности достать эту pre-calculated CRC. Сама же эта CRC безусловно в документе упоминается - и не раз. Опять же - указанное вами поле управляет процессом сравнения. Т.е. если 0 - то загружается (внутри атома) для сравнения pre-calculated CRC и происходит побитное сравнение с высчитанной CRC. Результат сравнения "выдавливается" в regout. По крайней мере - я так понял этот текст.
|
|
|
|
|
Jan 17 2013, 10:20
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 26-11-07
Из: Москва, Зеленоград
Пользователь №: 32 692

|
Цитата(ReAl @ Jan 17 2013, 13:14)  Я эти слова прочёл как то, что в regout выдаётся образцовая либо вычисленная CRC (а не образцовая XOR вычисленная) в зависимости от ножки ldsrc (которая работает как адрес регистра на этом последовательном интерфейсе). Хм.. Возможно. Надо попробовать. А опыт использования этого атома есть у кого-то? Меня в данном случае интересует: введение этого атома как-то повлияет на работу схемы контроля в целом? В частности - там есть выход сигнала ошибки - я его теперь ручками должен прописать туда, куда он шел по умолчанию? А еще в описании (файл .inc) атома есть упоминание о поле divider - его тоже как-то надо переуказать (я его в настройках проекта указал). И вообще - как сочетаются глобальные настройки проекта с использованием атома? В общем - у меня есть смутное ощущение, что явное введение этого атома требует с моей стороны каких-то корректных действий. Каких (кроме подсоединения вывода) - вот в чем вопрос...
|
|
|
|
|
Jan 18 2013, 09:34
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(Вовка_Бызов @ Jan 17 2013, 11:54)  Нет ни слова о возможности достать эту pre-calculated CRC. Перевожу: If shiftnld=1, the data is shifted from the internal shift register to the regout at each rising edge of clk. If shiftnld=0, the shift register parallel loads either the pre-calculated CRC value or the update register contents depending on the ldsrc port input Если shiftnld=1, то данные сдвигаются во внутреннем регистре сдвига с выводом их на regout на каждом положительном фронте clk. Если shiftnld=0, то этот внутренний регистр сдвига производит параллельную загрузку либо рассчитанной CRC, либо значение из <апдейт-регистра> (я не знаю, что это), в зависимости от значения на входе "ldsrc". Чем вас не устраивает загрузить в регистр сдвига эту CRC, а после вычитать ее последовательно с regout?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|