реклама на сайте
подробности

 
 
> Microblaze+DDR2+UART, собрать проект в ise
vitali36
сообщение Sep 10 2013, 11:22
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



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

Сообщение отредактировал vitali36 - Sep 10 2013, 11:23
Go to the top of the page
 
+Quote Post
5 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 71)
Golikov A.
сообщение Sep 13 2013, 20:19
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

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

П.С. Все немного глючное, когда обновляете (после модификации) проц и экспортите его в сдк, в существующий проект, настойчиво рекомендую удалить все созданные софтварные проекты (только проекты из прожект эксплорера, не файлы на диске) и заново их импортнуть, потом сделать клинап проектов, всех, и заново их билднуть... а то иногда половина файлов остается старых, половина новых и вот тут уже вообще беда начинается... билдишь одно, запускаешь другое, редактируешь тертье...
Go to the top of the page
 
+Quote Post
Sergey_Bekrenyov
сообщение Sep 15 2013, 14:43
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 14-12-10
Из: Королёв
Пользователь №: 61 599



Цитата(vitali36 @ Sep 10 2013, 15:22) *
Здравствуйте! Тема такая. Делал проект в 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

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

Go to the top of the page
 
+Quote Post
Maverick
сообщение Sep 15 2013, 16:39
Сообщение #4


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(Sergey_Bekrenyov @ Sep 15 2013, 17:43) *
Не нужен Вам Microblaze - только время потеряете. Контроллер DDR2 сгенерите прямо в ISE.

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

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

я такой совет уже давал... sm.gif


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Sergey_Bekrenyov
сообщение Sep 15 2013, 18:41
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 14-12-10
Из: Королёв
Пользователь №: 61 599



Цитата(Maverick @ Sep 15 2013, 20:39) *
я такой совет уже давал... sm.gif


sm.gif

Я в свое время отучился на Кзайлинкс тренингах по поводу встраиваемых микропроцессорных систем -без этого тяжко с нуля разбираться. Проще накодировать в ПЛИС, да и отлаживать проще.
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 15 2013, 19:02
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



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

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

Сообщение отредактировал vitali36 - Sep 15 2013, 19:03
Go to the top of the page
 
+Quote Post
Sergey_Bekrenyov
сообщение Sep 15 2013, 19:37
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 14-12-10
Из: Королёв
Пользователь №: 61 599



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

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


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

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



Но все же сгенерите ДДР контроллер с помощью MIG - у Вас будет просто доступ ДДР через 2 FIFO. Микроблэйз для Вашей задачи слишком ресурсо-. энерго- и время- затратен
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 15 2013, 20:43
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Я в MIG пытался сделать. Сгенерил контроллер, добавил файлы в проект, их там куча просто. Сплошные компоненты. Ни разу не пользовался ранее MIG. Создал тестбенч(пустой).
В тесте задать можно только входы(clk и reset). А мне нужно же задать адрес, cntrl0_ddr2_a : OUT std_logic_vector(12 downto 0), банк, который буду использовать и т.д. cntrl0_ddr2_ba : OUT std_logic_vector(1 downto 0);
иначе рабоать то не будет. Плюс еще модуль ацп и уарт как туда запилить и связать...
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Maverick
сообщение Sep 15 2013, 21:10
Сообщение #9


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(vitali36 @ Sep 15 2013, 23:43) *
Я в 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 которая б это делала в ПЛИС
Можете применять интрумент для отладки чипскоп в железе - смотреть сигналы на входе/выходе...
Как-то так...
Это в кратце... дальше по мере поступления вопросов....


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 16 2013, 04:03
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(vitali36 @ Sep 16 2013, 00:43) *
Я в MIG пытался сделать. Сгенерил контроллер, добавил файлы в проект, их там куча просто. Сплошные компоненты. Ни разу не пользовался ранее MIG. Создал тестбенч(пустой).
В тесте задать можно только входы(clk и reset). А мне нужно же задать адрес, cntrl0_ddr2_a : OUT std_logic_vector(12 downto 0), банк, который буду использовать и т.д. cntrl0_ddr2_ba : OUT std_logic_vector(1 downto 0);
иначе рабоать то не будет. Плюс еще модуль ацп и уарт как туда запилить и связать...


по описанию вы не топ левел компонент запустили...
Go to the top of the page
 
+Quote Post
lastpoint
сообщение Sep 16 2013, 07:06
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 1-08-12
Из: Смоленск
Пользователь №: 72 975



Все же, возвращаясь к основной задаче, а Вы уверены, что использование DDR позволит передавать все данные с АЦП? Если проблема в том, что данные приходят не корректно, то скорее всего после отладки проекта при помощи chipscope ее можно будет локализовать и исправить, вполне может быть ошибка типа перепутанного MSB и LSB: все работает по одиночке, а вместе - нет. Вряд ли добавлением новых блоков все решится.
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 16 2013, 09:32
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



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

Сообщение отредактировал vitali36 - Sep 16 2013, 09:39
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
lastpoint
сообщение Sep 16 2013, 12:46
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 1-08-12
Из: Смоленск
Пользователь №: 72 975



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

Вы пробовали подключаться к входу с АЦП (какой вид графика уже там)? Еще интересна частота АЦП и синусоиды
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 16 2013, 12:54
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Частота дискретизации 3мегасемпла. Частота сигнала не помню какую точно задавал ( около 1кГц ). От полтора кГц уже плохо начинает отрисовывать.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 16 2013, 13:12
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

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

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

а в поступлении отсчетов есть перерывы? И какая максимальная частота поступления отсчетов? Или у Вас считал - передал, и максимальная частота определяется каналом?
Go to the top of the page
 
+Quote Post
lastpoint
сообщение Sep 16 2013, 13:13
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 1-08-12
Из: Смоленск
Пользователь №: 72 975



Цитата
Частота дискретизации 3мегасемпла. Частота сигнала не помню какую точно задавал ( около 1кГц )
- значит на форме где-то 1/100 периода ? И еще, если АЦП 8-битное (это 24000000бит/сек) , а com-port настроен на 9600 бит/сек, то как происходит передача данных на ПК :принял семпл-передал, остальные пропустил или принял несколько семплов-отослал, потом опять часть принял-отослал)? в первом случае частота семплирования намного меньше, чем ожидается, а во втором должны выходить куски сигнала, не связанные с собой
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 16 2013, 14:55
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Ацп 14-ти разрядный. Данные я разделяю. Сначала 8, потом 6 дополненные двумя нулями. А в самой программе на c# данные скидываю в массив, но т.к ацп 14 разрдядный я просто делаю конкатенацию 0 элемент с 1, 2 c 3 и т.д. Скорость 921600. Вы мне скажите график не похож что ли?
Golikov.A. Да, частота определяется самим ацп. Писалось по даташиту все - там прежде чем ацп запустить нужно предусилитель настроить. По поводу временной метки, не очень понял. Вообще я сейчас хочу все это доделать с памятью, вывести график и посмотреть как что) . Только вот не пойму все входы с ацп ли нужно к microblaze подключать. rst, clk и выход с ацп я подключил, ругается потом xps на spi_adc. Вообще хочу спасибо всем сказать что помогаете мне - тратите свое личное время

Сообщение отредактировал vitali36 - Sep 16 2013, 15:03
Go to the top of the page
 
+Quote Post
Sergey_Bekrenyov
сообщение Sep 16 2013, 15:10
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 14-12-10
Из: Королёв
Пользователь №: 61 599



Цитата(vitali36 @ Sep 16 2013, 18:55) *
Ацп 14-ти разрядный. Данные я разделяю. Сначала 8, потом 6 дополненные двумя нулями. А в самой программе на c# данные скидываю в массив, но т.к ацп 14 разрдядный я просто делаю конкатенацию 0 элемент с 1, 2 c 3 и т.д. Скорость 921600. Вы мне скажите график не похож что ли?
Golikov.A. Да, частота определяется самим ацп. Писалось по даташиту все - там прежде чем ацп запустить нужно предусилитель настроить. По поводу временной метки, не очень понял. Вообще я сейчас хочу все это доделать с памятью, вывести график и посмотреть как что) . Только вот не пойму все входы с ацп ли нужно к microblaze подключать. rst, clk и выход с ацп я подключил, ругается потом xps на spi_adc. Вообще хочу спасибо всем сказать что помогаете мне - тратите свое личное время


Прицепите Чипскоп и он выведет Вам график. Вы пытаетесь настроить кучу модулей одновременно.
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 16 2013, 16:21
Сообщение #19


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Мне не график нужно вывести в данный момент. Я добавляю ацп ( vhdl модуль к микроблейз) . Вернее уже добавил, теперь хочу связать входы-выходы. clk, rst от ацп привязал к Bus2IP_CLK, Bus2IP_Reset, а выход ацп с данными к IP2RFIFO_Data. но ругается xps потом на вход spi_adc. С чем его связать нужно?
Go to the top of the page
 
+Quote Post
Maverick
сообщение Sep 16 2013, 16:40
Сообщение #20


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Опишите для ясности чем Вы владеете
- какое ацп
- с помощью какой микросхемы передаете порядка 1 мегабита по юарту (просто возможно передача и на большей скорости например через FIFO, SPI, например это возможно у FTDI)


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 16 2013, 17:35
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Модуль АЦП человек написал сам, как я понимаю

учтите что обычно ресет шины (Bus2IP_Reset) обратный, посмотрите какой уровень у нее при ресете, там что-то не как обычно в микросхемах насколько я помню.

Не очень понятно как вы хотите привязать АЦП к фифо, я что-то такого фифо не припоминаю, по описанию оно для чего сделано? Это не от Езернета фифо случаем оторвали?


Про времянную метку я предлагаю вот что

берем счетчик 8 бит, который каждое считывание ацп увеличиваем на 1. и ваши данные с АЦП превращаем

временная метка + данные ацп, то есть 14+8 = 22 бита, потом это передаете на компьютер то есть не 2 байта на отсчет а 3.

если все хорошо там будет

1 АДЦ_код
2 АДЦ код
....

в таком варианте ваши точки графика получают не только Y но и Х координату, и уже можно будет определеннее сказать у вас нарушение данных или их последовательности, может какие то пропускаются, а какие то принимаются слишком долго с паузами.... Если есть какое то синхронизирующее устройство, то времянную метку лучше брать с него, запустить на нем такой же счетчик и забирать каждую синхропосылку...

Смысл локализовать проблему, а потом уже решать ее, а не крутить кучу блоков, половину которых вы соединяете методом тыка (как у меня создается впечатление)

Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 16 2013, 18:26
Сообщение #22


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Ацп Linear Technology LTC1407A-1 ADC. Я так же хочу сделать как в этом примере http://www.fpgadeveloper.com/2008/10/integ...peripheral.html , только вместо модуля умножителя мой модуль ацп. Фифо не отрывал ни откуда: xps сгенерил вместе с ddr2 похоже. Вот мой проект ( не microblaze ) . там все с комментариями.
Прикрепленные файлы
Прикрепленный файл  rx_tx_amp_adc_v3.rar ( 1.32 мегабайт ) Кол-во скачиваний: 14
 
