Jump to content

    
Sign in to follow this  
another_one

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

Recommended Posts

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

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

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

Спасибо!

 

 

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

-- ------------------------------------
--  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;

 

Share this post


Link to post
Share on other sites

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

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

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

 

Share this post


Link to post
Share on other sites
3 часа назад, another_one сказал:

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

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

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

Спасибо!

 

 

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

Share this post


Link to post
Share on other sites
6 hours ago, RobFPGA said:

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

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

Удачи! Rob.

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

Share this post


Link to post
Share on other sites
8 часов назад, RobFPGA сказал:

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

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

Удачи! Rob.

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

 

Share this post


Link to post
Share on other sites

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

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
2 hours ago, RobFPGA said:

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

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

Share this post


Link to post
Share on other sites
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 вследствии чего сброса не будет? 

 

Share this post


Link to post
Share on other sites
10 hours ago, Nemos760 said:

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

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

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

Share this post


Link to post
Share on other sites
On 9/9/2020 at 8:30 AM, vitzap said:

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


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

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

Share this post


Link to post
Share on other sites

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

3 minutes ago, Nemos760 said:

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

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

 

Удачи! Rob. 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this