Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 30 каналов сравнения
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
oleg_d
С ПЛИС я раньше не работал. Поэтому прошу вас, уважаемые участники форума, подскажите возможно ли на ПЛИС решить следующую задачу. Нужно сделать один таймер 24 бита, 30 каналов сравнения все по 24 бита. Выход каждого канала сравнения идет на свою ножку ПЛИС. Значения для каналов сравнения задаем через внешнюю 8 бит шину. Частота на входе таймера 1.5 МГц. И какой девайс потянет такую задачу.
Gorby
Цитата(oleg_d @ May 13 2006, 22:55) *
С ПЛИС я раньше не работал. Поэтому прошу вас, уважаемые участники форума, подскажите возможно ли на ПЛИС решить следующую задачу. Нужно сделать один таймер 24 бита, 30 каналов сравнения все по 24 бита. Выход каждого канала сравнения идет на свою ножку ПЛИС. Значения для каналов сравнения задаем через внешнюю 8 бит шину. Частота на входе таймера 1.5 МГц. И какой девайс потянет такую задачу.


А точно полтора мегагерца? Не 150? У меня в Спартане-3 32-битный синхронный счетчик на 100 мгц работает...

Решение очень простое. Строим 24-х разрядный синхронный счетчик. Далее делаем 30 цифровых 24-битных компараторов (скажем, на XOR). Ну, и кучу 8-битных регистров для записи значений для компараторов (по 3 на один компаратор). В любой Спартан задача ложится. Еще и куча места останется.

Непонятности:
Счетчик, он должен быть загружаемым или нет? Или просто считает по кругу? Тогда какой смысл? Или он запускается по какому-то событию? А останавливается когда?

Что происходит (вернее, вам нужно) на выходах каналов? Пока получается, что там будет присутствовать единичный импульс длиной в период CLK.
Kazap
Если значения сравнения фиксированные, то можно (Применительно Quartus от Altera)
воспользоваться двумя мегафункциями- LPM_count на 24 бита и дешифратор с соответствующими выходами
Если не знаете какую ПЛИС хотите использовать, то при создании проекта установите
параметр "компилятор назначает устройство". Если устройство хотите CPLD, то это предположительно
EPM7256s(для 5V)-epm3256(для 3V). Eсли в вашем усторйстве больше нет функций, кроме тех что вы назвали, то лучше используйте CPLD- для FPGA понадобится eщe одна микросхема EEPROM для ее загрузки.
А если ee не ставить,сразу паралельно с ПЛИС осваивать загрузку FPGA с контроллера будет затруднительно
oleg_d
1.5 MHz достаточно. Нужна точность 0.1 градуса при 20 тысячь оборотов в минуту.
Счетчик пусть бежит по кругу. Но нужно будет добавить регистр захвата счетчика по перепаду на одном из входов ПЛИС, а считывать значение этого 24 битного регистра через внешнюю 8 битную шину. Компараторы должны быть устроены так, чтобы после первого совпадения выставлялась единица, а после второго обратно ноль. Второй вариант - каждый канал сравнения содержит два компаратора. При совпадении с первым компаратором на выходе устанавливается единица, а при совпадении со вторым обратно ноль.
SpyBot
Цитата(oleg_d @ May 14 2006, 14:26) *
1.5 MHz достаточно. Нужна точность 0.1 градуса при 20 тысячь оборотов в минуту.
Счетчик пусть бежит по кругу. Но нужно будет добавить регистр захвата счетчика по перепаду на одном из входов ПЛИС, а считывать значение этого 24 битного регистра через внешнюю 8 битную шину. Компараторы должны быть устроены так, чтобы после первого совпадения выставлялась единица, а после второго обратно ноль. Второй вариант - каждый канал сравнения содержит два компаратора. При совпадении с первым компаратором на выходе устанавливается единица, а при совпадении со вторым обратно ноль.

Тогда придется реализовывать для каждого входа небольшой фильтр, чтобы исключить ложные срабатывания. ИМХО на CPLD лучше не смотреть. Или нет, цену все-таки узнать будет интересно wink.gif
oleg_d
Цитата(SpyBot @ May 14 2006, 13:35) *
Цитата(oleg_d @ May 14 2006, 14:26) *

