eugen_pcad_ru 0 13 марта, 2014 Опубликовано 13 марта, 2014 · Жалоба Есть фрагмент VHDL-кода, к сожалению в ISE не синтезируемый process (start_pulse, end_pulse) begin if falling_edge(start_pulse) then something_works <= '1'; elsif falling_edge(end_pulse) then something_works <= '0'; end if; end process; Переписал, но получилось не эстетично :) Прошу помощи в поиске красивого решения (язык v или vhdl не принципиален). Можно добавить clk, он там за кадром присутствует. Заранее спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 13 марта, 2014 Опубликовано 13 марта, 2014 · Жалоба что-то должно менять по одному фронту, и по другому, еще и по клоку? надо детектить фронты..., reg start_old = 0; reg end_old = 0; always @(posedge clk) begin strat_old <= start_pulse; //сохраняем состояние каждый клок для сравнения с прошлым значением end_old <= end_pulse; //сохраняем состояние каждый клок для сравнения с прошлым значением if((start_old == 1)&&(start_pulse == 0)) //фронт something_works <= 1; if((end_old == 1)&&(end_pulse == 0)) //фронт something_works <= 0; end как то так сейчас если выполнятся оба условия будет 0, можно добавить else между ифами и тогда будет 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 7 14 марта, 2014 Опубликовано 14 марта, 2014 · Жалоба все правильно и так и нужно писать для синхронного дизайна - логика отдельно от управляющих сигналов, но можно и асинхронный триггер описать на v букв меньше always @(negedge start or negedge stop) if(~stop) some<=0; else some<=1; это асинхронный триггер у которого стоп заведен на сброс, а старт на тактовый вход (то есть стоп имеет приоритет и пока он в 0 старт будет игнорироваться), на данные 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eugen_pcad_ru 0 14 марта, 2014 Опубликовано 14 марта, 2014 · Жалоба Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться