реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Чтение CRC внутри ПЛИС
Вовка_Бызов
сообщение Jan 15 2013, 13:34
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 26-11-07
Из: Москва, Зеленоград
Пользователь №: 32 692



По требованию заказчика включили мы циклическую проверку целостности в нашем Cyclone III.
Но вопрос завис - заказчик хочет в качестве одного из регистров (ПЛИС подключена к процессору) иметь вот эту самую CRC, которую ему посчитал компилятор - в качестве контроля за версией. Вариант типа "а мы вам прошьем ту CRC, которую выдаст компилятор" ему не подходит.

В общем - не подскажет ли всемогущий Олл, как прочитать внутри проекта Cyclone III в реальном времени ее реальную CRC?

PS. В доках нашли возможность чтения оной через JTAG - это, увы, не подходит.
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 15 2013, 18:46
Сообщение #2


Гуру
******

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



Цитата(Вовка_Бызов @ Jan 15 2013, 17:34) *
PS. В доках нашли возможность чтения оной через JTAG - это, увы, не подходит.


Что приходит в голову - завести JTAG на I/O пины этой же ПЛИС, и написать автомат, читающий CRC из самой себя с использованием команд JTAG. Вроде как других вариантов особо и не наблюдается.
Go to the top of the page
 
+Quote Post
ASN
сообщение Jan 15 2013, 19:04
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326



Вовка_Бызов
Не совсем понятно.
Поскольку Cyclone III fpga, то её кто-то грузит из ПЗУ.
Почему нельзя посчитать код контроля целостности по массиву, который грузится.
Если массив исказится, то fpga просто не загрузится.
А факт успешной загрузки можно определить по чтению уникального кода.
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 15 2013, 19:24
Сообщение #4


Гуру
******

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



Цитата(ASN @ Jan 15 2013, 23:04) *
то её кто-то грузит из ПЗУ.

Ну все таки обычно это делает она сама из подключенной к ней ПЗУ, ну либо ПЗУ ее грузит собственными силами (active или passive)

кстати, как вариант, после загрузки, она может еще раз вычитать содержимое ПЗУ и посчитать CRC. Уже не своим загрузочным автоматом, а специально сделанным автоматом.

Не ясно вот что - если CRC не сошлось, то ПЛИС не загрузится вообще, и не сможет никому сообщить, какая CRC у ее испорченной конфигурации sm.gif
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 16 2013, 06:54
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



а загрузка в каком режиме? если в пассивном (проц шьет) - то он сам версию прошивки знает. если в активном, то как уже предлагали, прочитать ПЗУ в user-mode и посчитать CRC. контроль целостности по CRC циклон сам умеет делать, есть спец. нога, которая об ошибке сигнализирует
Go to the top of the page
 
+Quote Post
Вовка_Бызов
сообщение Jan 16 2013, 07:03
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 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 у ее испорченной конфигурации sm.gif

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

Цитата(vadimuzzz @ Jan 16 2013, 10:54) *
контроль целостности по CRC циклон сам умеет делать, есть спец. нога, которая об ошибке сигнализирует

Вопрос не в контроле целостности, а в контроле версии прошивки. Т.е. CRC практичеки определяет то, что в ПЛИС загружена легальная прошивка, соответствующая действующему ТУ, а не самопальная подделка. Грубо говоря.

Контроль же целостности, как вы тут верно заметили, делает сама ПЛИС и выдает из себя соответствующие сигналы - тут все понятно.
Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 16 2013, 08:39
Сообщение #7


Adept
******

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



QUOTE (Вовка_Бызов @ Jan 16 2013, 14:03) *
Вопрос не в контроле целостности, а в контроле версии прошивки. Т.е. CRC практичеки определяет то, что в ПЛИС загружена легальная прошивка, соответствующая действующему ТУ, а не самопальная подделка. Грубо говоря.

Контроль же целостности, как вы тут верно заметили, делает сама ПЛИС и выдает из себя соответствующие сигналы - тут все понятно.

Тогда почему бы просто не записывать в прошивку номер ревизии (и другие данные - хоть дату релиза), который будет виден процом по шине? Зачем для этого CRC мутить (CRC всё-таки несколько для другого предназначен)?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
jks
сообщение Jan 16 2013, 10:05
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Вовка_Бызов
сообщение Jan 16 2013, 10:14
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 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 - но это уже мелочи

Спасибо!
Go to the top of the page
 
+Quote Post
Вовка_Бызов
сообщение Jan 17 2013, 06:35
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 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 - бит завершения цикла проверки

Нету ни слова об исходной контрольной сумме. Увы sad.gif

Задал вопрос на форуме альтеры. Но - по опыту - спецы там не отвечают. Даже не знаю, кого спрашивать... sad.gif
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 17 2013, 07:11
Сообщение #11


Гуру
******

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



Цитата(Вовка_Бызов @ Jan 17 2013, 10:35) *
Нету ни слова об исходной контрольной сумме. Увы sad.gif


где ни слова нет? В документе - вроде есть.

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.

Go to the top of the page
 
+Quote Post
Вовка_Бызов
сообщение Jan 17 2013, 07:54
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 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. По крайней мере - я так понял этот текст.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jan 17 2013, 09:14
Сообщение #13


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Я эти слова прочёл как то, что в regout выдаётся образцовая либо вычисленная CRC (а не образцовая XOR вычисленная) в зависимости от ножки ldsrc (которая работает как адрес регистра на этом последовательном интерфейсе).


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Вовка_Бызов
сообщение Jan 17 2013, 10:20
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 26-11-07
Из: Москва, Зеленоград
Пользователь №: 32 692



Цитата(ReAl @ Jan 17 2013, 13:14) *
Я эти слова прочёл как то, что в regout выдаётся образцовая либо вычисленная CRC (а не образцовая XOR вычисленная) в зависимости от ножки ldsrc (которая работает как адрес регистра на этом последовательном интерфейсе).

Хм.. Возможно. Надо попробовать.

А опыт использования этого атома есть у кого-то? Меня в данном случае интересует: введение этого атома как-то повлияет на работу схемы контроля в целом? В частности - там есть выход сигнала ошибки - я его теперь ручками должен прописать туда, куда он шел по умолчанию? А еще в описании (файл .inc) атома есть упоминание о поле divider - его тоже как-то надо переуказать (я его в настройках проекта указал). И вообще - как сочетаются глобальные настройки проекта с использованием атома?

В общем - у меня есть смутное ощущение, что явное введение этого атома требует с моей стороны каких-то корректных действий. Каких (кроме подсоединения вывода) - вот в чем вопрос...
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 18 2013, 09:34
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 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?
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01488 секунд с 7
ELECTRONIX ©2004-2016