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

|
Странная проблема возникла: есть довольно простенький проэкт под Xilinx XCR3064CS48 CPLD. Проэкт драйвит некоторый електромагнит в системе. Код на VHLD. Я вообще сижу на Латтисе, на данный момент временно требуется данный Xilinx (в дальнейшем он заменится на соотв. Латтисе, но пока это то что есть), посему дизайн симулирован в среде Lattice (Модельсимом для Латтиса), затем когда симуляция ОК - открываю ISE, синтезирую под XCR3064CS48 и т.д. Есть UCF файл в проэкте в ISE где определил ноги чипа под сигналы. Проблема в том что после прожига не работает в чипе. Прежняя версия того-же дизайна работала ОК, сейчас внес изменения в код (UCF не трогал) - на выходах ничего нет. Прожигаю старую версию - чип работает ОК (согласно старой версии ессно). Проверяю в ISE насчет констрейнов ног: содержимое UCF имеет описание всех ног, тогда как в окне где UCF разбивается на части (Timing COntraints таб) - два выхода из четырех вроде как не определены в плане ног. Присоединены screenshots того о чем говорю. Также присоединен source VHDL как reference - хотя симуляция показывает что код вроде работает ОК. Со средой ISE знаком плохо, да и нет намерения углубленно изучать ее ибо Латтисе удовлетворяте потребости, может что-то не определено для проэкта в ISE и посему не работает в чипе ? Заранее благодарен за помощь.
Эскизы прикрепленных изображений
Прикрепленные файлы
Driver.vhd ( 4.51 килобайт )
Кол-во скачиваний: 138
|
|
|
|
|
Sep 2 2008, 11:59
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(sazh @ Sep 2 2008, 14:37)  Ради интереса в квартусе прогнал. Куча предупреждений, на неполный список чувствительности процесса. Что интересно, реализвция зависит от типа кристалла (CPLD, FPGA) лачи в RTL какие то бессмысленные. Да, дополнил списки чуствительности в процессы. Прогнал опять, не помогло... Вариант без счетчиков - работает в чипе ОК. Код варианта без счетчиков присоединен...
|
|
|
|
|
Sep 2 2008, 12:47
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(Саша Z @ Sep 2 2008, 15:59)  Да, дополнил списки чуствительности в процессы. Прогнал опять, не помогло... Вариант без счетчиков - работает в чипе ОК. Код варианта без счетчиков присоединен... Почему не работает Ваш - не знаю. Вряд ли от ного зависит. Но и работающий никуда не годится. Нет там during system power-up. Закладка на синтезатор и тип семейства. (Скорее всего этот коре ду все же fpga по сути). Скачайте xst.pdf и реализуйте в стиле декодера. У Вас же всего 8 входных состояний (MOTIN0 не используется), простробированных триггерами. По идее каждый входной сигнал принять на 2 триггера по клоку. Реализовать case на 8 состояний для каждого из 4 выходов и простробировать выходными триггерами. Чего проще. А power - up по нулям, так это от структуры кристалла зависит. Если это флеш, то номер наверно не пройдет.
|
|
|
|
|
Sep 2 2008, 13:59
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(sazh @ Sep 2 2008, 15:47)  Почему не работает Ваш - не знаю. Вряд ли от ного зависит. Но и работающий никуда не годится. Нет там during system power-up. Закладка на синтезатор и тип семейства. (Скорее всего этот коре ду все же fpga по сути). Скачайте xst.pdf и реализуйте в стиле декодера. У Вас же всего 8 входных состояний (MOTIN0 не используется), простробированных триггерами. По идее каждый входной сигнал принять на 2 триггера по клоку. Реализовать case на 8 состояний для каждого из 4 выходов и простробировать выходными триггерами. Чего проще. А power - up по нулям, так это от структуры кристалла зависит. Если это флеш, то номер наверно не пройдет. Да, отсутствие power-up reset это мне известно. Увы, борд был спроэктирован подрядчиком, я унаследовал то что получилось, оживлял/изправлял его. На борту есть данный CPLD, их конкретный дизайн - полностью асинхронный, безо-всякого power-up reset. Спасибо им за то что хотя-бы удосужились вставить clk (которым они не пользовались в дизайне). Входа reset нет физически. Посему и извращался пытаясь каким-то образом задать обнулевку счетчика по началу работы... Возможно не будет выхода и придется прособачить внешний RC от power на какию-нит торчащую свободную ногу чипа в качестве power-up reset системы...
|
|
|
|
|
Sep 2 2008, 14:22
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(Саша Z @ Sep 2 2008, 17:59)  На борту есть данный CPLD, их конкретный дизайн Возможно не будет выхода и придется прособачить внешний RC от power на какию-нит торчащую свободную ногу чипа в качестве power-up reset системы... Посмотрите на самом ли деле это структура CPLD. Сейчас модно структуру скрывать. Да и у xilinx своя система установки начального состояния. Если регистры можно по включению питания в ноль установить, то и внутренний сигнал обнуления по клоку тоже можно сформировать. Тогда и Ваша инициапизация в описании сигналов работать будет. Надо только позаботиться, чтобы синтезатор не оптимизировал эту один раз срабатывающую структуру. module power_up // Power-Up Don't Care - off ( input clk, output reg reset_power_up_n ); reg [9:0] cnt_power_up; always @(posedge clk) begin if (cnt_power_up == 10'd1023) reset_power_up_n <= 1'b1; if (cnt_power_up != 10'd1023) cnt_power_up <= cnt_power_up + 1'b1; end endmodule
|
|
|
|
|
Sep 2 2008, 20:00
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(sazh @ Sep 2 2008, 18:22)  Посмотрите на самом ли деле это структура CPLD. Сейчас модно структуру скрывать. Да и у xilinx своя система установки начального состояния. Если регистры можно по включению питания в ноль установить, то и внутренний сигнал обнуления по клоку тоже можно сформировать. Тогда и Ваша инициапизация в описании сигналов работать будет. Надо только позаботиться, чтобы синтезатор не оптимизировал эту один раз срабатывающую структуру. module power_up // Power-Up Don't Care - off ( input clk, output reg reset_power_up_n );
reg [9:0] cnt_power_up;
always @(posedge clk) begin if (cnt_power_up == 10'd1023) reset_power_up_n <= 1'b1; if (cnt_power_up != 10'd1023) cnt_power_up <= cnt_power_up + 1'b1; end
endmodule Сейчас подумалось - возможно есть толика истины в вашем предположени зависимости power-up установки регистров от технологии... Я ведь как и упоминал симулировал под CPLD Латтиса а затем пере-синтезировал под Xilinx и прожигал. Возможно структура Xilinxа отлихается от Lattice и в плане началчной установки регистро по power-up и тогда вполне естественно симуляция под Lattice не дааст уверенности в результате под другого производителя.... Кроме того, я не уверен покажет учитывает-ли симулятор power-up setup регистров конкретного семейства которое он симулирует...при отсутствии implied/forced внешнего reset ?? А, стоп, мало того - я-то симулировал только functional, забыл про post-route....
|
|
|
|
|
Sep 3 2008, 07:44
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(sazh @ Sep 2 2008, 15:37)  лачи в RTL какие то бессмысленные. Да, без пояснений оно не совсем понянто со стороны: в системе есть проблема в том что при power-up срабатывает ложная комманда на на включение одного из режимов (видимо в результате влияния включения питания на конфигурацию системы которая драйвит данный CPLD), посему нужно было сделать что-то что-бы заблокировало первый sequence комманд (ложный). Посему получились latches о который и кручал синтезатор. Цитата(rv3dll(lex) @ Sep 3 2008, 10:57)  я в основном все процессы делаю синхронными и в список чувствительности вписываю только клок ни разу проблем не было
у ксайлинкса действительно все регистры изначально ставятся в ноль если не указать типа := '1' вообще-то стандарт рекоммендует иказывать полный sense list в процессе. Не уверен на что повлияет не полное указание сигналов в списке, но я в принципе, как минимум в качестве начинающего, стараюсь приделживаться стандарта (когда не забываю...). Иногда забываю все релевантные сигналы внести в список, получаю warnings, но до сих пор все работало и так... Интересно на что влияет не полный список чуствительности...
|
|
|
|
|
Sep 3 2008, 09:18
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(sazh @ Sep 3 2008, 11:58)  Со стороны все и так понятно. От ложной команды на время устаканивания системы можно избавиться, подставив свою нужную команду. Введя входные триггера и установив (в интервале нужной длительности временного интервала) после включения питания на них нужные значения. Лачи у Вас появились не сознательно, а от не корректного описания проекта. Да, ессно, latchи появились в результате описания, трудно не согласиться. Вы имеете ввиду управлять flip-flopами синхронизации входных сигналов управления ? Т.е. например держать их в resetе на протяжении начального временного интервала в течении которого появляется ложная комманда ?
|
|
|
|
|
Sep 3 2008, 10:01
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(BSV @ Sep 3 2008, 12:27)  А временнОе моделирование автор делал? Еще интересный вопрос - как соотносятся с тактовым сигналом по времени управляющие входы? Кроме того, триггеры и выходные сигналы MPH2 и MPH3 очевидно эквивалентны MPH0 и MPH1 соответственно, поэтому выбрасываются синтезатором. Временное моделирование сделал сейчас только - но тоже для Lattice (нет симулятора для Xilinxа) - все тоже самое... По входам упрявляющие сигналы никак не синхронизированы с клоком чипа, посему кака видимо правильно советовал sazh - неплохо-бы их засинхронизировать перед вводом в логику. MPH1 и MPH3, MPH0 и MPH2 запараллелены вместе, так должно быть. Нет проблем если синтезатор выбросит логику паралельных выходов и просто подсоединит параллельные выходы к своим ногам..
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|