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

Здравствуйте! Тема такая. Делал проект в ise, целью которого было принять данные на ацп , а потом отправить по com-port'у на компьютер. На C# написал программу которая принимает эти данные, которые я скидывал в массив и выводил график. Но данные похоже приходят неккоректно, поэтому решил задействовать память на борту spartan 3an ddr2 sdram. Создал Microblaze проект. Затем экспортнул в sdk,там протестировал память и перифирию - все работает. Т.е проект создан корректно. ТЕПЕРЬ ВОПРОС: мне нужно, чтобы данные с ацп приходили в память (на ацп поступает аналоговый сигнал извне) а уж потом шли по ком-порту на комп. Так вот как мне добавить к этому microblaze мой модуль, в котором описана работа АЦП. Это все нужно сделать же в ise. Есть еще uart модуль , но я так понял он мне не понадобиться больше, т.к uart в microblaze задействован. Вообщем подскажите как собрать этот проект. Еще раз: есть microblaze проект с ddr2 и uart и vhdl модуль с описанием работы ацп. Цель: данные с ацп записываются в ddr2 , а после отправляются по uart в комп.

Изменено пользователем vitali36

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ответил в прошлой вашей теме..

 

если связались с микроблайзом, то ваши инструменты платформ студия и СДК, ISE теперь только для создания модулей. Собирать финальный проект в ISE не советую...

 

П.С. Все немного глючное, когда обновляете (после модификации) проц и экспортите его в сдк, в существующий проект, настойчиво рекомендую удалить все созданные софтварные проекты (только проекты из прожект эксплорера, не файлы на диске) и заново их импортнуть, потом сделать клинап проектов, всех, и заново их билднуть... а то иногда половина файлов остается старых, половина новых и вот тут уже вообще беда начинается... билдишь одно, запускаешь другое, редактируешь тертье...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте! Тема такая. Делал проект в 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

 

Если уж сильно хочется майкроблэйз - добавьте туда еще один уарт. К одному подцепите свой старый, второй киньте на комп.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не нужен Вам Microblaze - только время потеряете. Контроллер DDR2 сгенерите прямо в ISE.

 

Только Вам для себя нужно ответить на пару вопросов

- как Вам поможет DDR получить правильные данные?

- какой объем Ваших данных? Вполне вероятно что они влезут в BRAM

 

Если уж сильно хочется майкроблэйз - добавьте туда еще один уарт. К одному подцепите свой старый, второй киньте на комп.

я такой совет уже давал... :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я такой совет уже давал... :)

 

:)

 

Я в свое время отучился на Кзайлинкс тренингах по поводу встраиваемых микропроцессорных систем -без этого тяжко с нуля разбираться. Проще накодировать в ПЛИС, да и отлаживать проще.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

- как Вам поможет DDR получить правильные данные?
Сергей, DDR2 поможет тем, что скорости уарта не хватает "хватать данные с ацп и передавать". С ацп они сыпятся быстрее. Буфер однозначно нужен. По поводу объема данных. Для теста хватит совсем чуть-чуть. К примеру записать 4096 отсчетов. Но а если будет работаь все в реале, т.е постоянно? нужно же будет накапливать отправлять, очищать и снова так по кругу(если я правилно понимаю).

Если уж сильно хочется майкроблэйз - добавьте туда еще один уарт. К одному подцепите свой старый, второй киньте на комп.

Не совсем понял как это.

Изменено пользователем vitali36

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сергей, DDR2 поможет тем, что скорости уарта не хватает "хватать данные с ацп и передавать". С ацп они сыпятся быстрее. Буфер однозначно нужен. По поводу объема данных. Для теста хватит совсем чуть-чуть. К примеру записать 4096 отсчетов. Но а если будет работаь все в реале, т.е постоянно? нужно же будет накапливать отправлять, очищать и снова так по кругу(если я правилно понимаю).

 

Не совсем понял как это.

 

Если не хватает скорости, то ничего не поможет! От того что Вы сложите данные в ДДР данных меньше не станет. Либо прореживать придется, либо фильтровать, либо нужен другой интерфейс - посмотрите в сторону Ethernet. На опенкорес вполне рабочий MAC лежит

 

Делаете систему с двумя уартами и ддр контроллером. Один цепляете к передатчику в FPGA (там можете скорость задрать), а второй к компьютеру. А уж между ними ставьте хоть ДДР буфер, хоть фильтр ...

 

 

 

Но все же сгенерите ДДР контроллер с помощью MIG - у Вас будет просто доступ ДДР через 2 FIFO. Микроблэйз для Вашей задачи слишком ресурсо-. энерго- и время- затратен

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я в MIG пытался сделать. Сгенерил контроллер, добавил файлы в проект, их там куча просто. Сплошные компоненты. Ни разу не пользовался ранее MIG. Создал тестбенч(пустой).

В тесте задать можно только входы(clk и reset). А мне нужно же задать адрес, cntrl0_ddr2_a : OUT std_logic_vector(12 downto 0), банк, который буду использовать и т.д. cntrl0_ddr2_ba : OUT std_logic_vector(1 downto 0);

иначе рабоать то не будет. Плюс еще модуль ацп и уарт как туда запилить и связать...

post-77354-1379277698_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я в 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 которая б это делала в ПЛИС

Можете применять интрумент для отладки чипскоп в железе - смотреть сигналы на входе/выходе...

Как-то так...

Это в кратце... дальше по мере поступления вопросов....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я в MIG пытался сделать. Сгенерил контроллер, добавил файлы в проект, их там куча просто. Сплошные компоненты. Ни разу не пользовался ранее MIG. Создал тестбенч(пустой).

В тесте задать можно только входы(clk и reset). А мне нужно же задать адрес, cntrl0_ddr2_a : OUT std_logic_vector(12 downto 0), банк, который буду использовать и т.д. cntrl0_ddr2_ba : OUT std_logic_vector(1 downto 0);

иначе рабоать то не будет. Плюс еще модуль ацп и уарт как туда запилить и связать...

 

по описанию вы не топ левел компонент запустили...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все же, возвращаясь к основной задаче, а Вы уверены, что использование DDR позволит передавать все данные с АЦП? Если проблема в том, что данные приходят не корректно, то скорее всего после отладки проекта при помощи chipscope ее можно будет локализовать и исправить, вполне может быть ошибка типа перепутанного MSB и LSB: все работает по одиночке, а вместе - нет. Вряд ли добавлением новых блоков все решится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот результат работы на графике оцифрованной синусоиды без использования 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))

post-77354-1379323901_thumb.png

post-77354-1379323933_thumb.png

Изменено пользователем vitali36

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот результат работы на графике оцифрованной синусоиды без использования DDR2(данные с ацп на uart и потом на комп).

И таким макаром весь график. Выложил естественно только часть

Вы пробовали подключаться к входу с АЦП (какой вид графика уже там)? Еще интересна частота АЦП и синусоиды

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Частота дискретизации 3мегасемпла. Частота сигнала не помню какую точно задавал ( около 1кГц ). От полтора кГц уже плохо начинает отрисовывать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я бы поступил так.

 

я бы передавал не данные АЦП, а данные АЦП + Временная метка. тогда сразу было бы ясно теряется что-то или повторяется.

 

то есть в модуле что принимает данные на каждый принятый отсчет надо увеличивать счетчик и отправлять его вместе с данными АЦП.

думаю 8 бит хватит, чтобы понять что происходит.

 

а в поступлении отсчетов есть перерывы? И какая максимальная частота поступления отсчетов? Или у Вас считал - передал, и максимальная частота определяется каналом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...