Go to the top of the page
 
+Quote Post
Sergey_Bekrenyov
сообщение Sep 16 2013, 19:50
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 14-12-10
Из: Королёв
Пользователь №: 61 599



Цитата(vitali36 @ Sep 16 2013, 22:26) *
Ацп Linear Technology LTC1407A-1 ADC. Я так же хочу сделать как в этом примере http://www.fpgadeveloper.com/2008/10/integ...peripheral.html , только вместо модуля умножителя мой модуль ацп. Фифо не отрывал ни откуда: xps сгенерил вместе с ddr2 похоже. Вот мой проект ( не microblaze ) . там все с комментариями.


замените данные АЦП на счетчик - проверите стык uart и Ваш софт. И начните с 8 бит
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 17 2013, 07:44
Сообщение #24


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Ребят, ну выконечно разогнались)) В данный момент пока что задача состоит только в том, чтобы проверить то же самое(не меняя ничего в модклях, без добавления временных меток и т.д), только задействовав память. Посмотреть результат и уже от этого отталкиваться. Для этого я решил использовать microblaze. Создал проект microblaze, в sdk протестировал память и uart - работает. Следующий шаг - добавление модуля ацп. В этой статье(уже кидал ссылку) http://www.fpgadeveloper.com/2008/10/integ...peripheral.html показано добавление модуля на примере умножителя(два числа перемножаются, записываются в fifo, считываются и по uart передаются на комп). Вот я хочу сделать также, только вместо этого умнжителя мой модуль ацп.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 17 2013, 10:39
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



хотите я кину пример где через езернет настраиваются драйверы шаговых двигателей, и вы попробуете свое АЦП вместо мотора воткнуть?..


У вас есть модуль сбора данных с ацп? он может полученные данные выдать на параллельную шину, и дернуть одной ножкой вверх-вниз?

Не может - допишите это дело 10 минут.

Дальше делаете так
микроблайз + уарт
дальше добавляете стандартную IPcore fifo

у него есть вход и выход, подаете данные АЦП на вход, и дергаете ножкой они сохраняются в ФИФО.

дальше это фифо вешаете на шину процессора, для того чтобы забрать данные надо будет просто прочитать из адресного пространства этого модуля и все.

дальше процессором в вечном цикле читаете данные из фифо и кладете в память, а потом читаете из памяти и кладете в уарт, и делаете что хотите...

но реально проблему решаете не с того конца.


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

Обернул бы этот модуль в модуль что данные из фифо по запросу выдает на проц, это тоже делается через визард (создается шаблон модуля с регистровым доступом и чуть дописывается внутри)

дальше бы все это запустил и читал бы данные из фифо и слал бы их наверх, размер фифо может быть до полумегобайта (зависит от плис). Оттестировтаь тракт хватит. Но только реально никакая память не решит проблемы разности скорость приема и передачи, при условии бесконечности данных...
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 17 2013, 11:00
Сообщение #26


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Цитата
хотите я кину пример где через езернет настраиваются драйверы шаговых двигателей, и вы попробуете свое АЦП вместо мотора воткнуть?..

Т.е вместо uart попробовать спользовать ethernet и тогда память никакая не нужна?
Цитата
У вас есть модуль сбора данных с ацп? он может полученные данные выдать на параллельную шину, и дернуть одной ножкой вверх-вниз?

Модуль сбора данных с ацп есть. Выдать данные на параллельную шину - это можно организовать.
Цитата
Дальше делаете так
микроблайз + уарт
Микроблайз с uart есть. Сделал проект а xps. Там же ddr2 у меня(при создании проекта указывал).
Цитата
дальше добавляете стандартную IPcore fifo
Это каким образом добавить и где его взять?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 17 2013, 11:53
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Т.е вместо uart попробовать спользовать ethernet и тогда память никакая не нужна?

это был сарказм на тему что вы используете не те модули что вам надо, а те что у вас есть...


Вам надо понять так называемый workflow, перестать спешить, сделать 1 раз хорошо а не много раз плохо.

И так, вот как все делается:

1. в платформ студии делаете процессор микроблайз, добавляете уарт, память все что вам надо.

2. в платформ студии делаете шаблон нового модуля
-Hardware -> create or import ... -> create template for new....
задаете где положить модуль, даете ему имя и версию, выбираете тип шины к которой он подключится и так далее
в самом конце не забудьте попросить визард сделать ISE и XST проекты. не делайте сразу мастер, сделайте сначала слейв

3. открываете ISE в нем открываете только что сделанный проект вашего модуля.
в нем вы увидите какие то файлы, есть основной верхний файл, и в нем есть файл user.v(vhd) зависит от того верилог или вхдл вы попросите у визарда.

Это файл - ваша модуль, в нем есть кусок доступа к регистрам со стороны процессора, кусок чтения и записи.

4. теперь в ISE делаете добавить новый модуль, и там выбираете IP core, в выпавшем меню выбираете FIFO, просите сделать его нативным а не на шину (так проще с ним работать в вашем модуле)

5. можете добавить ваш модуль сбора данных с ацп, и собираете все во едино, ваша задача чтобы данные с АЦП попадали в ФИФО, а при запросе на чтение регистра процессором, туда пихались данные из ФИФО.

как диагностировать пустоту фифо придумывайте сами.

6. имплементируете проект в ISE и возвращаетесь в платформ студию