1.5 MHz достаточно. Нужна точность 0.1 градуса при 20 тысячь оборотов в минуту.
Счетчик пусть бежит по кругу. Но нужно будет добавить регистр захвата счетчика по перепаду на одном из входов ПЛИС, а считывать значение этого 24 битного регистра через внешнюю 8 битную шину. Компараторы должны быть устроены так, чтобы после первого совпадения выставлялась единица, а после второго обратно ноль. Второй вариант - каждый канал сравнения содержит два компаратора. При совпадении с первым компаратором на выходе устанавливается единица, а при совпадении со вторым обратно ноль.

Тогда придется реализовывать для каждого входа небольшой фильтр, чтобы исключить ложные срабатывания. ИМХО на CPLD лучше не смотреть. Или нет, цену все-таки узнать будет интересно wink.gif


Вход только один для регистра захвата счетчика если нещитать 8 битную шину.
Gorby
Цитата(oleg_d @ May 14 2006, 14:26) *
1.5 MHz достаточно. Нужна точность 0.1 градуса при 20 тысячь оборотов в минуту.
Счетчик пусть бежит по кругу. Но нужно будет добавить регистр захвата счетчика по перепаду на одном из входов ПЛИС, а считывать значение этого 24 битного регистра через внешнюю 8 битную шину. Компараторы должны быть устроены так, чтобы после первого совпадения выставлялась единица, а после второго обратно ноль. Второй вариант - каждый канал сравнения содержит два компаратора. При совпадении с первым компаратором на выходе устанавливается единица, а при совпадении со вторым обратно ноль.


И это не проблема. ТОлько это не особый компаратор, а счетный триггер после компаратора. А два 24-битных компаратора на каждый канал - это явно избыточно.

Цитата(oleg_d @ May 14 2006, 15:19) *
Вход только один для регистра захвата счетчика если нещитать 8 битную шину.


Ну-ну. А строб записи в компаратор? А шина адреса компараторов (их, помнится 30*3=90 ) ?
Что-то устройство стремительно перестает быть простым и помещаться в CPLD...
iosifk
Цитата(oleg_d @ May 13 2006, 22:55) *
С ПЛИС я раньше не работал. Поэтому прошу вас, уважаемые участники форума, подскажите возможно ли на ПЛИС решить следующую задачу. Нужно сделать один таймер 24 бита, 30 каналов сравнения все по 24 бита. Выход каждого канала сравнения идет на свою ножку ПЛИС. Значения для каналов сравнения задаем через внешнюю 8 бит шину. Частота на входе таймера 1.5 МГц. И какой девайс потянет такую задачу.


А я бы сделал так:
Один таймер, который считает свои 24 бита и сравнивает результат.
Но только дальше надо сделать 30 тайм-слотов и в каждый тайм-слот из памяти загружать данные для этого канала таймера, и соответственно после изменения счетчика его данные снова закидывать в память. Таким образом, получим:
счетчик таймера 24 бита,
Схема сравнения 24 бита,
мультиплексор на 30 выходов
двухпортовое ОЗУ 30х24,
счетчик тайм-слотов, чтобы считать до 30,
сумматор для счетчика тайм-слотов

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

Удачи!
SpyBot
Цитата(oleg_d @ May 14 2006, 15:19) *
Вход только один для регистра захвата счетчика если нещитать 8 битную шину.

Имелся ввиду вход от датчика оборотов. У вас же какой-то двигатель?
Gate
По ресурсам: 24 бит регистр + компаратор займет 24 триггера + примерно 16 4-входовых LUT. Итого на Ваши 30 компараторов - 720 триггеров и ~500 LUT только на компараторы. CPLD типа altera max или xilinx coolrunner опадают сразу, остаются fpga - семейство cyclone или у altera или спартаны у xilinx. Если делать по тупому, то влезет даже в самые младшие модели. Если нужно в fpga запихнуть что-то еще, то можно заниматься оптимизацией, по типу предложенной iosifk: увеличить частоту в N раз, константы для компараторов запихать в память, за 1 такт делать М сравнений (M*N>=30) - это потребует М компараторов.
Если Ваша задача допускает переформулировку, например, все 30 компараторов не обязательно делать полностью независимыми, а объединить их в группы, у которых старшие биты одинаковы, то тогда ресурсы можно сильно уменьшить, и, возможно, такая схеме влезет в старшие cpld (c >=512 триггеров на борту). Повторяю, проблема по ресурсам упирается в первую очередь в память для хранения констант для компараторов.
iosifk
Цитата(Gate @ May 15 2006, 12:47) *
Если нужно в fpga запихнуть что-то еще, то можно заниматься оптимизацией, по типу предложенной iosifk: увеличить частоту в N раз, константы для компараторов запихать в память, за 1 такт делать М сравнений (M*N>=30) - это потребует М компараторов.

