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

jkabra

Участник
  • Постов

    6
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Спасибо, сделаю это! Я тоже с этим сталкивался. Как я понимаю, это квартус упрощает дизайн, и он считает, что в вашем проекте не описано никакой логики (после всех "упрощений"). Иногда проблема была очевидна, а если нет, то проверял последовательно весь код, или переписывал проблемный кусок с нуля, это помогало. Скорость 921600 я указал в бит/с. Поэтому 5 тактов, это если 10 каналов и писать по биту. На деле, я пишу по 8 бит, а кадр представляет из себя 10 бит (+старт стоп биты). По тактам запас будет побольше, раз в 10. Можно использовать один примитив памяти, хорошо, проблем нет. Нет проблем в этом проекте, в другом, возможно, я не смогу обойтись без параллельных процессов работы с памятью. Поэтому и разбираюсь с ними сразу, чтобы потом не уткнуться.
  2. Можно написать "главного", который будет работать с памятью, объявить 1 примитив, и писать/читать данные циклически или как-то еще. И это работает. Но как я понял из чтения даташитов, и как сказал Rob: Выходит, что каждый блок памяти может иметь своего "главного", всего в дизайне я задействую 4 блока m9k (4 примитива по одному m9k каждый) и имею 4 "главных". И вот это уже не работает
  3. Насчет ограничений из-за глубины - там в даташитах я видел только какие различные допустимые конфигурации блоков для портов чтения и записи. >> первая оценка, числу умножителей - можно где-то поподробнее про это почитать? Квартус ни на что не ругался параллельно реализуемых блоков - у вас операции чтения/записи были тоже параллельными? Пины на входе и выхоле каналов были выведены, а так же - несколько промежуточных На rtl вьюере 4 идентичных канала, если разворачивать примитивы - то они одинаковые по каналам Я создаю в ip визарде модуль памяти. Собираю на нем условное echo (...работает по принципу "принимаю n раз по байту, записываю в память, потом считываю n раз, выдаю") затем я копирую получившуюся схему (1 канал), и нажимаю вставить 3 раза. получается 4 идентичных канала. назначаю пины, заливаю в отладочную плату. при этом работает все равно один канал из 4. Если один удалить, начинает работать какой-нибудь другой, при этом остальные все равно молчат. Правильно ли я понимаю, когда я создаю примитив памяти например на 1 m9k, и в дизайне он присутствует 4 раза - на деле это 4 разных блока m9k, с каждым из которых можно параллельно с другими работать? если это не так - то да, это логическая ошибка. Ну или я не умею в ctrl c ctrl v. или есть еще какие-то ограничения, о которых я не знаю
  4. Вы рассказали про организацию работы с памятью в общем смысле, когда изначально вопрос был в другом... Есть конкретная плис, и конкретный компилятор квартуса, и проблема заключается в них
  5. Вообще, предусматривается, что будет порядка 8 приемников, и несколько передатчиков. Скорость приемопередатчиков лежит в интервале 9600 - 921600, на отладочной плате стоит кварц на 50М. Нужно организовать прием пакетов по нескольким каналам, сбор их в один и выдачу по одному каналу. Если можно делать параллельные операции чтения/записи в разные области памяти (другими словами - на .bdf понаставить много примитивов dual port ram и асинхронно с ними работать), то задача решается быстро. Я это и сделал, описал в первом сообщении. Если так нельзя, то ставится один примитив ram, и данные по всем каналам пишутся/читаются поочередно. Кварца на 50мгц тут будет достаточно. Это вы имели ввиду под словом арбитр?
  6. Добрый день. Стоит задача организации приема данных по нескольким каналам последовательного интерфейса. Для промежуточного хранения данных создал дуал порт память на 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)? Заранее благодарю за ответы.
×
×
  • Создать...