7. в платформ студии импортируете модуль
- hardware -> create or import ... -> import exist
выбираете ваш модуль, теперь в списке доступных модулей в разедел пользовательских (user) добавлен ваш модуль, перетаскиваете его и подключаете к процессору.

8. создаете процессор, и экспортите его в сдк

9. открываете сдк пишите программу.


это базовый поток, НАСТОЯТЕЛЬНО рекомендую по нему пройти, сделать простенький модуль, почитать пописать регистры, по получать данные.

Далее вы сможете сделать модуль который будет мастером на шине, сможет сам пихать данные в ДДР без процессора и так далее, но на первом этапе поскольку процессор у вас ничем не занят можете спокойно перегружать данные из АЦП в память полингом, а фифо позволит не терять их в момент обмена...

также добавление IP core возможны и в платформ студии к процессору напрямую или к другим вашим модулям, среди них множество всяких полезностей: UART, SPI, Ethernert-mac, таймеры, порты ввода-вывода и куча куча куча всего
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 17 2013, 12:30
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Ладно, буду делать все по порядку, как ты сказал. Сгенерил проект в xps, открыл в ise, при добавлении fifo в ip core можно выбрать fifo generator v. 8.5 или 9.1. Но рядом колонки Axi4, axi4-stream, axi4 - lite. Мне не plb случаем нужно?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 17 2013, 13:21
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



если фифо к процу на прямую, то плб, если такого нет, то есть переходник.
Но для использования в вашем модуле внутри ISE надо натив фифо, оно вообще не на шину, у него параллельный выход - выход, клок, и строб разрешения чтения и записи...
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 17 2013, 16:00
Сообщение #30


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



у меня ise не ниже 14. Толоко axi4 interface. Может другую ise скачать?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 17 2013, 17:54
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



соберитесь, там в начале есть галочка натив фифо! Вам не нужен фифо на шину. Вам нужно встроить фифо в свой модуль, нафига создавать кучу сигналов для шинного фифо. Да, надо будет написать вывод данных в шину через регистр, но это не сложно, полчасика с отладкой...

Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 17 2013, 18:50
Сообщение #32


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Не нахожу такого. Вот скрин.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 17 2013, 20:15
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



это когда вы уже выберите фифо
memory and storage-> FIFOs -> fifo Generator

элемент сделается и добавится в проект, потом по нему 2 раза кликните откроется (или сразу по добавлению откроется) визард.
на первой странице натив - акси, ставьте галку натив.

работает оно так, у него есть шина входная и выходная, клок, ресет, и врайт енайбл и реад енайбл. Если фифо не в ресете, то на каждый клок при установленном реад енайбле на выходе появляются данные, а при установленном врайт енайбле данные со входа пихаются в фифо.

то есть алгоритм
считали данные а АЦП, поставили на вход фифо, дернули на 1 клок врайт енайбл и готово.

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


кстати эти сигналы очень для вас важны, если фифо опустошится значит скорости передачи хватает, если переполнится то нет. Потерь данных с фифо не должно быть, если оно не переполнилось и не опустошилось
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 17 2013, 21:10
Сообщение #34


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Посмтотри пожалуйста правильно ли там все, вот что получилось пока что(модуль ацп еще не добавлял). Его добавить его то просто как add source? Где его вставить как компонент и связать порты (в каком из файлов). И алгоритм, что ты описал где мне кодить?(спасибо, кстати, что подробно так его описал)).
Прикрепленные файлы
Прикрепленный файл  microblaze_adc.rar ( 326.97 килобайт ) Кол-во скачиваний: 10
 
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 18 2013, 09:48
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



все делается в файле user. Это файл предоставлен для вас, все остальные файлы - это файлы обертки, максимум когда их надо редактировать это если вы хотите какие то сигналы прокинуть на ружу из вашего юзера. Тогда эти порты объявляется во внешнем файле и прокидываются во внутрь юзера.

архивчик я смог посмотреть только структуру, сами файлики недоступны почему то архив поврежден пишет, 2 раза скачивал, может при заливке сдох...
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 18 2013, 10:22
Сообщение #36


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Щас еще раз выложу
Прикрепленные файлы
Прикрепленный файл  microblaze_adc.rar ( 327.56 килобайт ) Кол-во скачиваний: 9
 
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 18 2013, 10:28
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



во я лошараsm.gif это у меня среда vhd файл приняла за какой то образ диска)...

ну да ладно. я увидел пустой юзер файл, это не есть верно) его стоило бы наполнить.

А импортить модуль в проект надо уже после того как в ISE вы его напишите, проверите и имплементнете.


Честно не очень понимаю чего вы хотите чтобы я посмотрелsm.gif если вас беспокоит что по коду, то лучше кидайте код суда, я его погляжу глазьями, а если по соединениям, то опять же лучше картинки.

У меня виндоус 8 и 64 бита, а для ксалинкса - это приговор, так что работаю на виртуалке (не спрашивайте почему так получилось, это кармаsm.gif), и надо сделать кучу действий чтобы открыть проект, это утомляет...
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 18 2013, 10:45
Сообщение #38


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Юзер пустой, потому что я еще не писал там ничего и не добавлял). Вообщем я так понял сейчас я должен сделать вот что: 1) вставить мой vhdl модуль в проект
2) В user файле где написано USER signal declarations added here, as needed for user logic вставить мой компонент моего ацп модуля.
3) Там же в user где написано --USER logic implementation added here связываю с помощью port map мой ацп компонент с портами user файла.
4) И там же в архитектуре описать алгоритм чтения-записи, что ты мне сказал.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 18 2013, 11:17
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



да
только есть еще 5 пункт