. Повторяю, проблема по ресурсам упирается в первую очередь в память для хранения констант для компараторов.


Еще раз - нужен ОДИН счетчик для таймера и ОДИН компаратор,
Еще нужен ОДИН счетчик и ОДИН сумматор, как указатели на память.
И двухпортовка 24х30х2 - одна часть для значений таймеров, другая для значений, с которыми надо сравнивать. Возможно при 30х1,5 Мег потребуется конвейер для цепи сравнения.
поднимаем частоту в 30 раз относительно частоты сэмплирования
А вот результат сравнения недо разнести по 30 битам через мультиплексор.

Вот только можно здесь добавить - а зачем нужно сравнивать с каким-то значением? Почему нельзя загружать код и декрементировать до нуля? При этом еще чуть-чуть будет экономии...
Я не задаю вопрос: "А для чего нужно 24 бита, нельзя ли сделать предделитель так, чтобы было несколько диапазонов"? Это дело того, кто отправил пост.
Удачи!
dxp
Цитата(Gate @ May 15 2006, 15:47) *
По ресурсам: 24 бит регистр + компаратор займет 24 триггера + примерно 16 4-входовых LUT. Итого на Ваши 30 компараторов - 720 триггеров и ~500 LUT только на компараторы. CPLD типа altera max или xilinx coolrunner опадают сразу, остаются fpga - семейство cyclone или у altera или спартаны у xilinx.

Еще есть MAX II.
Gate
Цитата(dxp @ May 15 2006, 13:30) *
Еще есть MAX II.

Да, верно, я о них забыл! sad.gif Например epm1270 в не в bga корпусе. Или, если не страшиться bga - epm2210 - похоже, что в него влезет всяко. Не знаю, есть ли у xilinx сплд такого большого объема. Но замечу, что по цене макс2 превзойдет циклон 1или 2.
vetal
MAX II - fpga, со структурой ЛЭ cyclone и интегрированным загрузочным ПЗУ.
Altera назвала их CPLD для рекламы.
oleg_d
Kazap
-----------------------------------------------------------------------------------------------------------------
для FPGA понадобится eщe одна микросхема EEPROM для ее загрузки.
А если ee не ставить,сразу паралельно с ПЛИС осваивать загрузку FPGA с контроллера будет затруднительно
-------------------------------------------------------------------------------------------------------------------
В чем трудности?
oleg_d
Цитата(SpyBot @ May 15 2006, 11:06) *
Цитата(oleg_d @ May 14 2006, 15:19) *

Вход только один для регистра захвата счетчика если нещитать 8 битную шину.

Имелся ввиду вход от датчика оборотов. У вас же какой-то двигатель?


Да мотор, и формированием импульсов с датчика вращения
занимается LM1815 и еще микроконтроллер.
oleg_d
Цитата(iosifk @ May 15 2006, 12:24) *
Цитата(Gate @ May 15 2006, 12:47) *


Если нужно в fpga запихнуть что-то еще, то можно заниматься оптимизацией, по типу предложенной iosifk: увеличить частоту в N раз, константы для компараторов запихать в память, за 1 такт делать М сравнений (M*N>=30) - это потребует М компараторов.

. Повторяю, проблема по ресурсам упирается в первую очередь в память для хранения констант для компараторов.


Еще раз - нужен ОДИН счетчик для таймера и ОДИН компаратор,
Еще нужен ОДИН счетчик и ОДИН сумматор, как указатели на память.
И двухпортовка 24х30х2 - одна часть для значений таймеров, другая для значений, с которыми надо сравнивать. Возможно при 30х1,5 Мег потребуется конвейер для цепи сравнения.
поднимаем частоту в 30 раз относительно частоты сэмплирования
А вот результат сравнения недо разнести по 30 битам через мультиплексор.

