Timmy 1 2 марта, 2016 Опубликовано 2 марта, 2016 · Жалоба Если число делится на 2, у него только одна единица среди битов. 4-входовая LUT выдает 1 для чисел 0001, 0010, 0100, 1000. Следующая такая же LUT принимает 4 выхода с предыдущего слоя, и т.д. Красота. Так просто не выйдет, если, например, взять числа 1000 0000 и 1000 0110, на выходе нижнего слоя различий не будет, получим ложное срабатывание. Поэтому требуется два бита с каждой группы нижнего слоя. И формулировка задачи не "число делится на два", а "число является степенью двойки":). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 2 марта, 2016 Опубликовано 2 марта, 2016 · Жалоба Так просто не выйдет, если, например, взять числа 1000 0000 и 1000 0110, на выходе нижнего слоя различий не будет, получим ложное срабатывание. Поэтому требуется два бита с каждой группы нижнего слоя. И формулировка задачи не "число делится на два", а "число является степенью двойки":). Да, степенью двойки, конечно. Я неправильно выразился. Да, не получается. :crying: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 29 сентября, 2016 Опубликовано 29 сентября, 2016 · Жалоба Дайте подсказку как лучше организовать отсчёт нужного количества тактов. Пример: есть автомат который должен находиться в одном из состояний определённое количество тактов, например: Из состояния S3 автомат переходит в состояние S4, там находится 2 такта, а на третий такт переходит в следующее состояние S5. Как это правильнее реализовать. На счетчике, или на сдвиговом регистре ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 29 сентября, 2016 Опубликовано 29 сентября, 2016 · Жалоба Дайте подсказку как лучше организовать отсчёт нужного количества тактов. Пример: есть автомат который должен находиться в одном из состояний определённое количество тактов, например: Из состояния S3 автомат переходит в состояние S4, там находится 2 такта, а на третий такт переходит в следующее состояние S5. Как это правильнее реализовать. На счетчике, или на сдвиговом регистре ? можно на каждом состоянии загружать декрементирующий счетчик начальным значением и считать до нуля reg_cnt <= reg_cnt - std_logic_vector(to_unsigned(1, reg_cnt 'length))); В комбинационной логике переходов состояний автомата отслеживать значение нуля счетчика и переходить на новое состояние upd процесс счетчика (отдельный) примерно такой: Process (all) begin if rst = '1' then reg_cnt <= (OTHERS => '0'); elsif clk='1' and clk'event then if reg_cnt = std_logic_vector(to_unsigned(0, cnt 'length))) then reg_cnt <= load_cnt; else reg_cnt <= reg_cnt - std_logic_vector(to_unsigned(1, cnt 'length))); end if; end if; end process; в состояниях автомата присваиваете load_cnt необходимое значение и счетчик начинает отсчет... Как-то так Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 17 мая, 2017 Опубликовано 17 мая, 2017 · Жалоба http://www.iconfs.net/en/w.infocom2016/met...osuvannyam-vhdl Методика проектування цифрових фільтрів з застосуванням VHDL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 21 июня, 2017 Опубликовано 21 июня, 2017 · Жалоба http://surf-vhdl.com/how-to-implement-a-di...-dual-port-ram/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 15 сентября, 2017 Опубликовано 15 сентября, 2017 · Жалоба Понравилась идея борьбы с дребезгом на дискретных входах на ресурсе http://embedders.org/blog/gdi/debouncing.html Попробовал для усвоения и показалось интересным. Оказалось задержка не 3 тика, а 4. Даю вместе с бенчем. drebezg.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 15 сентября, 2017 Опубликовано 15 сентября, 2017 · Жалоба Понравилась идея борьбы с дребезгом на дискретных входах на ресурсе http://embedders.org/blog/gdi/debouncing.html Попробовал для усвоения и показалось интересным. Оказалось задержка не 3 тика, а 4. Даю вместе с бенчем. Какая практическая польза от применения такого антидребезга в FPGA ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 15 сентября, 2017 Опубликовано 15 сентября, 2017 · Жалоба Какая практическая польза от применения такого антидребезга в FPGA ? Прямая... При сборе информации с дискретных входов я обычно делал "в лоб". Это усложняло архитектуру(хранение счетчиков(предистория) по числу входных разрядов). Тут на порядок проще и экономит ресурс. Странный вопрос Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 15 сентября, 2017 Опубликовано 15 сентября, 2017 · Жалоба Прямая... При сборе информации с дискретных входов я обычно делал "в лоб". Это усложняло архитектуру(хранение счетчиков(предистория) по числу входных разрядов). Тут на порядок проще и экономит ресурс. Странный вопрос На самом деле немного не так... Если речь идет о большом количестве дискретных входов, то многоканальный таймер и немного памяти будут предпочтительней. А вот если речь идет о нескольких входных сигналах, которые идут на последователностную логику и в том числе на FSM, то тогда действительно лучше иметь отдельные блоки подавления дребезга... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 15 сентября, 2017 Опубликовано 15 сентября, 2017 · Жалоба На самом деле немного не так... Если речь идет о большом количестве дискретных входов, то многоканальный таймер и немного памяти будут предпочтительней. А вот если речь идет о нескольких входных сигналах, которые идут на последователностную логику и в том числе на FSM, то тогда действительно лучше иметь отдельные блоки подавления дребезга... Так это как раз мой случай. Я ведь принимаю непрерывно про SPI больше сотни входов. Это порождает громоздкие постороения на счетчиках для дальнейшего учета в память.(это уже доступно внешнему процессору) Тут решается красивее. Тут только фильтр. Простой и понятный. Для расширение разрядности счетчиков нужно добавлять дополнительные регистры. 2**N Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 1 13 ноября, 2017 Опубликовано 13 ноября, 2017 · Жалоба можно на каждом состоянии загружать декрементирующий счетчик начальным значением и считать до нуля reg_cnt <= reg_cnt - std_logic_vector(to_unsigned(1, reg_cnt 'length))); В комбинационной логике переходов состояний автомата отслеживать значение нуля счетчика и переходить на новое состояние upd процесс счетчика (отдельный) примерно такой: .... в состояниях автомата присваиваете load_cnt необходимое значение и счетчик начинает отсчет... Как-то так Добрый день! Интересно, почему часто применяется отсчет счетчиком до нуля и загрузка в него каких-то начальных значений. Почему просто не обнулять счетчик и не считать до требуемой величины? Например: reg [7:0] cnt; always@(posedge iclk) begin if (rst) cnt <= '0; else if (~&cnt) cnt <= cnt + 1'b1; end always_comb begin strb0 = cnt == 10; strb1 = cnt == 12; ... end Стробы strb0,1... можно использовать для переход МКС. Rst = strb0||strb1... ну или в состояниях МКС описать. На мой взгляд, гораздо логичнее выглядит. Отсчет от Н до нуля - это вопрос предпочтений? Или есть какое-то обоснование, почему так лучше? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 13 ноября, 2017 Опубликовано 13 ноября, 2017 · Жалоба Потому, что сравнивать с нулем гораздо проще и быстрее, чем сравнивать с неким числом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 13 ноября, 2017 Опубликовано 13 ноября, 2017 (изменено) · Жалоба Потому, что сравнивать с нулем гораздо проще и быстрее, чем сравнивать с неким числом. А какая разница ? Компаратору без разницы, что сравнивать, схема у него одинаковая, что для сравнения нулей или других чисел. Другой вопрос, если нам надо например одним счетчиком отсчитывать разные интервалы. Например: Счетчик досчитал до 10 - что-то делаем, и сбрасываем счетчик. Счетчик досчитал до 15 - что-то делаем, и сбрасываем счетчик. Счетчик досчитал до 18 - что-то делаем, и сбрасываем счетчик. Счетчик досчитал до 24 - что-то делаем, и сбрасываем счетчик. Счетчик досчитал до 32 - что-то делаем, и сбрасываем счетчик. В этом случае у нас будет несколько схем сравнения с 10, 15, 18, 24, 32 - что собственно совсем не хорошо. В случае если счетчик считает до 0 у нас будет только 1 схема сравнения с нулем. Изменено 13 ноября, 2017 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 3 13 ноября, 2017 Опубликовано 13 ноября, 2017 (изменено) · Жалоба Сравнение с нулём - это простое ИЛИ всех битов счётчика. Сравнение с каким-то числом - это сначала XOR с заданным значением, после чего уже ИЛИ всех битов результата. Изменено 13 ноября, 2017 пользователем one_eight_seven Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться