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

 
 
13 страниц V  « < 10 11 12 13 >  
Reply to this topicStart new topic
> "Схемотехнические трюки для ПЛИСоводов", создание аналога "Алгоритмические трюки для программистов"
Timmy
сообщение Mar 2 2016, 12:39
Сообщение #166


Знающий
****

Группа: Участник
Сообщений: 821
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(ViKo @ Mar 2 2016, 15:22) *
Если число делится на 2, у него только одна единица среди битов. 4-входовая LUT выдает 1 для чисел 0001, 0010, 0100, 1000. Следующая такая же LUT принимает 4 выхода с предыдущего слоя, и т.д. Красота.

Так просто не выйдет, если, например, взять числа 1000 0000 и 1000 0110, на выходе нижнего слоя различий не будет, получим ложное срабатывание. Поэтому требуется два бита с каждой группы нижнего слоя. И формулировка задачи не "число делится на два", а "число является степенью двойки":).
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 2 2016, 13:14
Сообщение #167


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 7 779
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Timmy @ Mar 2 2016, 15:39) *
Так просто не выйдет, если, например, взять числа 1000 0000 и 1000 0110, на выходе нижнего слоя различий не будет, получим ложное срабатывание. Поэтому требуется два бита с каждой группы нижнего слоя. И формулировка задачи не "число делится на два", а "число является степенью двойки":).

Да, степенью двойки, конечно. Я неправильно выразился.
Да, не получается. crying.gif
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Sep 29 2016, 07:39
Сообщение #168


Местный
***

Группа: Участник
Сообщений: 430
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Дайте подсказку как лучше организовать отсчёт нужного количества тактов.
Пример: есть автомат который должен находиться в одном из состояний определённое количество тактов, например: Из состояния S3 автомат переходит в состояние S4, там находится 2 такта, а на третий такт переходит в следующее состояние S5. Как это правильнее реализовать. На счетчике, или на сдвиговом регистре ?
Go to the top of the page
 
+Quote Post
Maverick
сообщение Sep 29 2016, 07:58
Сообщение #169


я только учусь...
******

Группа: Модераторы
Сообщений: 3 394
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(Flip-fl0p @ Sep 29 2016, 10:39) *
Дайте подсказку как лучше организовать отсчёт нужного количества тактов.
Пример: есть автомат который должен находиться в одном из состояний определённое количество тактов, например: Из состояния 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 необходимое значение и счетчик начинает отсчет... Как-то так


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Мур
сообщение May 17 2017, 16:34
Сообщение #170


Знающий
****

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



http://www.iconfs.net/en/w.infocom2016/met...osuvannyam-vhdl

Методика проектування цифрових фільтрів з застосуванням VHDL
Go to the top of the page
 
+Quote Post
Мур
сообщение Jun 21 2017, 17:00
Сообщение #171


Знающий
****

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




http://surf-vhdl.com/how-to-implement-a-di...-dual-port-ram/
Go to the top of the page
 
+Quote Post
Мур
сообщение Sep 15 2017, 08:06
Сообщение #172


Знающий
****

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



Понравилась идея борьбы с дребезгом на дискретных входах на ресурсе http://embedders.org/blog/gdi/debouncing.html

Попробовал для усвоения и показалось интересным. Оказалось задержка не 3 тика, а 4. Даю вместе с бенчем.
Прикрепленные файлы
Прикрепленный файл  drebezg.zip ( 2.27 килобайт ) Кол-во скачиваний: 15
 
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Sep 15 2017, 08:26
Сообщение #173


Местный
***

Группа: Участник
Сообщений: 430
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(Мур @ Sep 15 2017, 11:06) *
Понравилась идея борьбы с дребезгом на дискретных входах на ресурсе http://embedders.org/blog/gdi/debouncing.html

Попробовал для усвоения и показалось интересным. Оказалось задержка не 3 тика, а 4. Даю вместе с бенчем.

Какая практическая польза от применения такого антидребезга в FPGA ?
Go to the top of the page
 
+Quote Post
Мур
сообщение Sep 15 2017, 08:58
Сообщение #174


Знающий
****

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



Цитата(Flip-fl0p @ Sep 15 2017, 11:26) *
Какая практическая польза от применения такого антидребезга в FPGA ?

Прямая...
При сборе информации с дискретных входов я обычно делал "в лоб". Это усложняло архитектуру(хранение счетчиков(предистория) по числу входных разрядов). Тут на порядок проще и экономит ресурс.