Вот только можно здесь добавить - а зачем нужно сравнивать с каким-то значением? Почему нельзя загружать код и декрементировать до нуля? При этом еще чуть-чуть будет экономии...
Я не задаю вопрос: "А для чего нужно 24 бита, нельзя ли сделать предделитель так, чтобы было несколько диапазонов"? Это дело того, кто отправил пост.
Удачи!


Обороты должны плавно менятса от 0.5 до 20000 в минуту.
Переключение диапазонов сделать можно, и тогда хватило бы и 16 битного
счетчика, но алгоритм работы микроконтроллера усложнится.
Как писали выше CPLD для этой задачи маловат. Значит буду использовать
FPGA младшей модели, ведь ее ресурсов достаточно для выполнения
моей задачи с 24 битным разрешением. Ну а раз ресурсов хватает, то думаю
лучше упростиь алгоритм.
SpyBot
Цитата(oleg_d @ May 16 2006, 02:50) *
Да мотор, и формированием импульсов с датчика вращения
занимается LM1815 и еще микроконтроллер.

А, ну тогда фильтрация в самой ПЛИС не требуется. Просто как-то тоже работал с двигателем и именно на этом моменте потерял много времени smile.gif
Kazap
Можно совсем просто сделать, если использовать MAX2-
- поднять входную частоту в 32 раз
-сделать счетчик не 24, а 29 разрядов
- для хранения констант использовать UFM с организацией 30х24
- старшие 5 разрядов адреса использовать для выборки UFM
- 1 цифровой компаратор exclus OR сравнивает по очереди содержимое
ячеек UFM с остальными разрядами счетчика
- при совпадении дв.-десдешифратор, подключенный к 5 старшим разрядам
переключает Dтриггер,подключенный на соотвествующий выход
Что касается вашего вопроса- в чем сложность- в вашем заголовке-
вы начинающий, а осваивать и ПЛИС, и способы загрузки..
Gate
Цитата(Kazap @ May 17 2006, 23:36) *
Можно совсем просто сделать, если использовать MAX2-
- поднять входную частоту в 32 раз
-сделать счетчик не 24, а 29 разрядов
- для хранения констант использовать UFM с организацией 30х24

А Вы уверены, что UFM сможет выдавать 24бит данные с частотой 32*1.5=48 Мгц? У меня сложилось впечатление, что она _гораздо_ медленнее.
Kazap
Цитата(Gate @ May 18 2006, 13:59) *
Цитата(Kazap @ May 17 2006, 23:36) *

Можно совсем просто сделать, если использовать MAX2-
- поднять входную частоту в 32 раз
-сделать счетчик не 24, а 29 разрядов
- для хранения констант использовать UFM с организацией 30х24

А Вы уверены, что UFM сможет выдавать 24бит данные с частотой 32*1.5=48 Мгц? У меня сложилось впечатление, что она _гораздо_ медленнее.


Вообще-то откуда такое впячетление, что flash медленна- на запись, естественно, но на чтение?
Есть какой нибудь даташит, откуда вы это взяли?
Я еще не использовал UFM в max2 ,но собираюсь. Но если судить по контроллерам, то огромное количество работают на таких скоростях.
Gate
Цитата(Kazap @ May 22 2006, 19:09) *
Вообще-то откуда такое впячетление, что flash медленна- на запись, естественно, но на чтение?
Есть какой нибудь даташит, откуда вы это взяли?

Ответ очевиден: даташит на max II с сайта альтеры tongue.gif
Kazap
Посмотрел. Да, действительно, маленько не хватит быстродействия smile.gif . Но у алтеры по max2 есть двe противоречивых цифры- в одном случае они дают мах. гарантированную частоту регистра адреса UFM 10 МГц, в другом- предлагают заменить AT25080a с тактовой частотой 20МГц
1)tACLK Address register 100 ns
2)EEPROM AT25080A 8,192 20 MHz
Gate
Цитата(Kazap @ May 23 2006, 22:55) *
Но у алтеры по max2 есть двe противоречивых цифры- в одном случае они дают мах. гарантированную частоту регистра адреса UFM 10 МГц, в другом- предлагают заменить AT25080a с тактовой частотой 20МГц

Все еще хуже, чем кажется - у UFM _последовательный_ интерфейс для адреса и данных с максимальной тактовой 10 мгц.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.