5. в верхнем модуле в который вставлен ваше user надо "прокинуть" порты что вы добавите на ружу. Ну то есть добавить такие же порты в верхнем модуле, и соединить их со входами юзера.

дальше проверки и имплементайшен

потом импорт его в платформ студию, добавление к процу и так далее...

для начала попробуйте без фифо, просто организовать считывание данных с АЦП в процессор через шину.
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 18 2013, 11:31
Сообщение #40


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Цитата
для начала попробуйте без фифо, просто организовать считывание данных с АЦП в процессор через шину.

Т.е пока без 4 пункта сделать? (без фифо)
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 18 2013, 12:54
Сообщение #41


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ну да, сделайте шаблон на 4 регистра к примеру. Там будет процедура записи и чтения по адресам регистров, уже визардом сделанная.
Данные с АЦП просто пихайте в один из регистров, а с проца попробуйте почитать по адресу. Если все получится между АЦП и регистром вставите фифо. Совсем в начале можно даже без АЦПsm.gif просто поймите как оно все работает...
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 18 2013, 15:10
Сообщение #42


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Спасибо , буду пробовать)
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 19 2013, 07:11
Сообщение #43


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Вообщем добавил ацп модуль, добавил ацп как компонент в user , возник вопрос: при связывании портов adc с user портами не знаю, к чему подключить spi_adc(in). И еще: мне похоже нужно будет добавить еще модули приемника и передатчика, т.к я платой управляю(настраиваю предусилитель и включаю ацп) с компа(посылаю по uart команды).
Прикрепленные файлы
Прикрепленный файл  user_logic.rar ( 2.39 килобайт ) Кол-во скачиваний: 9
 
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 19 2013, 08:17
Сообщение #44


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



что такое spi_adc(in). Это данные от АЦП или к АЦП.

вам надо юзере сделать такой порт, и к нему подключить. Потом во внешнем модуле сделать такой же порт и подключить его к этому порту юзера.

а уж последний подключить через констраин к нужной ноге плис.

Логично сделать чтобы команды с компа по уарт принимал процессор микроблайз, раскодировал, понимал что надо и делал это. Доступ к ацп все через те же регистры этого же модуля...
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 19 2013, 09:03
Сообщение #45


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Spi_adc - это вход с ацп. Данные от ацп adc_a : out std_logic_vector(13 downto 0) я привязал к Bus2IP_Data .
Цитата
вам надо юзере сделать такой порт, и к нему подключить.
Т.е я могу в user, где описаны порты 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 создавать порты, которые мне будут нужны и потом привязывать? Там просто написано Bus protocol ports, do not add to or delete

Т.е, например у меня есть N количество портов в ацп модуле. Этот модуль я вставляю в проект, потом как компонент в user файл. Порты ацп, которые мне не нужно связывать с портами user файла , но их нужно вывести потом наружу (задать в ucf ) я добавляю к user портам и связываю. А порты ацп, которые мне не нужно ни связывать с user портами, ни выводить наружу, я просто объявляю сигналы(с таким же названием) и связываю их с ними . И в топ файле верхнего уровня сделать тоже самое. Так я понимаю?))

Сообщение отредактировал vitali36 - Sep 19 2013, 12:42
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 19 2013, 13:17
Сообщение #46


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



топ файл - это транзитный файл для сигналов.
Те что идут с шины проца в нем преобразауются для удобства и идут в юзер файл
те что идут с наружи плис транзитом проходят в юзер
те что идут из юзера на шину, преобразуются для понимания шиной и отдаются процу
те что из юзера идут на ружу проходят транзитом

если вы сигналами внутри юзера модули соединили, то и ладно, не надо сигнал выводить в топ, там соединять с другим и заводить обратно.
в целом в топе не должно быть связей, он сделан только для разбора шины и преобразования ее в удобный для работы вид.

Цитата(vitali36 @ Sep 19 2013, 13:03) *
Spi_adc - это вход с ацп. Данные от ацп adc_a : out std_logic_vector(13 downto 0) я привязал к Bus2IP_Data .


нет так нельзя.

Bus2IP_Data - это вообще входные данные шины преобразованные для вашего удобства в вектор.
шина к айпи ( 2 - это тип two, фонетическое сокращение to)

IP2Bus_Data - это данные от вашего модуля на шину, но и к ним нельзя привязывать АЦП, потому что есть еще адрес и прочая лабудень

при создании шаблона модуля укажите что вы хотите в нем иметь 4 регистра, и посмотрите, там будет 2 блока
в одном эти регистры будут записываться данными с шины, а в другом выдавать на шину, в зависимости от значения чипселекта - который есть декодировка адреса

вам надо с ацп получить данные, и записать их в один из этих регистров, тогда при чтении по нужному адресу вы получите данные.

данные что хотите подать на АЦП по СПИ протоколу, надо передать спец модулем, взять готовый или сделать свой, который будет получать данные по шине в регистр и выдавливать его СПИ интерфейсов на вход АЦП. Среди IP корок было готово СПИ, но его и самому сделать хоть в вашем юзере делов то на часик.






Цитата
Там просто написано Bus protocol ports, do not add to or delete


это именно в этом месте нельзя добавлять и менять, для вас выделили местечко повыше, там написано типа пользовательские сигналы добавляйте здесь, или по ниже...

