|
Вопрос по использованию on chip ram в cyclone4 |
|
|
|
Mar 18 2018, 10:47
|
Группа: Участник
Сообщений: 6
Регистрация: 18-03-18
Пользователь №: 102 451

|
Добрый день.
Стоит задача организации приема данных по нескольким каналам последовательного интерфейса. Для промежуточного хранения данных создал дуал порт память на m9k. Для того, чтобы разобраться, как она работает (до этого с ней не работал), в .bdf из графических примитивов собрал примерно такую конструкцию:
приемник -> модуль чтения/записи -> ip ядро -> передатчик
Приемник и передатчик рабтают по последовательному интерфейсу, выдаю данные на плис и принимаю через терминал на пк.
Модуль чтения/записи раздает адреса, тактирование и флаги wr_en/rd_en, для памяти, программа представляет из себя echo, то есть работает по принципу "принимаю n раз по байту, записываю в память, потом считываю n раз, выдаю"
На этом этапе было все хорошо. Затем я копипастой размножил эту конструкцию, сделал 4 приемника, 4 модуля rd/wr 4 передатчика, 4 графических примитива dual port ram - получилось 4 одинаковых канала вместо одного, 4 параллельных операции чтения/записи в память. В проекте пропорционально увеличилось количество занимаемых ячеек, использованной памяти. Никаких ошибок не было, на rtl тоже все было хорошо. Однако, из 4 таких каналов постоянно работал только один. Я вывел флаги чтения записи во всех модулях чтения/записи на свободные пины, чтобы посмотреть осциллографом, получилась следующая картина: флаги корректно выдаются только на одном (работающем) канале из 4х. На остальных они отсутствуют, хотя каналы идентичные, без обратных связей, выдачу флагов ничего не должно блокировать.
Отсюда возникает несколько вопросов:
1. Можно ли на cyclone4 реализовать несколько параллельных процессов чтения/записи в память? Если да, то в чем моя ошибка? Если нет, то почему квартус не вернул ошибку при компиляции проекта?
2. Если на cyclone4 нельзя реализовать несколько параллельных процессов чтения/записи в память, почему из 4 модулей чтения/записи, флаги раздавал только один (хотя они не зависят от памяти, от других каналов, полностью идентичные, корректно отображаются на rtl)?
Заранее благодарю за ответы.
|
|
|
|
|
 |
Ответов
|
Mar 18 2018, 12:06
|
Группа: Участник
Сообщений: 6
Регистрация: 18-03-18
Пользователь №: 102 451

|
Цитата(iosifk @ Mar 18 2018, 13:59)  Напишите еще как соотносятся частоты приемников и внутренняя тактовая проекта.... Можно ли сделать поочередное чтение памяти или нужен арбитр? Вообще, предусматривается, что будет порядка 8 приемников, и несколько передатчиков. Скорость приемопередатчиков лежит в интервале 9600 - 921600, на отладочной плате стоит кварц на 50М. Нужно организовать прием пакетов по нескольким каналам, сбор их в один и выдачу по одному каналу. Если можно делать параллельные операции чтения/записи в разные области памяти (другими словами - на .bdf понаставить много примитивов dual port ram и асинхронно с ними работать), то задача решается быстро. Я это и сделал, описал в первом сообщении. Если так нельзя, то ставится один примитив ram, и данные по всем каналам пишутся/читаются поочередно. Кварца на 50мгц тут будет достаточно. Это вы имели ввиду под словом арбитр?
|
|
|
|
|
Mar 18 2018, 12:23
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(jkabra @ Mar 18 2018, 15:06)  Если так нельзя, то ставится один примитив ram, и данные по всем каналам пишутся/читаются поочередно. Кварца на 50мгц тут будет достаточно. Это вы имели ввиду под словом арбитр? Как это делается обычно? Есть память. С одной стороны ей пользуется кто-то "главный", например процессор. С другой стороны, в эту память лезут "периферийные" блоки. каждый из них имеет две шины данных - "вход в блок" и "выход из блока"... Первые - включаются параллельно, вторые через мультиплексор - и в память... Причем в этих блоках может быть ФИФО, а может и не быть... Далее. Либо есть автомат (обычно это - DMA), который поочередно проверяет наличие данных в блоках и переписывает их в память. По кругу, либо по-другому алгоритму, циклически и непрерывно... Либо ставится арбитр и тот блок, который получает доступ переписывает данные в память... Причем арбитр может быть как параллельным, так и последовательным.. Ну и должны быть служебные области памяти или регистры. Потому как "главному" надо сообщить сколько данных в каких каналах. А еще неплохо данные записывать не как "кучу байт", а как "кадры". Ну и тогда куда-то писать информацию о "начале", "числе байт", "ошибках" и т.д. Либо эту черновую работу будет делать "главный", но тогда он из области памяти "буфер приема", будет переписывать данные в область памяти "буфер кадров" и загрузка по шине памяти увеличится...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Mar 18 2018, 17:31
|
Группа: Участник
Сообщений: 6
Регистрация: 18-03-18
Пользователь №: 102 451

|
Цитата(iosifk @ Mar 18 2018, 15:23)  Как это делается обычно? Есть память. С одной стороны ей пользуется кто-то "главный", например процессор. С другой стороны, в эту память лезут "периферийные" блоки. каждый из них имеет две шины данных - "вход в блок" и "выход из блока"... Первые - включаются параллельно, вторые через мультиплексор - и в память... Причем в этих блоках может быть ФИФО, а может и не быть... Далее. Либо есть автомат (обычно это - DMA), который поочередно проверяет наличие данных в блоках и переписывает их в память. По кругу, либо по-другому алгоритму, циклически и непрерывно... Либо ставится арбитр и тот блок, который получает доступ переписывает данные в память... Причем арбитр может быть как параллельным, так и последовательным.. Ну и должны быть служебные области памяти или регистры. Потому как "главному" надо сообщить сколько данных в каких каналах. А еще неплохо данные записывать не как "кучу байт", а как "кадры". Ну и тогда куда-то писать информацию о "начале", "числе байт", "ошибках" и т.д. Либо эту черновую работу будет делать "главный", но тогда он из области памяти "буфер приема", будет переписывать данные в область памяти "буфер кадров" и загрузка по шине памяти увеличится... Вы рассказали про организацию работы с памятью в общем смысле, когда изначально вопрос был в другом... Есть конкретная плис, и конкретный компилятор квартуса, и проблема заключается в них
|
|
|
|
Сообщений в этой теме
jkabra Вопрос по использованию on chip ram в cyclone4 Mar 18 2018, 10:47  iosifk Цитата(jkabra @ Mar 18 2018, 15:06) Вообщ... Mar 19 2018, 18:38 Александр77 Цитата(jkabra @ Mar 18 2018, 13:47) Можно... Mar 18 2018, 17:59 jkabra Цитата(Александр77 @ Mar 18 2018, 20:59) ... Mar 18 2018, 19:06  iosifk Цитата(jkabra @ Mar 18 2018, 22:06) затем... Mar 18 2018, 19:18   jkabra Цитата(iosifk @ Mar 18 2018, 22:18) Вы вз... Mar 18 2018, 19:31    iosifk Цитата(jkabra @ Mar 18 2018, 22:31) Можно... Mar 18 2018, 19:47  RobFPGA Приветствую!
Цитата(jkabra @ Mar 18 2018,... Mar 18 2018, 19:55   jkabra Цитата(RobFPGA @ Mar 18 2018, 22:55) Посм... Mar 20 2018, 07:29    iosifk Цитата(jkabra @ Mar 20 2018, 10:29) Скоро... Mar 20 2018, 07:57  Александр77 Цитата(jkabra @ Mar 18 2018, 22:06) ..пер... Mar 19 2018, 16:51 RobFPGA Приветствую!
Цитата(jkabra @ Mar 18 2018... Mar 18 2018, 18:20
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|