Перейти к содержанию
    

Verilog Делитель на 7 (и на 28)

Добрый день

Подскажите как можно реализовать Делитель на 7 на Verilog не прибегая к оператору /

Так же интересует делитель на 28. Правильно ли будет сначала делить сигнал на 7, а затем на 4?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день

Подскажите как можно реализовать Делитель на 7 на Verilog не прибегая к оператору /

Так же интересует делитель на 28. Правильно ли будет сначала делить сигнал на 7, а затем на 4?

 

Приветствую!

Первая мысль - это на основе обычного счетчика.

Считаете до 7(28) и сбрасываете счетчик.

 

Гугл не помог?

Вот что на глаза попадалось... примеры Verilog

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

x/7 = x/(8-1) = (x shr 3) - x

Это что, какая-то новая математика?

 

 

 

Если x/7 = x/(8-1) = (x shr 3) - x = x/8 - x, тогда:

 

x/7 + x = x/8 или

 

8x/7 = x/8 или

 

8/7 = 1/8

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день

Подскажите как можно реализовать Делитель на 7 на Verilog не прибегая к оператору /

Так же интересует делитель на 28. Правильно ли будет сначала делить сигнал на 7, а затем на 4?

а чем обычное деление не устраивает?

PS на форуме модуль целочисленного деления уже выкладывали...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день

Подскажите как можно реализовать Делитель на 7 на Verilog не прибегая к оператору /

Так же интересует делитель на 28. Правильно ли будет сначала делить сигнал на 7, а затем на 4?

Если время исполнения операции позволяет - можно реализовать деление вычитанием. Это самый простой способ. Имеет свои недостатки.

Есть ещё вариант реализовать деление "столбиком" - чуть посложнее и побыстрее.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можете рассмотреть еще такой способ:

 

Разделить на 7 - это все равно что умножить на 1/7, что примерно равно 0.142857142 или 37449/(2^18).

 

То есть умножаете свое число на 37449 и сдвигаете на 18 разрядов. Меняя числа в делителе и делимом, подстраивая их под особенности умножителей конкретного кристалла, можно варьировать точность.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть умножаете свое число на 37449 и сдвигаете на 18 разрядов. Меняя числа в делителе и делимом, подстраивая их под особенности умножителей конкретного кристалла, можно варьировать точность.

Обобщая - делим на калькуляторе 1 на 7, получаем 0.1428... Последовательно умножаем результат на 2, пока целая часть не достигнет нужной точности:

0.28, 0.57, 1.14, 2.28, ... 73.14 (ошибка 0.2%) ... Так получаем: x 73 / 512 (сдвигом) = 1 / 7.014.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если всё делается для FPGA (где умножители/делители являются дифицитным товаром) то используем умножение на константу (сумматоры+сдвигатели)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Точно, представляем как cумму двух сдвинутых чисел (мы например сдвигами получаем 1/8 и 1/64).

 

1/7-(1/8+1/64)=0.00223 это ошибка этого решения.

 

Точнее

 

1/7-(1/8+1/64+1/512)=0.000279.

 

И так далее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Точно, представляем как cумму двух сдвинутых чисел (мы например сдвигами получаем 1/8 и 1/64).

...

И так далее.

Еще можно попытаться использовать не только сумму сдвинутых чисел, но и вычитать некоторые из них: 1/K + 1/L - 1/M + 1/N

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще можно попытаться использовать не только сумму сдвинутых чисел, но и вычитать некоторые из них: 1/K + 1/L - 1/M + 1/N

Да, и фактически это оптимизированное умножение на константу, близкую к 1/7. Можно даже использовать корегенератор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите как можно реализовать Делитель на 7 на Verilog не прибегая к оператору /

Оконкретили бы вопрос, что надо делить входную частоту или значение на семерку?

В первом случае счетчик, а по второму уже накидали решения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Оконкретили бы вопрос, что надо делить входную частоту или значение на семерку?

Делить частоту принимаемого сигнала, причем затрачивая на это минимальное количество ресурсов ПЛИС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...