Странный вопрос
Go to the top of the page
 
+Quote Post
iosifk
сообщение Sep 15 2017, 09:03
Сообщение #175


Гуру
******

Группа: Модераторы
Сообщений: 3 706
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Мур @ Sep 15 2017, 11:58) *
Прямая...
При сборе информации с дискретных входов я обычно делал "в лоб". Это усложняло архитектуру(хранение счетчиков(предистория) по числу входных разрядов). Тут на порядок проще и экономит ресурс.

Странный вопрос

На самом деле немного не так...
Если речь идет о большом количестве дискретных входов, то многоканальный таймер и немного памяти будут предпочтительней.
А вот если речь идет о нескольких входных сигналах, которые идут на последователностную логику и в том числе на FSM, то тогда действительно лучше иметь отдельные блоки подавления дребезга...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Мур
сообщение Sep 15 2017, 09:16
Сообщение #176


Знающий
****

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



Цитата(iosifk @ Sep 15 2017, 12:03) *
На самом деле немного не так...
Если речь идет о большом количестве дискретных входов, то многоканальный таймер и немного памяти будут предпочтительней.
А вот если речь идет о нескольких входных сигналах, которые идут на последователностную логику и в том числе на FSM, то тогда действительно лучше иметь отдельные блоки подавления дребезга...

Так это как раз мой случай. Я ведь принимаю непрерывно про SPI больше сотни входов. Это порождает громоздкие постороения на счетчиках для дальнейшего учета в память.(это уже доступно внешнему процессору) Тут решается красивее.

Тут только фильтр. Простой и понятный. Для расширение разрядности счетчиков нужно добавлять дополнительные регистры. 2**N
Go to the top of the page
 
+Quote Post
nice_vladi
сообщение Nov 13 2017, 07:07
Сообщение #177


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 7-09-16
Из: Томск
Пользователь №: 93 239



Цитата(Maverick @ Sep 29 2016, 07:58) *
можно на каждом состоянии загружать декрементирующий счетчик начальным значением и считать до нуля

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... ну или в состояниях МКС описать.

На мой взгляд, гораздо логичнее выглядит. Отсчет от Н до нуля - это вопрос предпочтений? Или есть какое-то обоснование, почему так лучше?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 13 2017, 07:20
Сообщение #178


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 7 779
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Потому, что сравнивать с нулем гораздо проще и быстрее, чем сравнивать с неким числом.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Nov 13 2017, 07:34
Сообщение #179


Местный
***

Группа: Участник
Сообщений: 430
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(ViKo @ Nov 13 2017, 10:20) *
Потому, что сравнивать с нулем гораздо проще и быстрее, чем сравнивать с неким числом.

А какая разница ? Компаратору без разницы, что сравнивать, схема у него одинаковая, что для сравнения нулей или других чисел.

Другой вопрос, если нам надо например одним счетчиком отсчитывать разные интервалы. Например:
Счетчик досчитал до 10 - что-то делаем, и сбрасываем счетчик.
Счетчик досчитал до 15 - что-то делаем, и сбрасываем счетчик.
Счетчик досчитал до 18 - что-то делаем, и сбрасываем счетчик.
Счетчик досчитал до 24 - что-то делаем, и сбрасываем счетчик.
Счетчик досчитал до 32 - что-то делаем, и сбрасываем счетчик.
В этом случае у нас будет несколько схем сравнения с 10, 15, 18, 24, 32 - что собственно совсем не хорошо.
В случае если счетчик считает до 0 у нас будет только 1 схема сравнения с нулем.

Сообщение отредактировал Flip-fl0p - Nov 13 2017, 07:35
Go to the top of the page
 
+Quote Post
one_eight_seven
сообщение Nov 13 2017, 08:09
Сообщение #180


Знающий
****

Группа: Участник
Сообщений: 736
Регистрация: 3-10-08
Из: Москва
Пользователь №: 40 664



Сравнение с нулём - это простое ИЛИ всех битов счётчика.

Сравнение с каким-то числом - это сначала XOR с заданным значением, после чего уже ИЛИ всех битов результата.

Сообщение отредактировал one_eight_seven - Nov 13 2017, 08:09
Go to the top of the page
 
+Quote Post

13 страниц V  « < 10 11 12 13 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th December 2017 - 09:13
Рейтинг@Mail.ru


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