another_one 0 Posted September 7, 2020 · Report post Здравствуйте! Подскажите пожалуйста как быть если ресет физически не заведен на ПЛИС, но хочется сброситься после включения питания. Или можно не сбрасыватся?, Какие аргументы за и против в случае ПЛИС со срам конфигурацией? Спасибо! Quote Ответить с цитированием Share this post Link to post Share on other sites
Zig 0 Posted September 7, 2020 · Report post Какой производитель ПЛИС, какая серия? Что должен делать ресет? сбрасывать что? Для FPGA Xilinx после загрузки конфигурации в SRAM все триггера и блочная память установятся в значение, которое вы пропишете в прошивке. Quote Ответить с цитированием Share this post Link to post Share on other sites
Maverick_ 10 Posted September 7, 2020 · Report post можно как то так -- ------------------------------------ -- 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; Quote Ответить с цитированием Share this post Link to post Share on other sites
wolfman 0 Posted September 7, 2020 · Report post Можно использовать сигнал locked, с PLL, если используете PLL. Дополнительно можно использовать совет Maverick_. У себя использую оба этих способа, в зависимости от задачи. Quote Ответить с цитированием Share this post Link to post Share on other sites
Flip-fl0p 0 Posted September 7, 2020 · Report post 3 часа назад, another_one сказал: Здравствуйте! Подскажите пожалуйста как быть если ресет физически не заведен на ПЛИС, но хочется сброситься после включения питания. Или можно не сбрасыватся?, Какие аргументы за и против в случае ПЛИС со срам конфигурацией? Спасибо! У меня всегда система по-умолчанию даже без стартового сброса готова к работе. Пока проблем не было. Со сбросами надо аккуратно. Например FIFO от Xilinx просто так сбрасывать нельзя. Quote Ответить с цитированием Share this post Link to post Share on other sites
RobFPGA 0 Posted September 7, 2020 · Report post Приветствую! 5 minutes ago, Flip-fl0p said: Например FIFO от Xilinx просто так сбрасывать нельзя. Это почему же нельзя? Удачи! Rob. Quote Ответить с цитированием Share this post Link to post Share on other sites
nice_vladi 0 Posted September 8, 2020 · Report post 6 hours ago, RobFPGA said: Приветствую! Это почему же нельзя? Удачи! Rob. У неё есть лаг в работе после сброса. Нужно выждать Н тактов, в зависимости от размеров FIFO. И всё это обрамлено флагами wr_rdy/rd_rdy. Недавно буквально заводил хоровод с бубном из-за этой фичи. Привык к альтере - там через 1 или 2 такта после сброса можно данные записывать. Quote Ответить с цитированием Share this post Link to post Share on other sites
Flip-fl0p 0 Posted September 8, 2020 · Report post 8 часов назад, RobFPGA сказал: Приветствую! Это почему же нельзя? Удачи! Rob. Там надо асинхронныйй сброс удерживать минимум 3 такта самой медленной частоты. Там надо во время действия флагов wr_rst_busy/rd_rst_busy запретить запись/чтение FIFO, и необходимо, чтобы во время действия сброса была все время частота. Если частота в это время нестабильна, то надо снять и ещё раз подать сброс. Сам нарываося на то, что. из-за нарушения этих правил при работе с fifo, оно работало неправильно. Например у меня при зпписи в пустое fifo оно все время о выдавало флаг owerflow и запись в fifo не производилась. А стоило убрать вообще сброс с FIFO - оно работало нормально. В качестве сброса применял locked от MMCM Quote Ответить с цитированием Share this post Link to post Share on other sites
RobFPGA 0 Posted September 8, 2020 · Report post Приветствую! 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. Quote Ответить с цитированием Share this post Link to post Share on other sites
vitzap 0 Posted September 8, 2020 · Report post Сами по себе ячейки в сбросе не нуждаются - после конфигурации они "встают" в состояние по умолчанию. Другое дело, если вы используете компоненты IDELAY, SERDES и прочие аппаратные ресурсы - они требуют сброса, но его можно сгенерировать, как уже показано в третьем сверху сообщении. Quote Ответить с цитированием Share this post Link to post Share on other sites
nice_vladi 0 Posted September 8, 2020 · Report post 2 hours ago, RobFPGA said: От размеров? Или может от длинны синхронизаторов меду клоками? Выключив при генерации корки параметр синхронизации ресета, можно избавьтся от внутренних синхронизаторов и wr_rdy/rd_rdy. Но тогда придется самому заботится о синхронизацию ресета. Перефразирую: от настроек ip core. Quote Ответить с цитированием Share this post Link to post Share on other sites
Nemos760 0 Posted September 8, 2020 · Report post 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 вследствии чего сброса не будет? Quote Ответить с цитированием Share this post Link to post Share on other sites
vitzap 0 Posted September 9, 2020 · Report post 10 hours ago, Nemos760 said: А в этом примере счётчик может инициализироваться со значением 10 вследствии чего сброса не будет? Вот эта строчка задает значение по умолчанию. Оно работает не только в симуляции, но и при инициализации fpga. signal Cnt : unsigned (3 downto 0) := (others=>'0'); Quote Ответить с цитированием Share this post Link to post Share on other sites
Nemos760 0 Posted September 11, 2020 · Report post On 9/9/2020 at 8:30 AM, vitzap said: Вот эта строчка задает значение по умолчанию. Оно работает не только в симуляции, но и при инициализации fpga. signal Cnt : unsigned (3 downto 0) := (others=>'0'); К сожалению далеко не для всех семейств работает. Есть какое-нибудь решение для этого случая кроме аппаратного, чтобы с супервизора питания не заводить? Quote Ответить с цитированием Share this post Link to post Share on other sites
RobFPGA 0 Posted September 11, 2020 · Report post Приветствую! 3 minutes ago, Nemos760 said: К сожалению далеко не для всех семейств работает. Есть какое-нибудь решение для этого случая кроме аппаратного, чтобы с супервизора питания не заводить? Счетчик можно сделать не только на регистрах, а и например на distributed RAM, начальное содержимое которой задается в дизайне и точно инициализируется при загрузке прошивки. Удачи! Rob. Quote Ответить с цитированием Share this post Link to post Share on other sites