это условное разделение на области для удобства чтения
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 19 2013, 17:28
Сообщение #47


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Я так понял выход с ацп нужно приязывать будет ко входу одного из регистров. А что за шаблон-модуль с указанием регистров? Как его создавать?
Цитата
данные что хотите подать на АЦП по СПИ протоколу, надо передать спец модулем, взять готовый или сделать свой, который будет получать данные по шине в регистр и выдавливать его СПИ интерфейсов на вход АЦП
Мне это точно не нужно. Работа с ацп и получением данных на вход описана в моем модуле, что я добавляю. Делал строго по даташиту
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 19 2013, 17:53
Сообщение #48


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



еще разок...
в платформ студии есть
hardware -> create or add perif...
в ней можно выбрать create new, ну вы это делали судя по тому что у вас есть модуль.

так вот где то по ходу визарда можно указать сколько регистров вы хотите.
я не пробовал хотеть 1 регистрsm.gif, всегда хотел несколько, потому у меня всегда в юзер был добавлен кусок где идет разбор адреса и запись - чтение этих регистров.

у вас навярняка тоже есть такой кусок.
сделайте wire подключите его к выходу вашего АЦП, а при чтении какого хотите из регистров, выдайте этот сигнал на шину вместо него, или просто каждый такт сохраняйте значение wire в регистр...

ну вообщем и целом проявите сообразительность) слишком долго вы уже топчитесь вокруг несложной штуки...
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 19 2013, 18:39
Сообщение #49


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Не этот случайно?)
FIFO_CNTL_SM_COMB : process( WFIFO2IP_empty, WFIFO2IP_RdAck, RFIFO2IP_full, RFIFO2IP_WrAck, fifo_cntl_cs ) is
begin

-- set defaults
fifo_rdreq_cmb <= '0';
fifo_wrreq_cmb <= '0';
fifo_cntl_ns <= fifo_cntl_cs;

case fifo_cntl_cs is
when IDLE =>
-- data is available in the write fifo and there's space in the read fifo,
-- so we can start transfering the data from write fifo to read fifo
if ( WFIFO2IP_empty = '0' and RFIFO2IP_full = '0' ) then
fifo_rdreq_cmb <= '1';
fifo_cntl_ns <= RD_REQ;
end if;
when RD_REQ =>
-- data has been read from the write fifo,
-- so we can write it to the read fifo
if ( WFIFO2IP_RdAck = '1' ) then
fifo_wrreq_cmb <= '1';
fifo_cntl_ns <= WR_REQ;
end if;
when WR_REQ =>
-- data has been written to the read fifo,
-- so data transfer is done
if ( RFIFO2IP_WrAck = '1' ) then
fifo_cntl_ns <= IDLE;
end if;
when others =>
fifo_cntl_ns <= IDLE;
end case;

end process FIFO_CNTL_SM_COMB;

FIFO_CNTL_SM_SEQ : process( Bus2IP_Clk ) is
begin

if ( Bus2IP_Clk'event and Bus2IP_Clk = '1' ) then
if ( Bus2IP_Reset = '1' ) then
IP2WFIFO_RdReq <= '0';
IP2RFIFO_WrReq <= '0';
fifo_cntl_cs <= IDLE;
else
IP2WFIFO_RdReq <= fifo_rdreq_cmb;
IP2RFIFO_WrReq <= fifo_wrreq_cmb;
fifo_cntl_cs <= fifo_cntl_ns;
end if;
end if;

end process FIFO_CNTL_SM_SEQ;
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 19 2013, 18:45
Сообщение #50


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



если только случайно...

это что? похоже на какую то обертку от ФИФО для подключения к шине. Я уверен что если написать в яндексе код верилог или код ВХДЛ вы найдете огромное количество программного кода, только какой в этом всем смысл?

Я все больше и больше уверяюсь в том что вы решаете задачу методом ленивого перебора. То есть даже анализ выбранных методом тыка элементов вы хотите повесить на других.

вам стоит еще раз перечитать все выше сказанное и аккуратно не торопясь сесть все делать...
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 19 2013, 19:13
Сообщение #51


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Хорошо. Да я этот код юзал уже. Xps его сгенерил под ddr2 мою. Что-то не могу найти эти регистры. Где этот кусок находится? В user Точно нету.

Сообщение отредактировал vitali36 - Sep 19 2013, 19:20
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 20 2013, 07:43
Сообщение #52


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



signal slv_reg0 : std_logic_vector(0 to C_SLV_DWIDTH-1);
signal slv_reg1 : std_logic_vector(0 to C_SLV_DWIDTH-1);
signal slv_reg2 : std_logic_vector(0 to C_SLV_DWIDTH-1);
signal slv_reg3 : std_logic_vector(0 to C_SLV_DWIDTH-1);
signal slv_reg_write_sel : std_logic_vector(0 to 3);
signal slv_reg_read_sel : std_logic_vector(0 to 3);
signal slv_ip2bus_data : std_logic_vector(0 to C_SLV_DWIDTH-1);
signal slv_read_ack : std_logic;
signal slv_write_ack : std_logic;

Это?) Ну и там дальше логика описана их.. Заново просто создал проект(там кол-во 4 указал как ты сказал)

Сообщение отредактировал vitali36 - Sep 20 2013, 07:44
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 20 2013, 09:50
Сообщение #53


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



вот можете если хотитеsm.gif

теперь если вы подключите этот модуль ничего не меняя то сможете писать и читать ваши регистры
Адрес модуля + Адрес регистра. Адреса через 4 байта.


Дальше вам надо изменить этот модуль так чтобы данные АЦП сохранялись в регистр.

А дальше чтобы данные АЦП сохранялись в фифо, а выход фифо в регистр по каждому чтению из регистра.

я уверен вы справитесь!
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 20 2013, 10:04
Сообщение #54


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Цитата
Дальше вам надо изменить этот модуль так чтобы данные АЦП сохранялись в регистр.

