Мур 1 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба Всегда применял глобальный Сброс! НО! Нарвался на оговорку заказчика, что нет в проекте внешнего сброса. 1.Необходимости в PLL у дизайна нет (чтобы взять для сброса сигнал LOCK в качестве недостающего Сброса). Была оговорка, что для такого случая надо обязательно сделать дополнительную задержку от разрешения LOCK, чтобы была гарантия стабильной частоты от PLL. 2.Была тут информация, что можно в дизайне задавать нужное состояние триггеров простым присвоением при создании. И сей факт считаю интересным для явного формирования сигнала Сброс. Смысл- прописать состояние одного триггера и если он действительно послушно задал свое состояние, как было в проекте,- то формирователь сброса должен сформировать на счетчке задержанный сигнал перебрасывания его состояние в обратное. Это и будет сигнал сброса. Что народ еще применял для начальной установки? Спасибо! Как вариант, работающий на симуляции. Можно и проще, но, то что озвучивалась выглядит. Надеюсь такое будет работать "на железе" entity freset is generic (TEMP_DELAY :integer); port ( CLK_INP : in STD_LOGIC; SENSOR_INP : in STD_LOGIC; RESET_OUT : out STD_LOGIC); end freset; architecture res_body of freset is signal cnt_div_s: INTEGER range TEMP_DELAY-1 downto 0 := (TEMP_DELAY-1);------- начальное состояние begin AVT_OUT_machine: process (CLK_INP) begin if rising_edge(CLK_INP) then if cnt_div_s /= 0 and SENSOR_INP = '1' then cnt_div_s <= cnt_div_s-1; RESET_OUT <= '0'; else RESET_OUT <= '1'; end if; end if; end process; end res_body; ---------------------------------- signal init_s : STD_LOGIC:='1';------- начальное состояние signal tnit_s : STD_LOGIC:='0'; signal RESET : STD_LOGIC; begin nu: process (CLK) begin if rising_edge(CLK) then tnit_s <= not RESET; if tnit_s ='1' and RESET ='1' then init_s <= '0'; end if; end if; end process nu; rest: freset generic map(100) port map ( CLK_INP => CLK, SENSOR_INP => init_s, RESET_OUT => RESET ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimidrol 0 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба xRST_MAIN : srlc32e port map ( q => rst_main_inv, a => "11111", clk => clk, d => '1', ce => '1' ); rst_main <= (not rst_main_inv); У Xilinx можно как-то так обойтись. У Альтеры наверно тоже есть что-то подобное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба xRST_MAIN : srlc32e port map ( q => rst_main_inv, a => "11111", clk => clk, d => '1', ce => '1' ); rst_main <= (not rst_main_inv); У Xilinx можно как-то так обойтись. У Альтеры наверно тоже есть что-то подобное. Для ясности уместно раскрыть сам srlc32e. Идея та же... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dr.Alex 0 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба При старте в любом случае регистры инициализируются нулями по умолчанию, так что всё нормально. Кроме того, присвоение сигналам начальных значений уже давно синтезируемо, по крайней мере в XST. Если перепиливать старый прожект (который требовал сброса) не хочется, то нужно просто сделать этот сброс руками: завести счётчик, он проинициализируется 0 при старте, далее вы его инкрементируете, и создаёте сброс, который держится пока счётчик меньше некоторого значения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба Что народ еще применял для начальной установки? Спасибо! Сделайте свой формирователь сброса. К нему добавьте сигнал инверсный locked от pll. И самое главное. Если к ПЛИС подключен микроконтроллер, сделайте регистр в котором можно управлять сбросом узлов схемы в исходное... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба Приветствую! Имитировать внешний reset используя сигнал clk и lock от PLL опасно. Очень может быть что само PLL нужно ресетить чтобы корректно получить lock. Поэтому счетчик/формирователь глобального ресета лучше питать клоком непосредственно от пина входной частоты. Успехов! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 3 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба Можно еще использовать внешнюю цепочку RC на пине и формирователь одиночного фронта для гашения дребезга. Но это, скорее для маленьких PLD, где счет триггеров на штуки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shivers 0 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба Раньше ставили RC-цепочки, а сейчас ставят супервизоры питания со встроенным power-on-reset. Эти супервизоры сбрасывают всю систему на плате, которая может включать микропроцессоры, ПЛИС и т.д. Можно предусмотреть, чтобы супервизор не вырабатывал сброс раньше, чем загрузятся ПЛИС (использовать сигналы COFIG_DONE и подобные). В любом случае, на плате должен формироваться собственный сброс, даже если не предусмотрена внешняя кнопка. Из этого и следует исходить. Т.е. писать прошивку ПЛИС так, как будто на плате есть асинхронный сброс. Но лучше сначала поговорить с разработчиком платы: вдруг он ньюб, и не поставил супервизор. Тогда надо первым делом устроить ликбез разработчику платы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 32 8 марта, 2017 Опубликовано 8 марта, 2017 · Жалоба Xilinx не рекомендует просто так использовать глобальный сброс при старте - это потребляет ценный глобальный ресурс разводки, а необходимости в таком сбросе нет, т.к. значения триггеров после загрузки вполне предсказуемы. Если значение по умолчанию (а это, как правило, ноль) не устраивает, то можно воспользоваться блоком initial (Verilog), который хотя и является по стандарту несинтезируемым, но у Xilinx и Altera работает (это, afair, документировано). Этот же приём закрывает проблему с симулятором, которому нужно знать начальные значения регистров. Общая рекомендация такая: где не важно исходное значение, ничего не указывать, где важно, явно указать в initial блоке. А сброс использовать только для логики, которая в этом нуждается на рантайме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DuHast 0 8 марта, 2017 Опубликовано 8 марта, 2017 · Жалоба Я ставлю счётчик необходимой разрядноси. Инвертированный старший разряд использую как Enable для этого счётчика и как ресет для своих схем. С тем, чтобы начальное значение счётчика было нулём, проблем никогда не было. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimidrol 0 8 марта, 2017 Опубликовано 8 марта, 2017 · Жалоба Xilinx не рекомендует просто так использовать глобальный сброс при старте - это потребляет ценный глобальный ресурс разводки, а необходимости в таком сбросе нет, т.к. значения триггеров после загрузки вполне предсказуемы. С небольшой оговоркой, GSR - глобальный сброс в ПЛИС, который отпускается при старте микросхемы, сигнал асинхронный со всеми вытекающими. Поэтому приведу цитату из этой статьи http://www.eetimes.com/document.asp?doc_id=1278998 After using the GSR to set the initial state of the entire design, use explicit resets for logic elements, like state machines, that require a synchronous reset. Generate the synchronized version of the explicit reset using either a standard metastability resolution circuit or a reset bridge. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться