|
Altera - начальное состояние, Все ли триггеры инициализируются прошивкой? |
|
|
|
Mar 6 2014, 10:58
|
Профессионал
    
Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770

|
Я привык считать, что вне зависимости от настроек компилятора (то есть даже в случае, когда установлена опция "PowerUp do not care") все триггеры ПЛИС после инициализации всегда находятся в детерминированном состоянии. То есть эта опция даёт свободу компилятору присваивать триггерам начальное значение 0 или 1 для оптимизации, однако триггер будет в любом случае инициализирован. Однако сейчас я в проекте наблюдаю следующее.
У меня есть FIFO, сгенерированное визардом. Сигнал SCLR не сгенерирован, "PowerUp do not care" включено. Ставлю SignalTap на внутренние счётчики FIFO, включаю power-up trigger в SignalTap. Нормально эти счётчики на момент инициализации имеют нулевое значение, но один раз на несколько сотен загрузок счётчик чтения инициализируется единицей. Соответственно счётчик чтения обгоняет счётчик записи, и FIFO становится неработоспособным.
Я конечно напишу об этом в Спортлото (то есть Альтере), но думаю, что они мне скажут генерировать sclr, и на этом вопрос закроется. Мне же интересно: получается что в принципе ПЛИС стартует в недетерминированном состоянии, вопреки документации. И у меня пол-года назад был похожий случай в другом проекте, когда я не инициализировал триггер явно, но заложился на его нулевое значение при инициализации, и в результате проект один раз из ста не работал. Кто что скажет?
|
|
|
|
|
Mar 6 2014, 11:56
|
Местный
  
Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094

|
Цитата(DmitryR @ Mar 6 2014, 15:37)  Времянка естественно проверена. А если бы даже и нет (допустим, у меня неполностью описаны констрейны) я не вижу как введение сигнала sclr у сгенерированной мегафункции может чудесным образом исправить времянку. На начальных этапах установки тактового сигнала (небось PLL используете?) "проверенная времянка" может и не выполняться. Вот и начинается лотерея вида "какой из двух счётчиков успел словить глитч и переключиться". Не знаю, что там у Вас за сигнал sclr, но видимо подразумевается сброс, который выполняется не раньше завершения всех переходных процессов и устаканивания тактов.
|
|
|
|
|
Mar 6 2014, 13:13
|
Местный
  
Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094

|
Цитата(DmitryR @ Mar 6 2014, 16:53)  Мне тогда не очень понятно, почему Альтера разрешает конфигурацию, где у FIFO отсутствует вход сброса, раз такая конфигурация в большинстве практических случаев будет глючить. Я думаю, что Альтере есть чем заняться помимо защиты пользователей от тривиальных ошибок. Не могу я понять, к чему весь этот сыр-бор. Достаточно сделать правильный сброс системы и дёргать его перед началом работы - и всё и всегда будет работать. А в освободившееся от поиска глюков на ровном месте время можно сделать много полезных дел.
Сообщение отредактировал o_khavin - Mar 6 2014, 13:13
|
|
|
|
|
Mar 6 2014, 13:20
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(DmitryR @ Mar 6 2014, 16:53)  Мне тогда не очень понятно, почему Альтера разрешает конфигурацию, где у FIFO отсутствует вход сброса, раз такая конфигурация в большинстве практических случаев будет глючить. Потому, что каждый HDL-разработчик это с пеленок знает, что все, что требует сброса, надо сбрасывать. Если Ваше FIFO требует сброса, то сбрасывайте - если у Вас используется глобальный сброс по DEVCLRn, то можете сбрасывать без входа у фифо.
|
|
|
|
|
Mar 6 2014, 15:18
|
Профессионал
    
Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770

|
Цитата(sazh @ Mar 6 2014, 16:14)  А глюкавость то в чем. Если нет сброса, значит Вам безразлично переполнение, что при этом на выходе, значит сами разбираетесь с потоком при помощи флагов и т.д. Если бы это было видно на флагах - я бы внутрь FIFO бы не полез. Цитата(SM @ Mar 6 2014, 16:20)  Потому, что каждый HDL-разработчик это с пеленок знает, что все, что требует сброса, надо сбрасывать. Если Ваше FIFO требует сброса, то сбрасывайте - если у Вас используется глобальный сброс по DEVCLRn, то можете сбрасывать без входа у фифо. Совершенно верно. Однако я считаю, что если компонент позволяет конфигурацию без входа сброса - значит он сброса не требует. Как минимум в такой конфигурации.
|
|
|
|
|
Mar 13 2014, 00:48
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775

|
Цитата(DmitryR @ Mar 6 2014, 18:14)  А это у меня обеспечивается: вся машина состояний вокруг FIFO держится в сбросе как раз сигналом locked от PLL. Я как то тоже так делал, и у меня не всегда сбрасывалось, и я удивлялся. Также, изредка что-то не сбрасывалось. Сброс был синхронный. Потом рассудил, что после захвата частоты PLL для сброса нужен хотя бы 1 такт. Хотя там вроде выставляется число тактов удержания locked (если не ошибаюсь), но все равно подглючивало. Как только отказался от сброса на locked и перешел на внешний ресет все заработало, глюк исчез.
|
|
|
|
|
Mar 13 2014, 03:33
|
Местный
  
