|
|
  |
Присвоение ID ПЛИС'е, Как бы проще сделать? |
|
|
|
Aug 25 2009, 07:15
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 28-11-05
Из: Москва
Пользователь №: 11 510

|
Добрый день! Есть ли у кого опыт решения задачки присвоения ID номера микросхеме? Хочется сделать это не меняя какую-либо константу в программе, а просто прошивочным (программаторским) методом, минуя "залезания" в код. Ведь рано или поздно запустится серия и так хочется делать всё быстро и проще! Нет никаких идей, а? Заранее благодарен за возможные пути решения задачки! Используем Cyclone II и Quartus II.
Сообщение отредактировал Moks - Aug 25 2009, 07:16
|
|
|
|
|
Aug 25 2009, 07:49
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 28-11-05
Из: Москва
Пользователь №: 11 510

|
Цитата(AJIEKCEu @ Aug 25 2009, 11:36)  Но прошивка константы в ПЛИС - тоже интересно. Вот и мне интересно, читаю, пытаюсь понять пути решения задачки! Цитата(DmitryR @ Aug 25 2009, 11:30)  Впаять рядом DS28CM00. В каждой микрухе - свой код, интерфейс I2C, корпус микроскопический. Или переходить на Spartan-3A - там ID зашит в самой ПЛИС. Спасибо, но пока что переход на Xilinx не рассматриваем! Цитата(DmitryR @ Aug 25 2009, 11:30)  Впаять рядом DS28CM00. В каждой микрухе - свой код, интерфейс I2C, корпус микроскопический. Или переходить на Spartan-3A - там ID зашит в самой ПЛИС. Да, но тогда надо и DS28CM00 программировать отдельно ... А это ещё одна операция ...
|
|
|
|
|
Aug 25 2009, 07:54
|
Местный
  
Группа: Свой
Сообщений: 314
Регистрация: 7-12-05
Пользователь №: 11 917

|
Цитата(Moks @ Aug 25 2009, 11:49)  Да, но тогда надо и DS28CM00 программировать отдельно ... А это ещё одна операция ... Насколько я понимаю, там уже прошит некий уникальный номер и его нельзя изменить. Если вы хотите иметь "СВОИ" номера, то надо вести базу соответствия: некий уникальный номер не по порядку <> свой красивый номер
|
|
|
|
|
Aug 25 2009, 08:08
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 28-11-05
Из: Москва
Пользователь №: 11 510

|
Задача-то состоит в том, что все устройства объединены в систему, у них каждый свой ID (читай "адрес") ... И вот уж больно хочется его быстро прошивать ... (Пускай хоть с участием д. Васи с журнальчиком, в который он записывает что и куда программировал)  ) Предложенные вами микросхемы, как мне кажется, не особо подходят под данную задачку ...
Сообщение отредактировал Moks - Aug 25 2009, 08:08
|
|
|
|
|
Aug 25 2009, 08:13
|
Местный
  
Группа: Свой
Сообщений: 314
Регистрация: 7-12-05
Пользователь №: 11 917

|
Цитата(Moks @ Aug 25 2009, 12:08)  Задача-то состоит в том, что все устройства объединены в систему, у них каждый свой ID (читай "адрес") ... И вот уж больно хочется его быстро прошивать ... (Пускай хоть с участием д. Васи с журнальчиком, в который он записывает что и куда программировал)  ) Предложенные вами микросхемы, как мне кажется, не особо подходят под данную задачку ... Если ваш ID - изначально задан внешними условиями - то да - микросхемы не подходят. Но если сам ID не важен, а важна его уникальность - то микросхемы вариант. Ну как например MAC-адрес у сетевой карты.
|
|
|
|
|
Aug 25 2009, 09:01
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 28-11-05
Из: Москва
Пользователь №: 11 510