signal t_adc_a ( 13 downto 0 ) - тот wire, про который вы говорили. Он же связан с выходом ацп (adc_a => t_adc_a). Этому сигналу мне и нужно выполнять присвоение : допустим если регистр 2, то slv_reg2 <= t_adc_a . Так?
И еще: я добавил вот эти порты в описания портов в user : t_spi_adc : in std_logic; --LOC = D16;
t_amp_done : out std_logic; --LOC = R20;
t_adc_done : out std_logic; --LOC = T19;
t_adc_start : out std_logic; --LOC = U20;
t_amp_cs : out std_logic; --LOC = V20;
t_start_conv : out std_logic; --LOC = Y6;
t_spi_mosi : out std_logic; --LOC = AB14;
t_spi_sck : out std_logic; --LOC = AA20;
Их мне нужно будет потом на ножки вывести. Правильно?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 20 2013, 10:23
Сообщение #55


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



в целом да.

есть одна тонкость
slv_reg2 может быть записан через шину из проца. Так что присваивать в него данные надо либо под тем же клоком по которому происходит запись, либо убрать вообще его из списка записываемых. А то будет конфликт 2 источника данных у регистра.
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 20 2013, 10:35
Сообщение #56


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



По сути можно вообще один регистр юзать) зачем их 4) Алгоритм работы fifo пока не писать, сначала просто данные с ацп в регистр и с регистра по uart да? Кстати, я еще щас добавлю мои модули работы uart(там приемник и передатчик). Но в проце уже есть uart(автоматически сгенеринный) и там похоже свой алгоритм. Как он узнает что нужно на мои модули uart ориентироваться?

Сообщение отредактировал vitali36 - Sep 20 2013, 10:39
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 20 2013, 11:46
Сообщение #57


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

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

К ксалинковскому уарту есть библиотека как в него писать и читать, рекомендую воспользоваться ей для передачи своих данных по уарту, а спринтф оставить для отладки и не более.

Ваш уарт надо делать через тот же интерфейс с регистрами на шине...

Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 20 2013, 12:06
Сообщение #58


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Не, с спринтфом я ничего не хочу делать. Это все для отладки в sdk. Я просто наверно плохо объяснил. Когда я создал проект в xps(без ip), я экспортнул его в sdk, чтобы протестировать. При создании проекта я указывал что в проце будет rs-232 dce. Потом в sdk создал тестовые проекты, так вот все работало, и по uart там передавалось что память инициализирована или тот же hello world. Если бы я просто хотел бы увидеть оцифрованные данные в том же com-port toolkit, то без проблем. Но мне нужно платой то управлять из программы(c#), там у меня есть кнопка которая открывает порт, потом жму кнопку настроить ацп и предусилитель(по uart посылется команда, загораются диоды что все ок), и потом уже жму кнопку считать данные на комп. Т.е нужно мои модули работы uart еще добавить, и некоторые порты тоже наружу вывести
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 20 2013, 14:52
Сообщение #59


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



это не уарт, это модуль настройки АЦП с УАРТ интерфейсом.

Нет он не только не нужен, а и вреден!
вы писали модуль с автоматом который принимает данные и настраивает АЦП, теперь у вас есть процессор, он и должен это сделать.

Так что система у вас должна быть КОМП -----------(УАРТ) МикроБлайз (ШИНА)------------ АЦП
Никаких прямых каналов КОМП - АЦП быть не должно. Микроблайз должен настроить АЦП, обработать, собрать данные, и послать в компьютер. Он теперь ядро вашей системы. Единственное что можно это организовать ДМА канал АЦП - ПАМЯТЬ. И если есть отдельный не управляющий УАРТ то сделать второй канал ПАМЯТЬ - этот УАРТ. Но управлять всем должен микроблайз согласно данным по основному уарту.

На канале комп - микроблайз вам надо сделать интерфейс, лучше что-то стандартное подобрать, модбас или что-то подобное
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 20 2013, 16:01
Сообщение #60


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Цитата
Микроблайз должен настроить АЦП, обработать, собрать данные, и послать в компьютер. Он теперь ядро вашей системы

Микроблайз все это делает автоматически? Если он автоматически включает мой ацп, собирает и отправляет, то тогда вообще идеально. Я просто с компа приму данные и все)

Сообщение отредактировал vitali36 - Sep 20 2013, 16:02
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 20 2013, 21:00
Сообщение #61


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ну думаю в вашем случае да. Все так и будет, все произойдет само собой.

мне просто интересно, а вы разработчик? как долго? велика ли команда? что делаете такими силами? правда реально любопытно...

может вам уже кого поднанять?
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 21 2013, 08:30
Сообщение #62


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Цитата
ну думаю в вашем случае да. Все так и будет, все произойдет само собой
Это сарказм?) Да, не долго(реальный проект вот первый для меня). Нас двое. Что делаем? Да вот это пока что задание и делаем)
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 21 2013, 10:01
Сообщение #63


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Найдите третьего кто это уже когда то делал. Без проводника в этом деле не стоит. Сразу запомните как делать не надо и времени кучу потеряете.

По нормативом ваша задача решается за полдня-день с отладкой, на выходе хороший код с комментариями.

Если ни разу не были до этого знакомы с микроблайзом то не более недели.

Вы ковыряетесь уже очень долго, гораздо дольше чем было бы разумно...


По поводу вашего вопроса, микроблайз - это процессор без программы он ничего не сделает... Я имел ввиду что настраивать АЦП надо из микроблайза а не из компьютера. Компьютер просто дает команду настрой АЦП, а микроблайз делает... можно конечно организовать сквозной канал компьютер - ацп, это надо определить по тому как часто вам надо это делать и какие есть вариации настроек, надо ли их менять...
Но в любом случае даже сквозной канал должен идти через микроблайз, с протоколом на УАРТе


П.С. Уверены что в коммерцианализированной помощи не нуждаетесь?
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 21 2013, 13:47
Сообщение #64


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Да вот это вот доделаем и третьего однозначно будем искать. Я 5 курс, другой только закончил. Понятно дело что с микроблайзом дело не имели.
Прежде чем перейти непосредственно к настройке ацп через проц, хотел спросить все ли правильно я сделал в user с чтением-записью регистров. Есть два процесса чтения-записи регистров, взависимости от адреса. Вот к примеру при чтении: там
case slv_reg_write_sel is
when "1000" =>
for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
if ( Bus2IP_BE(byte_index) = '1' ) then
slv_reg0(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);
Вместо последней строчки я написал slv_reg0 <= t_adc_a (в регистр загоняем данные с ацп). Как я выбрал адрес: в самом начале, где объявлялся сигнал
signal slv_reg_write_sel : std_logic_vector(0 to 3); я присвоил изначально ему значение signal slv_reg_write_sel : std_logic_vector(0 to 3):="1000", т.е при обходе case у меня будет выбираться reg0. Тоже самое я сделал с сигналом slv_reg_read_sel.
Так?
Go to the top of the page
 
+Quote Post
Sergey_Bekrenyov
сообщение Sep 21 2013, 19:02
Сообщение #65


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 14-12-10
Из: Королёв
Пользователь №: 61 599



Ребята, может Вы в личку перейдете? Кроме Вас тут никого нет ...
Вряд ли кому-нибудь это окажется полезным.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 21 2013, 19:07
Сообщение #66


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



не не такsm.gif...

Цитата
т.е при обходе case у меня будет выбираться reg0


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

во вторых вы перепутали чтение и запись. Тот кусок кода что вы привели возникает в момент обращения процессора в ваш модуль, Bus2IP_Data - это шина от процессора к вам. То есть чтобы сработало ваше присвоение
Цитата
slv_reg0 <= t_adc_a
вам надо будет что-то писать в регистр, так конечно можно, но согласитесь странно.

по уму вам в этом месте надо просто убрать
Цитата
slv_reg0(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);


а во втором блоке вместо
Цитата
IP2Bus_Data .... <= slv_reg0 .....


записать как раз
Цитата
IP2Bus_Data .... <= t_adc_a

обратите внимание что меняется IP2Bus и Bus2IP в зависимости от того куда идут данные в микроблайз или обратно.

так же обратите внимание на конструкцию

Цитата
for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
if ( Bus2IP_BE(byte_index) = '1' ) then


подумайте зачем она нужна и что делает...



2 человека, оба практически без опыта,... тяжелый стартап... интерфейс связи вы выбрали практически умирающий. В какой области хоть устройство?


Цитата(Sergey_Bekrenyov @ Sep 21 2013, 23:02) *
Ребята, может Вы в личку перейдете? Кроме Вас тут никого нет ...
Вряд ли кому-нибудь это окажется полезным.


может каким то зеленым... хотя наверное вы правы...
надо тему порезать и забыть...
Go to the top of the page
 
+Quote Post
Sergey_Bekrenyov
сообщение Sep 21 2013, 19:20
Сообщение #67


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 14-12-10
Из: Королёв
Пользователь №: 61 599



Цитата(Golikov A. @ Sep 21 2013, 23:07) *
может каким то зеленым... хотя наверное вы правы...
надо тему порезать и забыть...

зеленых Вы запутаете окончательно
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 21 2013, 20:08
Сообщение #68


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Написал в личку. Сергей, почему зеленых он запутает окончательно? Он нормально разъясняет вроде как)
Go to the top of the page
 
+Quote Post
Sergey_Bekrenyov
сообщение Sep 21 2013, 20:47
Сообщение #69


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 14-12-10
Из: Королёв
Пользователь №: 61 599



Цитата(vitali36 @ Sep 22 2013, 00:08) *
Написал в личку. Сергей, почему зеленых он запутает окончательно? Он нормально разъясняет вроде как)

Вам шашечки или ехать? Иными словами Вам задачу надо решить или что?

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

Микроблэйз палка о двух концах. Я несколько лет назад после тренингов Ксайлинкс именно по встраиваемым системам отлаживал свой проект долго и с плясками с бубном.

Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 21 2013, 21:43
Сообщение #70


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Он ДДР хотел прикрутить в начале, оттуда микроблайз и образовался, ведь согласитесь ДДР без него трудно в проект воткнуть, чтобы удобно было...
Go to the top of the page
 
+Quote Post
Sergey_Bekrenyov
сообщение Sep 21 2013, 21:54
Сообщение #71


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 14-12-10
Из: Королёв
Пользователь №: 61 599



Цитата(Golikov A. @ Sep 22 2013, 01:43) *
Он ДДР хотел прикрутить в начале, оттуда микроблайз и образовался, ведь согласитесь ДДР без него трудно в проект воткнуть, чтобы удобно было...

MIG чем не устраивает? Один канал на запись, один на чтение
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 22 2013, 06:56
Сообщение #72


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



в начале казалось что это сложнее, плюс данные - настройки по уарту должны были ходить.
Go to the top of the page
 
+Quote Post

5 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th August 2025 - 17:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.02285 секунд с 7
ELECTRONIX ©2004-2016