Группа: Свой
Сообщений: 375
Регистрация: 9-10-08
Из: Таганрог, Ростовская обл.
Пользователь №: 40 792

|
Цитата(alevnew @ Mar 13 2014, 04:48)  Как только отказался от сброса на locked и перешел на внешний ресет все заработало, глюк исчез. Псоле установки locked делаю счетчик на 64/128 тактов. По окончанию работы счетчика - снимаю общий сброс с ПЛИС. Счетчик сбрасывается непосредственно от locked. Такая конструкция никогда не сбоила при любой загрузки ПЛИС при условии выполнения констрейнов на всем температурном диапазоне и даже больше (до минус 50 гоняли). А вот система с одним locked нестабильна и вот почему - в железе иногда выводили его на пин и смотрели осциллографом - сигнал дрожал иногда! И посему часть логики сбрасывалась а часть - нет.
--------------------
Глупцы игнорируют сложность. Прагматики терпят ее. Некоторые могут избегать ее. Гении ее устраняют.
|
|
|
|
|
Mar 13 2014, 04:20
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
У меня сделано так. Код module Reset_m ( input bit res_ext, //!< External reset (knob, port) input bit no_lock, //!< PLL no locked reset input bit res_cmd, //!< MCU command reset input bit clks, //!< Slow Clock output bit res_int //!< Internal wide device reset ); bit rest; //!< Reset start assign rest = res_ext || no_lock || res_cmd; bit [1:0] ress; //!< Reset sequence always_ff @(posedge rest, posedge clks) begin if (rest) ress <= '1; else ress <= {ress[0], 1'b0}; end assign res_int = ress[1];
endmodule : Reset_m После того, как PLL захватила, формируется сброс в течение двух тактов. upd. Не двух, а "как повезет", от одного до двух. Если мало, можно добавить в последовательность.
|
|
|
|
|
Mar 17 2014, 06:41
|
Частый гость
 
Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311

|
А почему бы сигнал locked с PLL не использовать для асинхронного сброса? Всегда так делаю, проблемы не возникает. Все всегда работает: Код reg [04:00] cnt;
always @(posedge CLK or negedge nRESET) begin if (!nRESET) begin cnt <= 0; end else begin cnt <= cnt + 1'b1; end end Сигнал nRESET идет прямо с выхода locked PLL
Сообщение отредактировал dima32rus - Mar 17 2014, 06:48
|
|
|
|
|
Mar 17 2014, 06:57
|
Частый гость
 
Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311

|
Цитата(ilkz @ Mar 17 2014, 10:46)  На временном пост-фиттерном моделировании (встренным моделятором) в квартусе 9.2SP2 и ниже видел такое странное дело, когда при вставшем в единицу LOCKED частота у PLL еще тактов 10-15 могла немного, совсем чуть-чуть, гулять. Может это были глюки симулятора или отображения сигналов, но глазом при различных масштабах зума времянки это было заметно. Поэтому при сбросе от LOCKED лучше делать небольшой счетчик, который либо отложит сброс схемы ненадолго, либо подольше подержит схему в сбросе. Моделирую в ModelSim, там все нормально. Скорее всего, глюк кокого-то из этих симуляторов. Но у меня ни в одном проекте еще не было проблем с начальным сбросом схемы. Тьфу-тьфу-тьфу
|
|
|
|
|
Mar 17 2014, 08:08
|

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424

|
Цитата(DmitryR @ Mar 6 2014, 14:58)  Я привык считать, что вне зависимости от настроек компилятора (то есть даже в случае, когда установлена опция "PowerUp do not care") все триггеры ПЛИС после инициализации всегда находятся в детерминированном состоянии. Вы точно уверены что именно в этой ПЛИС тригеры 0 после включения и стабилизации частоты? Вроде надо спец опцию компилятора для этого включать.... и не все семейства такую опцию имеют....
|
|
|
|
|
Mar 17 2014, 08:53
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(ilkz @ Mar 17 2014, 10:46)  когда при вставшем в единицу LOCKED частота у PLL еще тактов 10-15 могла немного, совсем чуть-чуть, гулять. Может это были глюки Это не глюки, это принцип работы детектора захвата. Он выдает 1, когда фаза находится в зоне захвата какое-то определенное время, а зона захвата не такая уж и узкая, и плюс переходной процесс фильтра. Короче, так и должно быть.
|
|
|
|
|
Mar 17 2014, 09:58
|
Частый гость
 
Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311

|
Прикладываю скриншот из моделсима для Gate Level Simulation. Как видно, нестабилен только самый первый такт после утановки сигнала nRESET (locked PLL). Дальше тактовая частота уже не гуляет. Совсем.
Эскизы прикрепленных изображений
|
|
|
|
|
Mar 17 2014, 10:46
|
Местный
  
Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094

|
Цитата(SM @ Mar 17 2014, 13:46)  Встроенный моделятор квартуса это совсем другое дело, по сравнению со всякими там HDL-симуляторами.... Можно пруф? Что именно симулятор Квартуса такого симулирует отличающегося от других HDL-симуляторов? Там какой-то секретный HDL используется?  Мне почему то казалось, что один и тот же HDL-код должен одинаково вести себя во всех симуляторах, которые написаны с применением стандарта. А если не ведёт, то надо пинать ногой писателя этого симулятора. Скорее уже, в самой модели PLL-и может быть какой-нить параметр, который отвечает за упрощённое моделирование процесса в целях ускорения симуляции. Мне подобное встречалось, к примеру, в моделях DDR-памяти (уменьшение фактической глубины памяти на несколько порядков) и, если не изменяет память, в моделях примитивов Xilinx-а.
Сообщение отредактировал o_khavin - Mar 17 2014, 10:47
|
|
|
|
|
Mar 17 2014, 12:28
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(o_khavin @ Mar 17 2014, 14:46)  Там какой-то секретный HDL используется? Там вообще HDL никакой не используется. Там, грубо говоря, моделируется схема, получившаяся после разводки ПЛИС. Отсюда и его ограничения, что нельзя подключать тестбенчи, а надо задавать входные воздействия буквально руками, и отсюда же точность времянок и симуляции поведения железа куда лучше, чем vo+sdo+моделятор. P.S. хотя, для описания их внутренних блоков, наверное, действительно, какой-то секретный HDL используется. Но мы этого никогда не узнаем, оно все там в бинарном виде совершенно не дешифрируемом. P.P.S. По точности симуляции симуляция квартуса vs симуляция HDL - примерно как FastSPICE симуляция ASIC vs HDL.
|
|
|
|
|
Mar 17 2014, 12:38
|
Местный
  
Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094

|
Цитата(SM @ Mar 17 2014, 16:28)  Там вообще HDL никакой не используется. Там, грубо говоря, моделируется схема, получившаяся после разводки ПЛИС. Пруф в студию.
|
|
|
|
|
Mar 17 2014, 12:50
|
Местный
  
Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094

|
Цитата(SM @ Mar 17 2014, 16:44)  Вам надо, сами и ищите. Мне сейчас некогда бесполезной и ненужной работой заниматься. Сорри. Да уж, вежливость зашкаливает.
|
|
|
|
|
Mar 17 2014, 12:54
|
Местный
  
Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094

|
Цитата(SM @ Mar 17 2014, 16:52)  Как и адекватность просьбы. Я, по-вашему, должен за альтеру что-то там доказывать? Мне это не интересно и не нужно. Не трудитесь, я добавил Вас в свой игнор-лист. Всего Вам наилучшего в погоне за вашими собственными представлениями об адекватности.
Сообщение отредактировал o_khavin - Mar 17 2014, 12:55
|
|
|
|
|
Mar 18 2014, 00:51
|
Частый гость
 
Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311

|
Цитата(SM @ Mar 17 2014, 13:46)  Встроенный моделятор квартуса это совсем другое дело, по сравнению со всякими там HDL-симуляторами.... А почему тогда Altera отказались от встроенного симулятора в пользу того-же ModelSim'а? По идее, нужно наоборот...
|
|
|
|
|
Mar 18 2014, 02:51
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(dima32rus @ Mar 18 2014, 04:51)  А почему тогда Altera отказались от встроенного симулятора в пользу того-же ModelSim'а? По идее, нужно наоборот... Да реально бестолковый он. В нем можно толком только что-то очень простое отсимулировать, задавая в графическом редакторе диаграммы входных сигналов. Мышиная возня, а не симуляция. Вот если бы они бы добавили к нему HDL ко-симуляцию, чтобы задавать воздействия тестбенчем, и подключать модели внешних навесов, например памяти, вот тогда бы... Но предпочли пойти более простым путем.
|
|
|
|
|
Mar 21 2014, 08:56
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 18-03-14
Пользователь №: 80 976

|
Цитата(ilkz @ Mar 17 2014, 10:46)  На временном пост-фиттерном моделировании (встренным моделятором) в квартусе 9.2SP2 и ниже видел такое странное дело, когда при вставшем в единицу LOCKED частота у PLL еще тактов 10-15 могла немного, совсем чуть-чуть, гулять. Может это были глюки симулятора или отображения сигналов, но глазом при различных масштабах зума времянки это было заметно. Поэтому при сбросе от LOCKED лучше делать небольшой счетчик, который либо отложит сброс схемы ненадолго, либо подольше подержит схему в сбросе. Так у PLL(Altera) есть "Gated Lock", как раз тот самый счетчик. В MagaWizard - это пункт Inputs/Lock -> Lock Output -> Hold 'locked' output low for * cycles after the PLL initializes. Что касается встроенного симулятора в Quartus 13.0 он присутствует.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|