Перейти к содержанию
    

Нужен ли ресет? И как быть если он не заведен

Здравствуйте!

Подскажите пожалуйста как быть если ресет физически не заведен на ПЛИС, но хочется сброситься после включения питания.

Или можно не сбрасыватся?, Какие аргументы за и против в случае ПЛИС со срам конфигурацией?

Спасибо!

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какой производитель ПЛИС, какая серия?

Что должен делать ресет? сбрасывать что?

Для FPGA Xilinx после загрузки конфигурации в SRAM все триггера и блочная память установятся в значение, которое вы пропишете в прошивке. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

можно как то так

-- ------------------------------------
--  Power On Reset with NO reset input
-- ------------------------------------
-- 10 clock cycles reset pulse issued at start up

Library IEEE;
 use IEEE.std_logic_1164.all;
 use IEEE.numeric_std.all;

-- ----------------------------------------
   Entity POR is
-- ----------------------------------------
 Port ( Clock  : in  std_logic;   -- clock input
        Reset  : out std_logic ); -- reset output
 end entity POR;
-- ----------------------------------------
   Architecture RTL of POR is
-- ----------------------------------------
 signal Cnt    : unsigned (3 downto 0) := (others=>'0'); -- init for simulation
 signal iRst_n : std_logic := '0'; -- init for simulation

Begin

Reset  <= not iRst_n;

process (Clock)
begin
 if rising_edge(Clock) then
   if Cnt /= 10 then -- If counter hasn't reached this value then
     Cnt <= Cnt + 1;           -- keep counting
     iRst_n <= '0';            -- and force the Reset
   else
     iRst_n <= '1';            -- release the Reset
   end if;
 end if;
end process;
end architecture RTL;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно использовать сигнал locked, с PLL, если используете PLL.

Дополнительно можно использовать совет Maverick_.

У себя использую оба этих способа, в зависимости от задачи.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, another_one сказал:

Здравствуйте!

Подскажите пожалуйста как быть если ресет физически не заведен на ПЛИС, но хочется сброситься после включения питания.

Или можно не сбрасыватся?, Какие аргументы за и против в случае ПЛИС со срам конфигурацией?

Спасибо!

 

 

У меня всегда система по-умолчанию даже без стартового сброса готова к работе. Пока проблем не было. Со сбросами надо аккуратно. Например FIFO от Xilinx просто так сбрасывать нельзя. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

5 minutes ago, Flip-fl0p said:

Например FIFO от Xilinx просто так сбрасывать нельзя. 

Это почему же нельзя?  :scratch_one-s_head:

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, RobFPGA said:

Приветствую!

Это почему же нельзя?  :scratch_one-s_head:

Удачи! Rob.

У неё есть лаг в работе после сброса. Нужно выждать Н тактов, в зависимости от размеров FIFO. И всё это обрамлено флагами wr_rdy/rd_rdy. Недавно буквально заводил хоровод с бубном из-за этой фичи. Привык к альтере - там через 1 или 2 такта после сброса можно данные записывать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 часов назад, RobFPGA сказал:

Приветствую!

Это почему же нельзя?  :scratch_one-s_head:

Удачи! Rob.

Там надо асинхронныйй сброс удерживать минимум 3 такта самой медленной частоты. Там надо во время действия флагов wr_rst_busy/rd_rst_busy запретить запись/чтение FIFO, и необходимо, чтобы во время действия сброса была все время частота. Если частота в это время нестабильна, то надо снять и ещё раз подать сброс. Сам нарываося на то, что. из-за нарушения этих правил при работе с fifo, оно работало неправильно. Например у меня при зпписи в пустое fifo оно все время о выдавало флаг owerflow и запись в fifo не производилась. А стоило убрать вообще сброс с FIFO - оно работало нормально. В качестве сброса применял locked от MMCM

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

3 hours ago, Flip-fl0p said:

Там надо асинхронныйй сброс удерживать минимум 3 такта самой медленной частоты.

 То есть сбрасывать все же  можно и нужно - но надо делать это правильно,  в соответствии с требованиями  к FIFO.  Ну  а снимать ресет при нестабильном клоке вообще смысла нет.  Мало ли куда логика может залететь при нарушенных времянках.  

Кстати выключив параметром вход reset вы сброс не убираете - внутри корки  создается генератор одноразового ресета который  генерирует правильный импульс сброса в начале работы после окончания загрузки. Естественно при этом должны быть оба клока.    

 

6 hours ago, nice_vladi said:

У неё есть лаг в работе после сброса. Нужно выждать Н тактов, в зависимости от размеров FIFO. И всё это обрамлено флагами wr_rdy/rd_rdy.

От размеров?  Или может от  длинны  синхронизаторов меду клоками?  Выключив  при генерации корки параметр синхронизации  ресета, можно избавьтся от внутренних синхронизаторов и  wr_rdy/rd_rdy. Но тогда придется самому заботится о синхронизацию ресета.

 

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость vitzap

Сами по себе ячейки в сбросе не нуждаются - после конфигурации они "встают" в состояние по умолчанию. Другое дело, если вы используете компоненты IDELAY, SERDES и прочие аппаратные ресурсы - они требуют сброса, но его можно сгенерировать, как уже показано в третьем сверху сообщении.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, RobFPGA said:

От размеров?  Или может от  длинны  синхронизаторов меду клоками?  Выключив  при генерации корки параметр синхронизации  ресета, можно избавьтся от внутренних синхронизаторов и  wr_rdy/rd_rdy. Но тогда придется самому заботится о синхронизацию ресета.

Перефразирую: от настроек ip core.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 9/7/2020 at 9:37 PM, Maverick_ said:

можно как то так


-- ------------------------------------
--  Power On Reset with NO reset input
-- ------------------------------------
-- 10 clock cycles reset pulse issued at start up

Library IEEE;
 use IEEE.std_logic_1164.all;
 use IEEE.numeric_std.all;

-- ----------------------------------------
   Entity POR is
-- ----------------------------------------
 Port ( Clock  : in  std_logic;   -- clock input
        Reset  : out std_logic ); -- reset output
 end entity POR;
-- ----------------------------------------
   Architecture RTL of POR is
-- ----------------------------------------
 signal Cnt    : unsigned (3 downto 0) := (others=>'0'); -- init for simulation
 signal iRst_n : std_logic := '0'; -- init for simulation

Begin

Reset  <= not iRst_n;

process (Clock)
begin
 if rising_edge(Clock) then
   if Cnt /= 10 then -- If counter hasn't reached this value then
     Cnt <= Cnt + 1;           -- keep counting
     iRst_n <= '0';            -- and force the Reset
   else
     iRst_n <= '1';            -- release the Reset
   end if;
 end if;
end process;
end architecture RTL;

 

А в этом примере счётчик может инициализироваться со значением 10 вследствии чего сброса не будет? 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость vitzap
10 hours ago, Nemos760 said:

А в этом примере счётчик может инициализироваться со значением 10 вследствии чего сброса не будет?

Вот эта строчка задает значение по умолчанию. Оно работает не только в симуляции, но и при инициализации fpga.

signal Cnt    : unsigned (3 downto 0) := (others=>'0');

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 9/9/2020 at 8:30 AM, vitzap said:

Вот эта строчка задает значение по умолчанию. Оно работает не только в симуляции, но и при инициализации fpga.


signal Cnt    : unsigned (3 downto 0) := (others=>'0');

К сожалению далеко не для всех семейств работает. Есть какое-нибудь решение для этого случая кроме аппаратного, чтобы с супервизора питания не заводить? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

3 minutes ago, Nemos760 said:

К сожалению далеко не для всех семейств работает. Есть какое-нибудь решение для этого случая кроме аппаратного, чтобы с супервизора питания не заводить? 

Счетчик можно сделать не только на регистрах, а и например на distributed RAM, начальное содержимое которой задается в дизайне и точно инициализируется при загрузке прошивки. 

 

Удачи! Rob. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...