Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Память для плис
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
sergey sva
плисы программировать пока не приходилось, но скоро наверно придется разбираться с такой задачей.
нужно обрабатывать около 32 дискретных сигналов (частота максимум 1мгц) и 10 сигналов до 5мгц подсчитывать длительность импульсов усреднять и результат выводить в SPI. С плисами пока не занимался поэтому возникает вопрос если сигналы усреднять
нужно будет сохранять n результатов складывать делить... значит нужна будет память (озу)? Какую память лучше использовать вот не плохая MT47H32M16 ? Что может дополнительно пригодится еще кроме памяти для такой задачи?
плис EP1С3 (циклон1)
vitan
Цитата(sergey sva @ Nov 13 2010, 18:59) *
плисы программировать ...
складывать делить...

В последнее время что-то постоянно такие желания у народа появляются.
Ну не программирование это. Это - конфигурирование внутренних ресурсов ПЛИС.
Вы хотите обойтись высокоуровневым описанием? Готовьтесь к неработающему проекту и длительному чтению мануалов.
Если хотите быстро получить нормальные результаты, забудьте о программировании и представьте себе _схему_, которая выполнит Ваше задание. Приступайте только после этого.
sergey sva
Понятно что плис это логика, Поэтому и спрашиваю что раньше не занимался. Память можно и с spi прицепить. Просто если кто занимался скажет: нет это будет не удобно потом придется городить лишнее что то .....
Или для этой задачи может еще потребоваться кроме памяти.....
Lmx2315
..память вы выбрали DDR2 , значит придётся ставит контроллер к ней в плис и с ним разбираться ещё . Может вам подойдёт какая-нибудь SRAM ? У вас же не потоки идут , а просто грубо говоря 40 с чем-то автоматов меряют параметры импульсов , усредняют и кладут результат в память, она может вам большая и не нужна такая и скорости может поскромнее . Вы подсчитывали требуемые мощности на обработку ?
Вам бы надо сделать связку плис - память - проц , плис кладёт в память какие-то сырые данные , проц от туда их берёт и обрабатывает .
sergey sva
Цитата
Вы подсчитывали требуемые мощности на обработку ?

Схему которую нужно сделать в плис представляю так:
42 сигнала поступают на 42 счетчика32р когда сигнал активный счетчик начинает считать когда сигнал пропадает результат измерения умножается на 1/clk результат нужно поместить в память (32бита) и так много раз должно измерятся но не больше 50,
когда будет 50 взять все результаты суммировать и разделить на кол. измерений и отправить в мк.
памяти рабочей много не нужно 50*42 *4 =8400 10кб Может конечно можно и по другому сделать ?
Lmx2315
Делить в ПЛИС на что-то отличное от степени двойки несколько затруднительно . Ну и хорошо что памяти надо так мало уже вроде как DDR2 на 16 Мбайт сразу ни к чему smile.gif .
Осталось разобраться с вопросом что значит активный сигнал ? ..если активный сигнал это череда смен едениц и нулей то это одно , а если активный сигнал это наличие на соответствующем входе ограниченного по времени состояния (1 или 0) то это другое . От этого зависит как именно вы будете узнавать что измеряемое событие у вас начало происходить , с этим надо разобраться. Это я к тому что в первом посте вы говорили об измерении длительности импульсов а не о подсчёте их количеств.

Ну пусть у вас будет 42 счётчика , по какому-то измерительному интервалу с них со всех будет сняты показания и эти показания надо поместить в память (умножать на частоту ни к чему - это всё равно константа общая для всех измерений) , надо думать что и разрядность в 32 бита ни к чему если вы не собираетесь измерять ваши сигналы дольше чем 1 секунду . Результаты можно помещать , каждый по своему адресу в память суммируя с содержимым уже по этому адресу. Делить не обязательно, чтобы не тратить ресурсы понапрасну . Можно будет потом в МК просто дообработать ваши результаты .

Итого вам надо 42 ячейки памяти по (ну пусть будет smile.gif ) 32 бита , а на самом деле ещё меньше , такого объёма вполне можно найти и в самой ПЛИС если конкретно в вашей плис стока памяти не найдётся - поставьте небольшую SRAM-ку
sergey sva
Цитата
Осталось разобраться с вопросом что значит активный сигнал ? ..если активный сигнал это череда смен едениц и нулей то это одно , а если активный сигнал это наличие на соответствующем входе ограниченного по времени состояния (1 или 0) то это другое .

Активный когда на одном из входов 1 и не активный когда 0. может быть и дольше одной секунды но тогда нужно будет ошибку выдавать в мк. Еще смущает такой момент сигналов 42 они не зависимы друг от друга на одном например может быть 1мгц а на другом 500кгц а память будет одна, если одновременно несколько сигналов (а может и все 42) установятся в 0 то их можно не успеть записать в Sram , так прикинул за 0,5-1 мкс нужно успеть записать 42 сигнала 42*4 = 168 байт за 0,5мкс скорость получается 340мб может конечно что то не так посчитал.

