Есть задача. Надо на фиксированной частоте(50 или 100 МГц) на 8 бит шину выдавать данные.
Очень критично, чтобы данные шли строго равномерно во времени с одинаковыми промежутками между байтами.
Одна из идей, поместить массив данных размером 100МБ в SDRAM, на асме написать процедуру, которая будет эту память читать в цикле байт за байтом и т.о. на шине памяти мы и получим необходимую последовательность байт.
Вопрос в том, можно ли так настроить контроллер SDRAM контроллеров AT91RM9200 или AT91SAM9260 чтобы из памяти данные выходили равномерно?
Почитав описания я понял, что могут помешать две вещи:
1. При циклическом чтении, по достижении границ страницы или строки, контроллер памяти указанных процессоров будет генерировать команду precharge, потом заново активировать строку и давать новую команду чтения. Этот процесс заберет в сумме 8 тактов. Т.о. в потоке данных будут появляться пробелы.
2. Авто рефреш. Я должен буду настроить количество тактов через которое контроллер будет передавать в SDRAM команду ато рефреша, что так же сделает паузу в выходе данных на 16 тактов.
Верны ли мои опасения, что таким подходом не получить равномерного потока данных или я что-то не допонял в работе SDRAM и указанных выше контроллеров?
Вы не указали необходимую точность "строго равномерно во времени с одинаковыми промежутками между байтами". Но наверняка эту задачу нужно решать используя внешний или внутренний (если есть) буфер FIFO с тактированием требуемой частотой.
На грабли с FIFO наступают пользователи процессоров ADSP2191 и BF531/532.
У этих процессоров FIFO состоит из четырёх слов, которые процессор заполняет равномерно, затем делает паузу и выдаёт наружу.
Цитата(PSP @ Dec 23 2007, 15:55)

Вы не указали необходимую точность "строго равномерно во времени с одинаковыми промежутками между байтами". Но наверняка эту задачу нужно решать используя внешний или внутренний (если есть) буфер FIFO с тактированием требуемой частотой.
Немного перефразирую насчет точности.
Нужно(а точнее очень хочется) чтобы данные на шине появлялись по тактам. В пределах одного периода тактового сигнала, точность не критична, но главное, чтобы не было пропущеных ттактов.
Другими словами при частоте 100МГц на шину должно выйти 100 миллионов байт.
При таких условиях без какого-либо FIFO не обойтись.
WEST128
Dec 25 2007, 13:27
Вашу задачу лучше реализовать не на контроллерах, а на ПЛИС. Особенно если интересуют скорости 100 и более МГц тактовой. В принципе, на Блекфине можно реализовать непрерывный поток на частоте 50 МГц (с некоторым извратом в виде внешней логики и на 100 МГц), используя DMA и параллельную шину PPI. Но я бы делал на ПЛИС - жесткая потактовая логика работы, прозрачная буферизация, можно получить скорости свыше 200 МГц, и произвольная длина слов (потенциально). Недостаток - если вы не работали с ПЛИС, то некоторое время на изучение архитектуры, плюс изучение (или ваяние своего) контроллера SDRAM памяти. Сложность реализации с учетом потенциальных проблем у контроллеров с прерыванием потока данных - примерно одинаковая.
IgorKossak
Dec 25 2007, 20:11
WEST128 +1 в сторону ПЛИС.
Возможный недостаток неимения опыта с лихвой компенсируется превосходством результата.
Для WEST128 : канал DMA у блэкфина не обеспечивает равномерного квантования по времени.
Цитата(etoja @ Dec 26 2007, 11:09)

Для WEST128 : канал DMA у блэкфина не обеспечивает равномерного квантования по времени.
его обеспечивает PPI, через который данные наружу выпихиваются, по внешнему клоку. а у дма для этого есть небольшое фифо.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.