Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выработка внутреннего сигнала сброса
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
MIX@
Доброго времени суток!

Что имею: Cyclone EP1C6T144C8.
Что нужно: после инициализации FPGA генерировать внутренний сигнал сброса для инициализации разработанных модулей (каждый модуль содержит вход асинхронного сброса).
Доступа к ногам ПЛИС я не имею, ибо всё это запаено в отладочной плате. Супервизора, генерирующего сигнал сброса тоже нету.

Посоветовали делать следующее:

Код
module internal_reset(clk,rst);
   input clk;
   output rst;
  
   reg [24:0] rst_cnt;
   wire rst = &rst_cnt;
   always @(posedge clk)
      if (!rst) rst_cnt <= rst_cnt + 1;
  
endmodule


Но синтезатор игнорирует последние 4 бита счётчика сброса, генерируя следующее:
Нажмите для просмотра прикрепленного файла

Два вопроса:
Как правильно генерировать резет в моём случае и что может быть причиной такой реакции синтезатора (в мануале приведён несуразный пример, не соответсвующий моему случаю)?

Заранее спасибо!
EvgenyNik
Я использую для этих целей сигнал Locked с выхода altpll, при условии, конечно, что на его входе стабильная частота и таких ресетов в течении работы не будет.
sazh
Цитата(MIX@ @ Feb 11 2009, 20:11) *
Два вопроса:
Как правильно генерировать резет в моём случае и что может быть причиной такой реакции синтезатора (в мануале приведён несуразный пример, не соответсвующий моему случаю)?


В мануале вполне приличный пример. Только гарантирован в среде Квартуса. И Ваш правильно квартусом синтезируется. Разве что на выходе триггер все таки просится.
Что касается внешних синтезаторов, то там и надо искать ответы.
reg [24:0] rst_cnt = 25'd0;
Он должен эту строчку понимать.
ClockworkOrange
Цитата(MIX@ @ Feb 11 2009, 20:11) *
Посоветовали делать следующее:

Код
module internal_reset(clk,rst);
   input clk;
   output rst;
  
   reg [24:0] rst_cnt;
   wire rst = &rst_cnt;
   always @(posedge clk)
      if (!rst) rst_cnt <= rst_cnt + 1;
  
endmodule

очень мило...
только вот почему у вас такая слепая уверенность что по включении питания ваши триггеры в "0" встанут
(а иначе зачем вообще весь этот огород сресетом для основной схемы?!)
sazh
Цитата(ClockworkOrange @ Feb 12 2009, 14:00) *
только вот почему у вас такая слепая уверенность что по включении питания ваши триггеры в "0" встанут


Потому, что так написано.
EvgenyNik
Цитата
только вот почему у вас такая слепая уверенность что по включении питания ваши триггеры в "0" встанут

С неопределённостью триггеров сталкивался только у CPLD, а именно у MAX7k от Altera (Xilinx просто не пользую), а у FPGA такого ни разу не наблюдал. Может, повезло... а может они конфигурируются сразу как надо... smile.gif
alexadmin
Цитата(Евгений Николаев @ Feb 12 2009, 14:46) *
С неопределённостью триггеров сталкивался только у CPLD, а именно у MAX7k от Altera (Xilinx просто не пользую), а у FPGA такого ни разу не наблюдал. Может, повезло... а может они конфигурируются сразу как надо... smile.gif


Реально я тоже не сталкивался, однако в синтезаторе квартуса есть вот такая опция:

Power-Up Don't care
Causes registers that do not have a Power-Up Level logic option setting to power up with a don't care logic level (X). A don't care setting allows the Compiler to change the power-up level of a register to minimize the area of the design.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.