реклама на сайте
подробности

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


Знающий
****

Группа: Свой
Сообщений: 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
        );
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dxp
сообщение Mar 8 2017, 06:37
Сообщение #2


Adept
******

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



Xilinx не рекомендует просто так использовать глобальный сброс при старте - это потребляет ценный глобальный ресурс разводки, а необходимости в таком сбросе нет, т.к. значения триггеров после загрузки вполне предсказуемы. Если значение по умолчанию (а это, как правило, ноль) не устраивает, то можно воспользоваться блоком initial (Verilog), который хотя и является по стандарту несинтезируемым, но у Xilinx и Altera работает (это, afair, документировано). Этот же приём закрывает проблему с симулятором, которому нужно знать начальные значения регистров.

Общая рекомендация такая: где не важно исходное значение, ничего не указывать, где важно, явно указать в initial блоке. А сброс использовать только для логики, которая в этом нуждается на рантайме.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
DuHast
сообщение Mar 8 2017, 08:12
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 13-07-06
Из: Москва
Пользователь №: 18 797



Я ставлю счётчик необходимой разрядноси. Инвертированный старший разряд использую как Enable для этого счётчика и как ресет для своих схем.
С тем, чтобы начальное значение счётчика было нулём, проблем никогда не было.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 21:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01382 секунд с 7
ELECTRONIX ©2004-2016