vitali36 0 10 сентября, 2013 Опубликовано 10 сентября, 2013 (изменено) · Жалоба Здравствуйте! Тема такая. Делал проект в ise, целью которого было принять данные на ацп , а потом отправить по com-port'у на компьютер. На C# написал программу которая принимает эти данные, которые я скидывал в массив и выводил график. Но данные похоже приходят неккоректно, поэтому решил задействовать память на борту spartan 3an ddr2 sdram. Создал Microblaze проект. Затем экспортнул в sdk,там протестировал память и перифирию - все работает. Т.е проект создан корректно. ТЕПЕРЬ ВОПРОС: мне нужно, чтобы данные с ацп приходили в память (на ацп поступает аналоговый сигнал извне) а уж потом шли по ком-порту на комп. Так вот как мне добавить к этому microblaze мой модуль, в котором описана работа АЦП. Это все нужно сделать же в ise. Есть еще uart модуль , но я так понял он мне не понадобиться больше, т.к uart в microblaze задействован. Вообщем подскажите как собрать этот проект. Еще раз: есть microblaze проект с ddr2 и uart и vhdl модуль с описанием работы ацп. Цель: данные с ацп записываются в ddr2 , а после отправляются по uart в комп. Изменено 10 сентября, 2013 пользователем vitali36 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 13 сентября, 2013 Опубликовано 13 сентября, 2013 · Жалоба ответил в прошлой вашей теме.. если связались с микроблайзом, то ваши инструменты платформ студия и СДК, ISE теперь только для создания модулей. Собирать финальный проект в ISE не советую... П.С. Все немного глючное, когда обновляете (после модификации) проц и экспортите его в сдк, в существующий проект, настойчиво рекомендую удалить все созданные софтварные проекты (только проекты из прожект эксплорера, не файлы на диске) и заново их импортнуть, потом сделать клинап проектов, всех, и заново их билднуть... а то иногда половина файлов остается старых, половина новых и вот тут уже вообще беда начинается... билдишь одно, запускаешь другое, редактируешь тертье... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergey_Bekrenyov 0 15 сентября, 2013 Опубликовано 15 сентября, 2013 · Жалоба Здравствуйте! Тема такая. Делал проект в ise, целью которого было принять данные на ацп , а потом отправить по com-port'у на компьютер. На C# написал программу которая принимает эти данные, которые я скидывал в массив и выводил график. Но данные похоже приходят неккоректно, поэтому решил задействовать память на борту spartan 3an ddr2 sdram. Создал Microblaze проект. Затем экспортнул в sdk,там протестировал память и перифирию - все работает. Т.е проект создан корректно. ТЕПЕРЬ ВОПРОС: мне нужно, чтобы данные с ацп приходили в память (на ацп поступает аналоговый сигнал извне) а уж потом шли по ком-порту на комп. Так вот как мне добавить к этому microblaze мой модуль, в котором описана работа АЦП. Это все нужно сделать же в ise. Есть еще uart модуль , но я так понял он мне не понадобиться больше, т.к uart в microblaze задействован. Вообщем подскажите как собрать этот проект. Еще раз: есть microblaze проект с ddr2 и uart и vhdl модуль с описанием работы ацп. Цель: данные с ацп записываются в ddr2 , а после отправляются по uart в комп. Не нужен Вам Microblaze - только время потеряете. Контроллер DDR2 сгенерите прямо в ISE. Только Вам для себя нужно ответить на пару вопросов - как Вам поможет DDR получить правильные данные? - какой объем Ваших данных? Вполне вероятно что они влезут в BRAM Если уж сильно хочется майкроблэйз - добавьте туда еще один уарт. К одному подцепите свой старый, второй киньте на комп. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 15 сентября, 2013 Опубликовано 15 сентября, 2013 · Жалоба Не нужен Вам Microblaze - только время потеряете. Контроллер DDR2 сгенерите прямо в ISE. Только Вам для себя нужно ответить на пару вопросов - как Вам поможет DDR получить правильные данные? - какой объем Ваших данных? Вполне вероятно что они влезут в BRAM Если уж сильно хочется майкроблэйз - добавьте туда еще один уарт. К одному подцепите свой старый, второй киньте на комп. я такой совет уже давал... :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergey_Bekrenyov 0 15 сентября, 2013 Опубликовано 15 сентября, 2013 · Жалоба я такой совет уже давал... :) :) Я в свое время отучился на Кзайлинкс тренингах по поводу встраиваемых микропроцессорных систем -без этого тяжко с нуля разбираться. Проще накодировать в ПЛИС, да и отлаживать проще. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitali36 0 15 сентября, 2013 Опубликовано 15 сентября, 2013 (изменено) · Жалоба - как Вам поможет DDR получить правильные данные? Сергей, DDR2 поможет тем, что скорости уарта не хватает "хватать данные с ацп и передавать". С ацп они сыпятся быстрее. Буфер однозначно нужен. По поводу объема данных. Для теста хватит совсем чуть-чуть. К примеру записать 4096 отсчетов. Но а если будет работаь все в реале, т.е постоянно? нужно же будет накапливать отправлять, очищать и снова так по кругу(если я правилно понимаю). Если уж сильно хочется майкроблэйз - добавьте туда еще один уарт. К одному подцепите свой старый, второй киньте на комп. Не совсем понял как это. Изменено 15 сентября, 2013 пользователем vitali36 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergey_Bekrenyov 0 15 сентября, 2013 Опубликовано 15 сентября, 2013 · Жалоба Сергей, DDR2 поможет тем, что скорости уарта не хватает "хватать данные с ацп и передавать". С ацп они сыпятся быстрее. Буфер однозначно нужен. По поводу объема данных. Для теста хватит совсем чуть-чуть. К примеру записать 4096 отсчетов. Но а если будет работаь все в реале, т.е постоянно? нужно же будет накапливать отправлять, очищать и снова так по кругу(если я правилно понимаю). Не совсем понял как это. Если не хватает скорости, то ничего не поможет! От того что Вы сложите данные в ДДР данных меньше не станет. Либо прореживать придется, либо фильтровать, либо нужен другой интерфейс - посмотрите в сторону Ethernet. На опенкорес вполне рабочий MAC лежит Делаете систему с двумя уартами и ддр контроллером. Один цепляете к передатчику в FPGA (там можете скорость задрать), а второй к компьютеру. А уж между ними ставьте хоть ДДР буфер, хоть фильтр ... Но все же сгенерите ДДР контроллер с помощью MIG - у Вас будет просто доступ ДДР через 2 FIFO. Микроблэйз для Вашей задачи слишком ресурсо-. энерго- и время- затратен Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitali36 0 15 сентября, 2013 Опубликовано 15 сентября, 2013 · Жалоба Я в MIG пытался сделать. Сгенерил контроллер, добавил файлы в проект, их там куча просто. Сплошные компоненты. Ни разу не пользовался ранее MIG. Создал тестбенч(пустой). В тесте задать можно только входы(clk и reset). А мне нужно же задать адрес, cntrl0_ddr2_a : OUT std_logic_vector(12 downto 0), банк, который буду использовать и т.д. cntrl0_ddr2_ba : OUT std_logic_vector(1 downto 0); иначе рабоать то не будет. Плюс еще модуль ацп и уарт как туда запилить и связать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 15 сентября, 2013 Опубликовано 15 сентября, 2013 · Жалоба Я в MIG пытался сделать. Сгенерил контроллер, добавил файлы в проект, их там куча просто. Сплошные компоненты. Ни разу не пользовался ранее MIG. Создал тестбенч(пустой). В тесте задать можно только входы(clk и reset). А мне нужно же задать адрес, cntrl0_ddr2_a : OUT std_logic_vector(12 downto 0), банк, который буду использовать и т.д. cntrl0_ddr2_ba : OUT std_logic_vector(1 downto 0); иначе рабоать то не будет. Плюс еще модуль ацп и уарт как туда запилить и связать... Для начала Вам необходимо разобраться как записывать в память данные и читать из нее. Для этого используйте возможности тестбенч... MIG должен вроде должен создавать тестбенч к топ-левелу... Потом создайте FSM которая б это делала в ПЛИС Можете применять интрумент для отладки чипскоп в железе - смотреть сигналы на входе/выходе... Как-то так... Это в кратце... дальше по мере поступления вопросов.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 16 сентября, 2013 Опубликовано 16 сентября, 2013 · Жалоба Я в MIG пытался сделать. Сгенерил контроллер, добавил файлы в проект, их там куча просто. Сплошные компоненты. Ни разу не пользовался ранее MIG. Создал тестбенч(пустой). В тесте задать можно только входы(clk и reset). А мне нужно же задать адрес, cntrl0_ddr2_a : OUT std_logic_vector(12 downto 0), банк, который буду использовать и т.д. cntrl0_ddr2_ba : OUT std_logic_vector(1 downto 0); иначе рабоать то не будет. Плюс еще модуль ацп и уарт как туда запилить и связать... по описанию вы не топ левел компонент запустили... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Last_point 0 16 сентября, 2013 Опубликовано 16 сентября, 2013 · Жалоба Все же, возвращаясь к основной задаче, а Вы уверены, что использование DDR позволит передавать все данные с АЦП? Если проблема в том, что данные приходят не корректно, то скорее всего после отладки проекта при помощи chipscope ее можно будет локализовать и исправить, вполне может быть ошибка типа перепутанного MSB и LSB: все работает по одиночке, а вместе - нет. Вряд ли добавлением новых блоков все решится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitali36 0 16 сентября, 2013 Опубликовано 16 сентября, 2013 (изменено) · Жалоба Вот результат работы на графике оцифрованной синусоиды без использования DDR2(данные с ацп на uart и потом на комп). И таким макаром весь график. Выложил естественно только часть. Сейчас пытаюсь к microblaze добавить ацп модуль. В user_logic добавил компонент и потом в port map связал так clk => Bus2IP_CLK, rst => Bus2IP_Reset, adc_a => IP2RFIFO_Data); Но потом выдает ошибку что еще оказывается нужно вход spi_adc с чем-то связать. С каким-то из этих портов?(как и rst, clk и adc_a) Bus2IP_Clk : in std_logic; Bus2IP_Reset : in std_logic; Bus2IP_Data : in std_logic_vector(0 to C_SLV_DWIDTH-1); Bus2IP_BE : in std_logic_vector(0 to C_SLV_DWIDTH/8-1); Bus2IP_RdCE : in std_logic_vector(0 to C_NUM_REG-1); Bus2IP_WrCE : in std_logic_vector(0 to C_NUM_REG-1); IP2Bus_Data : out std_logic_vector(0 to C_SLV_DWIDTH-1); IP2Bus_RdAck : out std_logic; IP2Bus_WrAck : out std_logic; IP2Bus_Error : out std_logic; IP2RFIFO_WrReq : out std_logic; IP2RFIFO_Data : out std_logic_vector(0 to C_SLV_DWIDTH-1); IP2RFIFO_WrMark : out std_logic; IP2RFIFO_WrRelease : out std_logic; IP2RFIFO_WrRestore : out std_logic; RFIFO2IP_WrAck : in std_logic; RFIFO2IP_AlmostFull : in std_logic; RFIFO2IP_Full : in std_logic; RFIFO2IP_Vacancy : in std_logic_vector(0 to log2(C_RDFIFO_DEPTH)); IP2WFIFO_RdReq : out std_logic; IP2WFIFO_RdMark : out std_logic; IP2WFIFO_RdRelease : out std_logic; IP2WFIFO_RdRestore : out std_logic; WFIFO2IP_Data : in std_logic_vector(0 to C_SLV_DWIDTH-1); WFIFO2IP_RdAck : in std_logic; WFIFO2IP_AlmostEmpty : in std_logic; WFIFO2IP_Empty : in std_logic; WFIFO2IP_Occupancy : in std_logic_vector(0 to log2(C_WRFIFO_DEPTH)) Изменено 16 сентября, 2013 пользователем vitali36 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Last_point 0 16 сентября, 2013 Опубликовано 16 сентября, 2013 · Жалоба Вот результат работы на графике оцифрованной синусоиды без использования DDR2(данные с ацп на uart и потом на комп). И таким макаром весь график. Выложил естественно только часть Вы пробовали подключаться к входу с АЦП (какой вид графика уже там)? Еще интересна частота АЦП и синусоиды Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitali36 0 16 сентября, 2013 Опубликовано 16 сентября, 2013 · Жалоба Частота дискретизации 3мегасемпла. Частота сигнала не помню какую точно задавал ( около 1кГц ). От полтора кГц уже плохо начинает отрисовывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 16 сентября, 2013 Опубликовано 16 сентября, 2013 · Жалоба Я бы поступил так. я бы передавал не данные АЦП, а данные АЦП + Временная метка. тогда сразу было бы ясно теряется что-то или повторяется. то есть в модуле что принимает данные на каждый принятый отсчет надо увеличивать счетчик и отправлять его вместе с данными АЦП. думаю 8 бит хватит, чтобы понять что происходит. а в поступлении отсчетов есть перерывы? И какая максимальная частота поступления отсчетов? Или у Вас считал - передал, и максимальная частота определяется каналом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться