|
Проэкт не работает в чипе..., В симуляции все ОК, в чипе не работает, может проблема с заданием ног |
|
|
|
Sep 5 2008, 12:59
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(XVR @ Sep 5 2008, 08:47)  Ой.  Не понял тайного смысла делать post-route симуляцию на Lattice, если железка на Xilinx'е  Или Lattice уже выкупил у Xilinx'а CPLD ветку и начал делать синтез для них?   не, все гораздо прозаичней...я на работе работаю с Lattice, т.е. все тулы их, ессно под реализацию в CPLD/FPGA Латтиса. Однако, один из бортов системы над которой сейчас работаю был заказан (еще до меня в данной фирме) у подрядчика, и те кто заказывали не дали четких требований к проэктировке (т.е. например бренд CPLD/FPGA, требования к конечной документации и т.д. и т.п.). Подрядчик завязан на Xilinx, посему и исползьзовал Xilinx. Мало того, они не работают со стандартными тулами производителя (ISE ежели в применении к CPLD/FPGA Xilinx либо других стандартных пакетов), Orcad/Altium/Mentor/... пакеты для schematic capture и т.д..... Они склепали свою какую-то аппликацию для schematic capture (достаточно уродскую, не стабильную и полную багов), к ней присобачили графический редактор логики который привязали к синтезатору и P&R Xilinxа (у них какое-то полу-левое сoглашение с Xilinx по этому поводу). Т.е. они не пишут код логики VHDL/Verilog а вместо этого все рисуют графикой. Посему иьх дизайн логики абсолютно не портируемый, привязан исключителчно к ихней аппликации, сорсов как таковых нет (ибо в графике которая сугубо proprietary ихней проге). Вот мне и досталасч эта головная боль в наследство (пришел в фирму за месяц-два до поставки тех бортов). Кучу проблем с их дизайном (отчасти по вине моей конторы которые не задали четких и исчерпывающих тех. заданий оставив широкое поле выбора понимания подрядчику). Вот и натолкулся на проблему их дизайна логики в CPLD Xilinxа который на борту. Т.е. у меня вся линейак тулов под Lattice (а инсталлировать не лицензионное на работе (в отличие от дома) - категорически исключено и не принято, по крайней мере в наших краях), пришлось "теорию" гонять под Латисе, а железо - то хто сидит на борту, т.е. Xilinx.. Цитата(sazh @ Sep 5 2008, 09:14)  Чистый functional наверно моделсимовский. Он оперирует процессами, к примитивам Латтисе не привязан и к Латтисе отношения не имеет. А чтобы привязаться к Латтисе, нужна имитация включения по питанию. У xilinx эту функцию выполняет GSR. Короче, смотрите структуру выбранного семейства (eeprom, sram), можно ли эту структуру в ноль инициализировать, читаете раздел как активизировать инициализацию регистров по включению питания в симуляторе. По ресурсам кристалла определяете, выбросил или нет синтезатор часть схемы, реализующую формирование внутреннего ресета (Ищите опцию в смнтезаторе типа игнорировать состояния регистров по power-up или нет. Если игнорировать, то и смысла в схеме формирования начальных состояний этих регистров нет, синтезатор вместо этой схемы константу подставит). Если все регистры по включению в ноль инициализируются без внешних сигналов и схема формирования внутреннего ресета в ресурсах присутствует, то и в железе рабоать будет. Functional показывал одинаково и в ModelSimе и в Active-HDLе (сейчас перехожу на Aldec). Да впрочем и весь post-route тоже пробовал и в Модельсиме и в Альдеке- оба показывали одинаково. В целом согласен с вашими советами. Хотя данная конкретная реализация CPLD предназначена только для данного Xilinx чипа (ибо новая версия ботра будет делаться мной в недалеком будущем), будет интересно и поухителчно попробовать разобраться в нюансах влияния технологий такого рода чипов на мой случай (и ему подобные). Свою версию борта буду делать на Lattice ессно. Кроме того, вспомнил что у меня на работе лежит evaluation board Lattice ECP2 FPGA - думаю прожечь сегодняшнюю реализацию в нем по посмотреть будет ли работать как в Xilinx CPLD... Но все-таки интересно услышать от пользователей Xilinxа - работает ли данный дизайн в post-route симуляции Xilinxа....я-бы дал свой сорс + test-bench....
|
|
|
|
|
Sep 5 2008, 20:17
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(XVR @ Sep 5 2008, 20:57)  Давай, попробую прогнать (если найдется время  ) Спасибо, буду признателен.. Дал source и простенкий test-bench. Проверьте пожалуйста как работает в чисто функциональной симуляции и port-route functional и post-route timing. Пожалуйста обратиие внимание на началчные временны интервалы (там reset по идее будет/не будет работать)..
|
|
|
|
|
Sep 6 2008, 11:25
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(XVR @ Sep 6 2008, 12:58)  Проверил (функционал и post-route), поведение идентичное Ага, отлично, спасибо. Значит можно сделать вывод что post-route симуляция видимо действительно отражает реальную технологию конкретного бренда/семейства, т.е. действительно такое решение не работало-бы наверно в CPLD Lattice, но работает в Xilinxе, т.е. CPLD от данных производителей отлихаются технологией (возможно у одного по power-up flip-flopы устанавливаются в '0', у другого - не гарантировано (либо наоборот - устанавливаются в '1'). Ьотя пока это домыслы. Почитаю datasheet на них - посмотрим. Закину так-же сей вопрос на support Латиса...
|
|
|
|
|
Sep 8 2008, 12:29
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(Саша Z @ Sep 6 2008, 14:25)  Ага, отлично, спасибо. Значит можно сделать вывод что post-route симуляция видимо действительно отражает реальную технологию конкретного бренда/семейства, т.е. действительно такое решение не работало-бы наверно в CPLD Lattice, но работает в Xilinxе, т.е. CPLD от данных производителей отлихаются технологией (возможно у одного по power-up flip-flopы устанавливаются в '0', у другого - не гарантировано (либо наоборот - устанавливаются в '1'). Ьотя пока это домыслы. Почитаю datasheet на них - посмотрим. Закину так-же сей вопрос на support Латиса... В догонку - буду баlaгодарен за помощь: дал два сорса, единственное отличие в том что во втором появился счетчик длительносит состояния forward автомата drive_state в целью идерживания состяния даже после окончания действия управляющих входов задающих данное состояние (input_state = "100"). Проблема в том что после добавления этого счетчика, автомат видимо стал работать не совсем как надо ибо то что вижу что сразу после окончания состояния revese есть прыжок в other, как и должно быть, но затем, без прихода соотв. упарвляющего входа - идет прыжок в forward и состояние удерживается счетчиком. После окончания счетчика - прыгает в other (как задано) затем уже согласно управляющему входу - прыгает в forward. Т.е. в кратце, после добавления счетчика fwrd_counter появился паразитный прыжок из reverse в forward и в other, т.е. прыжок в forward без нуажного на то управляющего входа. В первом сорсе нет данного счетчика и все работает ОК. Не мойму, как сей счетчик влияет на такое поведение автомата ? Дал так-же test-bench. Самое интересное, в functional simulation такое странное поведение (при наличие счетчика) не проявляется, но при прожиге в чип (Xilinx XCR3064) - то что происходит (отслеживал скопом). Может мне кто откроет глаза...
|
|
|
|
|
Sep 11 2008, 15:23
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(Саша Z @ Sep 8 2008, 15:29)  В догонку - буду баlaгодарен за помощь: дал два сорса, единственное отличие в том что во втором появился счетчик длительносит состояния forward автомата drive_state в целью идерживания состяния даже после окончания действия управляющих входов задающих данное состояние (input_state = "100"). Проблема в том что после добавления этого счетчика, автомат видимо стал работать не совсем как надо ибо то что вижу что сразу после окончания состояния revese есть прыжок в other, как и должно быть, но затем, без прихода соотв. упарвляющего входа - идет прыжок в forward и состояние удерживается счетчиком. После окончания счетчика - прыгает в other (как задано) затем уже согласно управляющему входу - прыгает в forward. Т.е. в кратце, после добавления счетчика fwrd_counter появился паразитный прыжок из reverse в forward и в other, т.е. прыжок в forward без нуажного на то управляющего входа. В первом сорсе нет данного счетчика и все работает ОК. Не мойму, как сей счетчик влияет на такое поведение автомата ? Дал так-же test-bench. Самое интересное, в functional simulation такое странное поведение (при наличие счетчика) не проявляется, но при прожиге в чип (Xilinx XCR3064) - то что происходит (отслеживал скопом). Может мне кто откроет глаза...  Все, всем спасибо, решено. Управлающие входа были проблематичны в железе - выдавали glitches вскоре после послезного сигнала. Подрубился ко входам logic analyzerом - тогда все стало понятно. Эти glitches и сводили с ума state machine в моем коде. Добавил в state machine еще одно состояние с маленьким счетчиком блокирующее glitchеs, переписал test bench с точным моделированием тайминга контролных входов включая glitchи, просимулировал - все ОК. Прожег в Xilinx - все встало на свои места, работает согласно симуляции. Всем спасибо за помощь и поддержание духа...
|
|
|
|
|
Sep 12 2008, 05:31
|
Бывалый
    
Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615

|
Цитата(Саша Z @ Sep 4 2008, 15:32)  Не пойму почему...то-ли такая реализация сильно привязана к технологии конкретного чипа/бренда (возможно в Xilinxовой CPLD работает, а в Latticeовской (под которую и симулировал) - не будет ?) Странно.... Старайтесь использовать родные примитивы и стараться все сводить к ним. Иначе будут проблемы. Такие проблемы обычно возникают при использовании и R и S. Ну и стараться делать синхронную схему и в дальнейшем операции разносить по тактам для остутствия гонок. При наличии ассинхронности полезно сигналы простробировать внутренней частотой для дальнейшей беспроблеммности. Тут правильно сказали, что надо симулировать и реализацию. Поглядите, что там насинтезировалось. Будете удивлены наверняка. Цитата(Саша Z @ Sep 6 2008, 15:25)  Ага, отлично, спасибо. Значит можно сделать вывод что post-route симуляция видимо действительно отражает реальную технологию конкретного бренда/семейства, т.е. действительно такое решение не работало-бы наверно в CPLD Lattice, но работает в Xilinxе, т.е. CPLD от данных производителей отлихаются технологией (возможно у одного по power-up flip-flopы устанавливаются в '0', у другого - не гарантировано (либо наоборот - устанавливаются в '1'). Ьотя пока это домыслы. Почитаю datasheet на них - посмотрим. Закину так-же сей вопрос на support Латиса... Ну Вы уже все и сами поняли. Добавлю, что лучший симулятор ModelSim, а все остальное ... Цитата(Саша Z @ Sep 11 2008, 19:23)  Все, всем спасибо, решено. Опоздал, извините. Грузинская тема интереснее.
|
|
|
|
|
Sep 12 2008, 05:47
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(Саша Z @ Sep 11 2008, 19:23)  Все, всем спасибо, решено. Эти glitches и сводили с ума state machine в моем коде. Добавил в state machine еще одно состояние с маленьким счетчиком блокирующее glitchеs, переписал test bench с точным моделированием тайминга контролных входов включая glitchи, просимулировал - все ОК. Не могут у автомата гличи быть. Потому что все состояния фиксируются в триггере по фронту клока. Или это совсем не машина состояний, а значит и счетчик гличей вам тоже не поможет. Просто реже сбои будут. Не более того. Используйте классический подход к машине состояний, что соответствует в конечном счете case на все состояния, значения которого фиксируются в регистрах. Ну откуда тут гличи.
|
|
|
|
|
Sep 12 2008, 06:18
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(alexander55 @ Sep 12 2008, 08:31)  Старайтесь использовать родные примитивы и стараться все сводить к ним. Иначе будут проблемы. Такие проблемы обычно возникают при использовании и R и S. Ну и стараться делать синхронную схему и в дальнейшем операции разносить по тактам для остутствия гонок. При наличии ассинхронности полезно сигналы простробировать внутренней частотой для дальнейшей беспроблеммности. Тут правильно сказали, что надо симулировать и реализацию. Поглядите, что там насинтезировалось. Будете удивлены наверняка. Ну Вы уже все и сами поняли. Добавлю, что лучший симулятор ModelSim, а все остальное ... Опоздал, извините. Грузинская тема интереснее. Спасибо anyway... Цитата(sazh @ Sep 12 2008, 08:47)  Не могут у автомата гличи быть. Потому что все состояния фиксируются в триггере по фронту клока. Или это совсем не машина состояний, а значит и счетчик гличей вам тоже не поможет. Просто реже сбои будут. Не более того. Используйте классический подход к машине состояний, что соответствует в конечном счете case на все состояния, значения которого фиксируются в регистрах. Ну откуда тут гличи. Да нет, автомат у меня классический, полностью синхронный. Просто по управляющим входам проходит glitch как раз совпадающий с одним из сигналов управления автоматом и с таймингом подходящим, в результате чего автомат переходил в другое состояние не вовремя чем сбивалась работа конечного устройства. Glitch там не должен быть по specу и инфе полученной от конторы к чьему устройству я подлкюхаюсь Ну ничего, теперь все ОК, glitch заблокирован автоматом (в данном случае не имеется ввиду glitch в смысле тайминга короче клока, что просто как короткий (короче обычного полезного сигнала но достаточно длинный для автомата - несколчко десятков клоков) управляющий сигнал там где его не должно быть. Во временном интервале конкретного устройства - это как glitch но не по отношению к клоку.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|