Цитата
От этого зависит как именно вы будете узнавать что измеряемое событие у вас начало происходить , с этим надо разобраться. Это я к тому что в первом посте вы говорили об измерении длительности импульсов а не о подсчёте их количеств.

Думал так когда на входе 1 подавать на счетчик импульсы clk когда ноль записывать в память и обнулять счетчик.
только получается точность будет зависеть от длительности импульса.
Lmx2315
Цитата(sergey sva @ Nov 13 2010, 21:06) *
Активный когда на одном из входов 1 и не активный когда 0. может быть и дольше одной секунды но тогда нужно будет ошибку выдавать в мк. Еще смущает такой момент сигналов 42 они не зависимы друг от друга на одном например может быть 1мгц а на другом 500кгц а память будет одна, если одновременно несколько сигналов (а может и все 42) установятся в 0 то их можно не успеть записать в Sram , так прикинул за 0,5-1 мкс нужно успеть записать 42 сигнала 42*4 = 168 байт за 0,5мкс скорость получается 340мб может конечно что то не так посчитал.


..ну пусть так . Пришла единица в канал, что мы делаем ? Увеличим на единицу счётчик событий - это раз , второе начинаем собственно подсчитывать в тактах длительность этой единицы , по окончанию события - пишем результат в запоминающий регистр канала (записываем состояния счётчика событий + значение счётчика длинны импульса) , сбрасываем значение счётчика длинны импульсов .
И так по всем 42 каналам . Всю систему нужно сделать синхронной (работающей от одного источника клоков) , в таком случае опрос выходных регистров с последующей передачей их значений в память не составит проблемы. передавать данные в память можно в то время как идёт новый подсчёт, по этому не имеет значения что разные каналы у нас будут одновременно заканчивать подсчёт . Последовательно всё время обегаем все 42 канала и смотрим готов к передаче данных в память или нет .
В худшем случае , если по всем каналам всё время будут идти короткие импульсы 1 мкс и ещё по 10 каналам 200 нс , тогда конечно передавать в память 42 * 32 бита будет проблематично , в таком случае нужно суммировать непосредственно в каждом канале со значением хранящимся в его канальном регистре , а передавать в память только результат за 50 измерений.

Цитата
Думал так когда на входе 1 подавать на счетчик импульсы clk когда ноль записывать в память и обнулять счетчик.
только получается точность будет зависеть от длительности импульса.


..точность будет по любому зависеть от длинны импульса , просто если быстро-быстро измерять то можно добиться приемлемой точности в худшем случае. Если у вас самые короткие импульсы - 200 нс то что бы измерять с точностью около процента надо мерить на частоте что-то около 500 МГЦ что наверное не наш случай . Наверное по этому вы и проводите серию измерений чтобы усреднить и получить ответ близкий к правде .
iosifk
Цитата(sergey sva @ Nov 13 2010, 22:12) *
Еще смущает такой момент сигналов 42 они не зависимы друг от друга на одном например может быть 1мгц а на другом 500кгц а память будет одна, если одновременно несколько сигналов (а может и все 42) установятся в 0 то их можно не успеть записать в Sram , так прикинул за 0,5-1 мкс нужно успеть записать 42 сигнала 42*4 = 168 байт за 0,5мкс скорость получается 340мб может конечно что то не так посчитал.


Это все так, но только трошечки не так....
Сегодня в ПЛИС тактовая в 50 мгц не проблема. А потому ставим 42 блока привязки к внутренней тактовой, 1 счетчик и 1 командоаппарат, который вполне успеет опросить 50 входов по-очередно и сделать 50 инкрементов значений счетчика. И эти значения забросить в память, а из памяти взять значения для других каналов. Я такое описывал в статьях... Кстати, все тоже самое может делать какой-нибудь быстрый микроконтроллер, например Блэкфин, благо у них есть теперь чипы с флэшью...
sergey sva
Такой вопрос память подобрал AS7C34096A Sram, думаю подключить можно ее к любым портам ep1c3 (кроме тех которые нужны для работы Jtag и flash) может конечно есть какие грабли ?
sergey sva
Ну с памятью понятно тонкостей нет, а как с сопряжением с мк есть тонкости ?
просто иногда бывает например когда устройство готово нужно сделать программу и в процессе программирования уже начинают всплывать нюансы это было бы лучше подключить сюда и тд ... что лучше spi и просто прицепить портов 16 например для at91sam7?
vitan
Можно случайно забыть, что есть пины, которые могут использоваться только для входа. Можно использовать как пользовательские те пины, которые могут понадобиться для конфигурации\отладки (например, JTAG). Можно тактовую частоту не туда завести. И других много можно граблей найти... smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.