makc 192 29 декабря, 2004 Опубликовано 29 декабря, 2004 · Жалоба Появился вопрос - как на VHDL в Xilinx ISE при поведенческом описании архитектуры принудительно указать, что reset будет синхронным? В Foundationе можно было сделать следующим образом: library SYNOPSYS; use SYNOPSYS.attributes.all; А потом в описании архитектуры добавить следующие записи: attribute sync_set_reset of R: signal is "true"; А в ISE? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Barbarossa 0 29 декабря, 2004 Опубликовано 29 декабря, 2004 · Жалоба Появился вопрос - как на VHDL в Xilinx ISE при поведенческом описании архитектуры принудительно указать, что reset будет синхронным? В Foundationе можно было сделать следующим образом: library SYNOPSYS; use SYNOPSYS.attributes.all; А потом в описании архитектуры добавить следующие записи: attribute sync_set_reset of R: signal is "true"; А в ISE? <{POST_SNAPBACK}> А в чем проблемы-то? Синхронный сброс очень просто реализуется. Например, для D-триггера достаточно поставить на входе один вентиль - умножить (логически) сигнал, подаваемый на вход D с сигналом reset. Получиться D-триггер с синхронным сбросом. Сбрасыватся будет при нуле на reset. Для других триггеров можно сделать примерно также. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 192 30 декабря, 2004 Опубликовано 30 декабря, 2004 · Жалоба А в чем проблемы-то? Синхронный сброс очень просто реализуется. Например, для D-триггера достаточно поставить на входе один вентиль - умножить (логически) сигнал, подаваемый на вход D с сигналом reset. Получиться D-триггер с синхронным сбросом. Сбрасыватся будет при нуле на reset. Для других триггеров можно сделать примерно также. <{POST_SNAPBACK}> Ну это-то мне понятно... ;) Очевидныое решение. Однако если посмотреть на библиотеку элементов ксайлинкса для спартанов, то там можно обнаружить интересный элемент FDRE, который является D-триггером с синхронным ресетом. При этом ресет реализован несколько не так, как ты предлагаешь - он подается непосредственно на вход ресета триггера в ПЛИС. Транслятор VHDL делает точно так, как ты и сказал. Но в случае реализации сложной логики, например, FSM, это приводит к увеличению длин комбинаторных путей, в то время, как их хотелось бы сократить... Значит нужно подсказать транслятору, что именно этот вход будет синхронным ресетом. Но непонятно как. В этом и заключается мой вопрос. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Elresearch 1 30 декабря, 2004 Опубликовано 30 декабря, 2004 · Жалоба Вы это описание имеете ввиду? -- D F/F with synchronous Reset -- CLK: in STD_LOGIC; -- RESET: in STD_LOGIC; -- DIN: in STD_LOGIC; -- DOUT: out STD_LOGIC; process (CLK) begin if CLK'event and CLK='1' then --CLK rising edge if RESET='1' then --synchronous RESET active High DOUT <= '0'; else DOUT <= DIN; end if; end if; end process; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 192 30 декабря, 2004 Опубликовано 30 декабря, 2004 · Жалоба Вы это описание имеете ввиду? -- D F/F with synchronous Reset -- CLK: in STD_LOGIC; -- RESET: in STD_LOGIC; -- DIN: in STD_LOGIC; -- DOUT: out STD_LOGIC; process (CLK) begin if CLK'event and CLK='1' then --CLK rising edge if RESET='1' then --synchronous RESET active High DOUT <= '0'; else DOUT <= DIN; end if; end if; end process; <{POST_SNAPBACK}> Да, все понял. Спасибо. Дело в том, что я еще не полностью ушел от наследния схемного редактора Foundation и поэтому иногда торможу с очевидными вещами... :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andre_2006 0 13 июля, 2005 Опубликовано 13 июля, 2005 · Жалоба always @(posedge CLK) if(RESET) DATA=0; else DATA=DATA+1; Вот так по моему делаеться синхронный RESET Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Builder 0 13 июля, 2005 Опубликовано 13 июля, 2005 · Жалоба To Andre_2006, а разве не так правильно: always @(posedge CLK, posedge RESET) if(RESET) DATA=0; else DATA=DATA+1; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 13 июля, 2005 Опубликовано 13 июля, 2005 · Жалоба To Andre_2006, а разве не так правильно: always @(posedge CLK, posedge RESET) if(RESET) DATA=0; else DATA=DATA+1; Это асинхронный ресет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Builder 0 14 июля, 2005 Опубликовано 14 июля, 2005 · Жалоба Точно, сори - не внимательно прочитал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться