|
|
  |
Когда нет глобального СБРОСа, Перечислим варианты решения проблемы. |
|
|
|
Mar 7 2017, 13:57
|

Знающий
   
Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Всегда применял глобальный Сброс! НО! Нарвался на оговорку заказчика, что нет в проекте внешнего сброса. 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 );
|
|
|
|
|
Mar 7 2017, 14:34
|

Знающий
   
Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Цитата(dm.pogrebnoy @ Mar 7 2017, 18:17)  Код 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. Идея та же...
|
|
|
|
|
Mar 7 2017, 14:42
|
Профессионал
    
Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863

|
При старте в любом случае регистры инициализируются нулями по умолчанию, так что всё нормально.
Кроме того, присвоение сигналам начальных значений уже давно синтезируемо, по крайней мере в XST.
Если перепиливать старый прожект (который требовал сброса) не хочется, то нужно просто сделать этот сброс руками: завести счётчик, он проинициализируется 0 при старте, далее вы его инкрементируете, и создаёте сброс, который держится пока счётчик меньше некоторого значения.
|
|
|
|
|
Mar 7 2017, 15:30
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Мур @ Mar 7 2017, 16:57)  Что народ еще применял для начальной установки? Спасибо! Сделайте свой формирователь сброса. К нему добавьте сигнал инверсный locked от pll. И самое главное. Если к ПЛИС подключен микроконтроллер, сделайте регистр в котором можно управлять сбросом узлов схемы в исходное...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Mar 7 2017, 16:46
|

Знающий
   
Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950

|
Раньше ставили RC-цепочки, а сейчас ставят супервизоры питания со встроенным power-on-reset. Эти супервизоры сбрасывают всю систему на плате, которая может включать микропроцессоры, ПЛИС и т.д. Можно предусмотреть, чтобы супервизор не вырабатывал сброс раньше, чем загрузятся ПЛИС (использовать сигналы COFIG_DONE и подобные). В любом случае, на плате должен формироваться собственный сброс, даже если не предусмотрена внешняя кнопка. Из этого и следует исходить. Т.е. писать прошивку ПЛИС так, как будто на плате есть асинхронный сброс. Но лучше сначала поговорить с разработчиком платы: вдруг он ньюб, и не поставил супервизор. Тогда надо первым делом устроить ликбез разработчику платы.
|
|
|
|
|
Mar 8 2017, 06:37
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Xilinx не рекомендует просто так использовать глобальный сброс при старте - это потребляет ценный глобальный ресурс разводки, а необходимости в таком сбросе нет, т.к. значения триггеров после загрузки вполне предсказуемы. Если значение по умолчанию (а это, как правило, ноль) не устраивает, то можно воспользоваться блоком initial (Verilog), который хотя и является по стандарту несинтезируемым, но у Xilinx и Altera работает (это, afair, документировано). Этот же приём закрывает проблему с симулятором, которому нужно знать начальные значения регистров.
Общая рекомендация такая: где не важно исходное значение, ничего не указывать, где важно, явно указать в initial блоке. А сброс использовать только для логики, которая в этом нуждается на рантайме.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Mar 8 2017, 18:03
|

Знающий
   
Группа: Свой
Сообщений: 747
Регистрация: 11-04-07
Пользователь №: 26 933

|
Цитата(dxp @ Mar 8 2017, 09:37)  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.
--------------------
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|