|
Цитата(SM @ Aug 25 2009, 12:27)  А откуда грузится ПЛИСка? Вариант - сделать блок ОЗУ, где хранится этот код, ну и расхачить формат SOF-файла в части поиска тех бит, куда попадет этот код (из данных инициализации ОЗУ, а так же CRC этого блока. После чего патчить SOF-ник. ПЛИС будет точно грузиться с EPCS4 ... Вот и мне надо сделать так, чтобы конфигурационная программа уже имела номер ID. Но чтоб этот номер присваивался не залезанием в VHDL код (мы на нём пишем), а гораздо проще ... Чтоб любой дядя Вася/Петя или тётя Клава/Марфа могли быстренько присвоить номер ...
|
|
|
|
|
Aug 25 2009, 09:48
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 28-11-05
Из: Москва
Пользователь №: 11 510

|
Примерно понятно, спасибо. Значит, без дополнительных операций не обойтись никак ...
|
|
|
|
|
Aug 25 2009, 11:47
|
Местный
  
Группа: Свой
Сообщений: 314
Регистрация: 7-12-05
Пользователь №: 11 917

|
Цитата(SM @ Aug 25 2009, 12:40)  Неудачный пример. MAC-адреса имеют стандартизованный формат, и каждому вендору выделяется вполне определенный диапазон. Ну именно в этой части - да некорректный пример. Но в то же время, определенный диапазон вендору выделяется только для того, чтобы не следить за уникальностью адреса во всем мире. Вендору выделили диапазон - он сам внутри своего диапазона гарантирует уникальность. А по большому счету никакой дополнительной нагрузки не несет  Если все маки в мире перемешать, сохранив уникальность, все останется работать  А после битового потока записать ID в EPCS4? Слегка похимичить с тем, чтобы после загрузки ПЛИСа её из ПЛИСа же читать можно было....
|
|
|
|
|
Aug 25 2009, 17:01
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Э народ вы че, какие нафиг ПЗУ для идентификатора прошивки/плиса?  Все делается элементарно - пишется TCL-скрипт, который автоматически запускается при каждой компиляции первым (до начала анализа/синтеза), который генерит например верилоговский файлик с константой (индекс, дата, что угодно хотите), а он уже подцеплен к проекту. В итоге - имеем четкое разделение одной прошивки от другой, регистр (или даже целый банк памяти) с идентификатором не только ПЛИСки, но и еще кучей другой информации... И никаких ниосов, внешних флэшек и тому подобного  Пример есть у Альтеры - http://www.altera.com/support/examples/tcl...s=tcl%20version
|
|
|
|
|
Aug 25 2009, 17:43
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(spectr @ Aug 25 2009, 21:01)  Э народ вы че, какие нафиг ПЗУ для идентификатора прошивки/плиса?  Все делается элементарно - пишется TCL-скрипт, который автоматически запускается при каждой компиляции первым Эт Вы чего??? Какие нафиг компиляции на производстве? Для каждого экземпляра пустить синтез, да еще и производственникам все исходники дать, и квартус полный поставить? Должно быть подключил, нажал кнопку, десяток секунд, все прошито, следующий...
|
|
|
|
|
Aug 25 2009, 20:11
|

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

|
Цитата(sazh @ Aug 25 2009, 22:05)  Может я чего не догоняю. Но припой как таковой в перечень элементов не внесешь. В перечень элементов не надо. Надо в спецификацию в раздел "материалы". Кстати, если проволочные перемычки "на ходу" монтажником делаются, а не на подготовительном участке (или если на подготовительном, но влом на них чертёж делать) - то тоже туда же грубо "проволока медная лужёная такая-то - 15мм"И на сборочный чертёж в примечания - "перемычки такие-то соеднить припоем таким-то согласно инструкции такой-то". Но я бы в sof полез бы - в ROM-блок или в саму epcs-ку после прошивки, как тут предлагали.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Aug 26 2009, 04:24
|

Знающий
   
Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402

|
Цитата Только мне кажется джамперами задавать ID не комильфо. Не технологично как-то. Эта Вам не технологично и это, как Вы сказали то... не комильфо А если ситуация такова, что этап присвоения этого ID проходит через дядю или тётю с соответствующей квалификацией, то такой метод ещё и фору даст всем внешним ППЗУ и EPCS-контроллерам. Работа с реальными эксплуатационщиками не раз разработчиков "спускала на землю".
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
|
Aug 26 2009, 07:40
|
Местный
  
Группа: Свой
Сообщений: 314
Регистрация: 7-12-05
Пользователь №: 11 917

|
Цитата(Евгений Николаев @ Aug 26 2009, 08:24)  А если ситуация такова, что этап присвоения этого ID проходит через дядю или тётю с соответствующей квалификацией, то такой метод ещё и фору даст всем внешним ППЗУ и EPCS-контроллерам. Работа с реальными эксплуатационщиками не раз разработчиков "спускала на землю". Это вы зря. Человеческий фактор надо исключать. А потом, если устройств предполагается 64К? 16 перемычек? А если больше? И потом, эксплуатационщики и производители - разные понятия. Самое нормальное - в конец прошивки флешки добавлять. Вся сложность - в ПЛИСе поддержать вычитывание ID.
|
|
|
|
|
Aug 26 2009, 08:35
|
Профессионал
    
Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770

|
Цитата(AJIEKCEu @ Aug 26 2009, 11:40)  А потом, если устройств предполагается 64К? Если так, то бить следует того, кто при такой партии решил отдать распределение номеров на откуп тете Клаве. Цитата(SM @ Aug 26 2009, 12:25)  А вот добавление в конец прошивки чего-то в .pof-файл это хакерская работка еще та. И все потому, что там есть CRC.
|
|
|
|
|
Aug 26 2009, 09:32
|
Профессионал
    
Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942

|
Цитата(DmitryR @ Aug 26 2009, 12:35)  Если так, то бить следует того, кто при такой партии решил отдать распределение номеров на откуп тете Клаве. Если партия небольшая в пару десятков, то можно и прошивок понастроить. А если она больше, то точно что-то напутают. Согласен с AJIEKCEu. «А если ситуация такова, что этап присвоения этого ID проходит через дядю или тётю с соответствующей квалификацией..» То это нетехнологичное некомильфо, Евгений Николаев. И пайка только усугубит. Считаю, что лучше постараться реализовать самому, как попытался автор темы, и не перекладывать на монтажника или еще какую-нибудь «бабусю». «Работа с реальными эксплуатационщиками не раз разработчиков "спускала на землю"». Работали, знаем.  Провода путают местами. А вы говорите, номера паяльником.
|
|
|
|
|
Sep 23 2010, 02:23
|
Знающий
   
Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410

|
Цитата(XVR @ Sep 22 2010, 23:58)  Покапаюсь в битстриме Кстати, а почему бы просто не сгенерить новый битстрим с нужным ID? Это делается запуском bitgen с командной строки, т.е. сие действо можно автоматизировать скриптом. ISE конечно должен на машине стоять (хотя бы огрызок его), но запускать GUI совсем необязательно Меня интересовало не как генерить, а как его в битстриме найти. Как генерить я знаю. Ситуация такая: есть две платы (точнее две генерации одной платы), плис на них стоит одна и та же. Но окружение (синтезаторы, ддс, периферия разная) другое, ноги другие используются. Прошивки посылаются заказчику эл.почтой и заливаются в пзу через RS422. И вот сейчас у них оказались в руках обе платы одновременно. Заказчик раздолбай редкостный и чую, что начнут путать прошивки и писать нам что мы всякую лажу делаем. Вот и хотелось бы зашить в битстрим какой-то признак, идентифицирующий прошивку. А микроблейз, который живет в плис и принимает прошивку по RS422, мог бы это несоответствие обнаружить. USERID для этого очень хорошо подходит. Цитата(XVR @ Sep 22 2010, 23:58)  Покопал битстрим. Похоже USERID записан внутри конфигурационного фрейма (в виде 2х половин по 16 бит и сдвинутый на 1 бит влево). Проблема в том, что позиция в файле видимо будет зависеть от прошивки и совершенно точно при изменении USERID меняется CRC фрейма, который тоже записан в битстриме  Интересно. Я честно говоря тупо запустил поиск по целому USERID и не нашел. Поделитесь пожалуйста своими находками.
|
|
|
|
|
Sep 23 2010, 04:51
|
Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 16-02-07
Из: Долгопрудный
Пользователь №: 25 406

|
Цитата(SM @ Aug 26 2009, 12:40)  Да не только потому. CRC фигня, а вот что-то добавить дополнительное, не зная формата... Это еще та задача. Если CRC фигня, то можно закрепить ROM-lutы на конкретных местах (и оставить их там навсегда), сделать пару прошивок с разными значениями этих ROMов, чтобы найти, где они сидят в потоке и дальше дело техники, если вы знаете как посчитать CRC. Типа реверсинжиниринг  P.S. Но если предстоят обновления загрузок я бы так делать точно не стал  Лучше поставить что-то снаружи для хранения ID.
Сообщение отредактировал Gothard - Sep 23 2010, 04:55
|
|
|
|
|
Sep 23 2010, 06:39
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(disel @ Sep 23 2010, 06:23)  Интересно. Я честно говоря тупо запустил поиск по целому USERID и не нашел. Поделитесь пожалуйста своими находками. Сгенерил 2 прошивки с ID 000000 и FFFFFFFF и сравнил (побайтно) Код C:\home\roman\cnc\fpga_v3_servo>fc /b top.bin.fffff top.bin Сравнение файлов top.bin.fffff и TOP.BIN 00032E39: 00 01 00032E3A: 00 FF 00032E3B: 00 FE 00032FBD: 00 01 00032FBE: 00 FF 00032FBF: 00 FE 000452BA: 13 B1 000452BB: 8C 5F Как видим ID лежит 2 частями по адресам 32E39 (3 байта) и 32FBD (3 байта) Возможно еще были переставленны биты. CRC лежит с 452BA (2 байта) Увы, для другой прошивки адреса могут уехать Цитата Вот и хотелось бы зашить в битстрим какой-то признак, идентифицирующий прошивку. А микроблейз, который живет в плис и принимает прошивку по RS422, мог бы это несоответствие обнаружить. Сделайте у прошивки свой заголовок (с ID), при заливке проверяйте его и выбрасывайте (во FLASH его писать не надо) Да даже можно и записать, FPGA его проигнорирует (главное, что бы в нем не нашлось синхронизирующее слово  )
|
|
|
|
|
Sep 24 2010, 02:29
|
Знающий
   
Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410

|
Цитата(XVR @ Sep 23 2010, 10:39)  Как видим ID лежит 2 частями по адресам 32E39 (3 байта) и 32FBD (3 байта) Возможно еще были переставленны биты. CRC лежит с 452BA (2 байта) Увы, для другой прошивки адреса могут уехать Спасибо. Интересно, положение в битстриме для одного типа микросхем постоянно или нет? Сегодня поэкспериментирую. Цитата(XVR @ Sep 23 2010, 10:39)  Сделайте у прошивки свой заголовок (с ID), при заливке проверяйте его и выбрасывайте (во FLASH его писать не надо) Да даже можно и записать, FPGA его проигнорирует (главное, что бы в нем не нашлось синхронизирующее слово  ) Такая мысль была сразу, но это надо не забыть запустить скрипт, которые припишет заголовок. А это человеческий фактор, могу ведь и забыть при очередной генерации прошивки. А с USERID все автоматически.
|
|
|
|
|
Sep 24 2010, 02:40
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(disel @ Sep 23 2010, 20:29)  Такая мысль была сразу, но это надо не забыть запустить скрипт, которые припишет заголовок. А это человеческий фактор, могу ведь и забыть при очередной генерации прошивки. А с USERID все автоматически. а set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:assign_id.tcl" не катит? или set_global_assignment -name POST_FLOW_SCRIPT_FILE "quartus_sh:assign_id.tcl" не катит?
--------------------
|
|
|
|
|
Sep 24 2010, 04:54
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(disel @ Sep 24 2010, 06:29)  Спасибо. Интересно, положение в битстриме для одного типа микросхем постоянно или нет? Сегодня поэкспериментирую. Декодировал битстрим. ID лежит внутри фрейма (ISE сгенерил один большой фрейм). Уверен, что положение внутри одного отдельного фрейма (а не внутри той пачки, которая записана в битстриме) будет постоянна (и адрес фрейма будет фиксирован). Но вот положение внутри самого образа битстрима точно будет плавать Цитата Такая мысль была сразу, но это надо не забыть запустить скрипт, которые припишет заголовок. А это человеческий фактор, могу ведь и забыть при очередной генерации прошивки. А с USERID все автоматически. Скрипт тоже можно запускать автоматически
|
|
|
|
|
Sep 24 2010, 05:08
|
Знающий
   
Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410

|
Цитата(des00 @ Sep 24 2010, 06:40)  а set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:assign_id.tcl" не катит? или set_global_assignment -name POST_FLOW_SCRIPT_FILE "quartus_sh:assign_id.tcl" не катит? Так то квартус, я про ксалникс. Как автоматически запустить скрипт для ISE я не смог разобраться. Цитата(XVR @ Sep 24 2010, 08:54)  Декодировал битстрим. ID лежит внутри фрейма (ISE сгенерил один большой фрейм). Уверен, что положение внутри одного отдельного фрейма (а не внутри той пачки, которая записана в битстриме) будет постоянна (и адрес фрейма будет фиксирован). Но вот положение внутри самого образа битстрима точно будет плавать Жалко что положение не постоянно. Цитата(XVR @ Sep 24 2010, 08:54)  Скрипт тоже можно запускать автоматически А как?
|
|
|
|
|
Sep 24 2010, 13:43
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Народ, смотрите что нашел - описание POF-формата (народ с альтерафорумс расковырял). Также есть оч интересный сайт, на котором есть софтина PLDTool. Но они ее не дают скачать ))))) Вот еще несколько расковырянных форматов
Сообщение отредактировал spectr - Sep 24 2010, 13:48
|
|
|
|
|
Sep 24 2010, 18:41
|
не указал(а) ничего о себе.
     
Группа: Свой
Сообщений: 3 325
Регистрация: 6-04-06
Пользователь №: 15 887

|
По повдоу основного вопроса топика можно сказать, что в действительности возникает задача назначения ID не ПЛИС-е, а устройству. В общем случае в устройстве может и не быть ПЛИС. Поэтому в свое время мы разработали некую стандартную карту памяти для всех наших изделий, и заполняем ее нужными числами. А потом засовываем в какую-нибудь память из имеющихся на борту. Иногда это EPROM с интерфейсом IIC, иногда защищенный сектор во Flash, ну и т.п. Расоположение и доступ со стороны программы описывается в документации. А прошивку ПЛИС, имхо, нужно стремиться сохранять постоянной, а не компилировать ее при каждом изменении циферки в серийном номере. Кто его знает, как там карты лягут...
|
|
|
|
|
Sep 28 2010, 21:32
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(spectr @ Sep 24 2010, 16:43)  Народ, смотрите что нашел - описание POF-формата (народ с альтерафорумс расковырял). Также есть оч интересный сайт, на котором есть софтина PLDTool. Но они ее не дают скачать ))))) Вот еще несколько расковырянных форматовОч. кстати! Спасибо spectr! Действительно все сходится, но не нашел в описании tag=11 хотя в моем *.POf он есть и он самый длинный, кажется это и есть битстрим. И еще нашел интересность : ...CRC...If this CRC value is zero, the CRC check should be ignored. Я так понимаю что если обнулить СRC (лень считать) то с файлом можно делать что угодно, главное tags не нарушать.  P.S. Ой сори, это я затормозил, 11H т.е. tag=17. Все на месте!  Кстати а может ли сама плисина прочитать свой USERCODE?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|