|
Microblaze+DDR2+UART, собрать проект в ise |
|
|
|
Sep 10 2013, 11:22
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
 |
Ответов
(1 - 71)
|
Sep 13 2013, 20:19
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
ответил в прошлой вашей теме..
если связались с микроблайзом, то ваши инструменты платформ студия и СДК, ISE теперь только для создания модулей. Собирать финальный проект в ISE не советую...
П.С. Все немного глючное, когда обновляете (после модификации) проц и экспортите его в сдк, в существующий проект, настойчиво рекомендую удалить все созданные софтварные проекты (только проекты из прожект эксплорера, не файлы на диске) и заново их импортнуть, потом сделать клинап проектов, всех, и заново их билднуть... а то иногда половина файлов остается старых, половина новых и вот тут уже вообще беда начинается... билдишь одно, запускаешь другое, редактируешь тертье...
|
|
|
|
|
Sep 15 2013, 14:43
|

Местный
  
Группа: Свой
Сообщений: 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 Если уж сильно хочется майкроблэйз - добавьте туда еще один уарт. К одному подцепите свой старый, второй киньте на комп.
|
|
|
|
|
Sep 15 2013, 19:02
|
Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354

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

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

|
Цитата(vitali36 @ Sep 15 2013, 23:02)  Сергей, DDR2 поможет тем, что скорости уарта не хватает "хватать данные с ацп и передавать". С ацп они сыпятся быстрее. Буфер однозначно нужен. По поводу объема данных. Для теста хватит совсем чуть-чуть. К примеру записать 4096 отсчетов. Но а если будет работаь все в реале, т.е постоянно? нужно же будет накапливать отправлять, очищать и снова так по кругу(если я правилно понимаю).
Не совсем понял как это. Если не хватает скорости, то ничего не поможет! От того что Вы сложите данные в ДДР данных меньше не станет. Либо прореживать придется, либо фильтровать, либо нужен другой интерфейс - посмотрите в сторону Ethernet. На опенкорес вполне рабочий MAC лежит Делаете систему с двумя уартами и ддр контроллером. Один цепляете к передатчику в FPGA (там можете скорость задрать), а второй к компьютеру. А уж между ними ставьте хоть ДДР буфер, хоть фильтр ... Но все же сгенерите ДДР контроллер с помощью MIG - у Вас будет просто доступ ДДР через 2 FIFO. Микроблэйз для Вашей задачи слишком ресурсо-. энерго- и время- затратен
|
|
|
|
|
Sep 15 2013, 20:43
|
Частый гость
 
Группа: Участник
Сообщений: 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); иначе рабоать то не будет. Плюс еще модуль ацп и уарт как туда запилить и связать...
Эскизы прикрепленных изображений
|
|
|
|
|
Sep 15 2013, 21:10
|

я только учусь...
     
Группа: Модераторы
Сообщений: 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.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
Sep 16 2013, 09:32
|
Частый гость
 
Группа: Участник
Сообщений: 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
Эскизы прикрепленных изображений
|
|
|
|
|
Sep 16 2013, 12:46
|

Участник

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

|
Цитата Вот результат работы на графике оцифрованной синусоиды без использования DDR2(данные с ацп на uart и потом на комп). И таким макаром весь график. Выложил естественно только часть Вы пробовали подключаться к входу с АЦП (какой вид графика уже там)? Еще интересна частота АЦП и синусоиды
|
|
|
|
|
Sep 16 2013, 13:13
|

Участник

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

|
Цитата Частота дискретизации 3мегасемпла. Частота сигнала не помню какую точно задавал ( около 1кГц ) - значит на форме где-то 1/100 периода ? И еще, если АЦП 8-битное (это 24000000бит/сек) , а com-port настроен на 9600 бит/сек, то как происходит передача данных на ПК :принял семпл-передал, остальные пропустил или принял несколько семплов-отослал, потом опять часть принял-отослал)? в первом случае частота семплирования намного меньше, чем ожидается, а во втором должны выходить куски сигнала, не связанные с собой
|
|
|
|
|
Sep 16 2013, 14:55
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Sep 16 2013, 15:10
|

Местный
  
Группа: Свой
Сообщений: 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. Вообще хочу спасибо всем сказать что помогаете мне - тратите свое личное время Прицепите Чипскоп и он выведет Вам график. Вы пытаетесь настроить кучу модулей одновременно.
|
|
|
|
|
Sep 16 2013, 17:35
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Модуль АЦП человек написал сам, как я понимаю
учтите что обычно ресет шины (Bus2IP_Reset) обратный, посмотрите какой уровень у нее при ресете, там что-то не как обычно в микросхемах насколько я помню.
Не очень понятно как вы хотите привязать АЦП к фифо, я что-то такого фифо не припоминаю, по описанию оно для чего сделано? Это не от Езернета фифо случаем оторвали?
Про времянную метку я предлагаю вот что
берем счетчик 8 бит, который каждое считывание ацп увеличиваем на 1. и ваши данные с АЦП превращаем
временная метка + данные ацп, то есть 14+8 = 22 бита, потом это передаете на компьютер то есть не 2 байта на отсчет а 3.
если все хорошо там будет
1 АДЦ_код 2 АДЦ код ....
в таком варианте ваши точки графика получают не только Y но и Х координату, и уже можно будет определеннее сказать у вас нарушение данных или их последовательности, может какие то пропускаются, а какие то принимаются слишком долго с паузами.... Если есть какое то синхронизирующее устройство, то времянную метку лучше брать с него, запустить на нем такой же счетчик и забирать каждую синхропосылку...
Смысл локализовать проблему, а потом уже решать ее, а не крутить кучу блоков, половину которых вы соединяете методом тыка (как у меня создается впечатление)
|
|
|
|
|
Sep 16 2013, 18:26
|
Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354

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

Местный
  
Группа: Свой
Сообщений: 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 бит
|
|
|
|
|
Sep 17 2013, 07:44
|
Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354

|
Ребят, ну выконечно разогнались)) В данный момент пока что задача состоит только в том, чтобы проверить то же самое(не меняя ничего в модклях, без добавления временных меток и т.д), только задействовав память. Посмотреть результат и уже от этого отталкиваться. Для этого я решил использовать microblaze. Создал проект microblaze, в sdk протестировал память и uart - работает. Следующий шаг - добавление модуля ацп. В этой статье(уже кидал ссылку) http://www.fpgadeveloper.com/2008/10/integ...peripheral.html показано добавление модуля на примере умножителя(два числа перемножаются, записываются в fifo, считываются и по uart передаются на комп). Вот я хочу сделать также, только вместо этого умнжителя мой модуль ацп.
|
|
|
|
|
Sep 17 2013, 10:39
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
хотите я кину пример где через езернет настраиваются драйверы шаговых двигателей, и вы попробуете свое АЦП вместо мотора воткнуть?..
У вас есть модуль сбора данных с ацп? он может полученные данные выдать на параллельную шину, и дернуть одной ножкой вверх-вниз?
Не может - допишите это дело 10 минут.
Дальше делаете так микроблайз + уарт дальше добавляете стандартную IPcore fifo
у него есть вход и выход, подаете данные АЦП на вход, и дергаете ножкой они сохраняются в ФИФО.
дальше это фифо вешаете на шину процессора, для того чтобы забрать данные надо будет просто прочитать из адресного пространства этого модуля и все.
дальше процессором в вечном цикле читаете данные из фифо и кладете в память, а потом читаете из памяти и кладете в уарт, и делаете что хотите...
но реально проблему решаете не с того конца.
я бы взял написал модуль что читает данные с ацп и пихает их в фифо. Для этого сделал бы фифо не на шину проца, а нативным, там есть такая галочка.
Обернул бы этот модуль в модуль что данные из фифо по запросу выдает на проц, это тоже делается через визард (создается шаблон модуля с регистровым доступом и чуть дописывается внутри)
дальше бы все это запустил и читал бы данные из фифо и слал бы их наверх, размер фифо может быть до полумегобайта (зависит от плис). Оттестировтаь тракт хватит. Но только реально никакая память не решит проблемы разности скорость приема и передачи, при условии бесконечности данных...
|
|
|
|
|
Sep 17 2013, 11:00
|
Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354

|
Цитата хотите я кину пример где через езернет настраиваются драйверы шаговых двигателей, и вы попробуете свое АЦП вместо мотора воткнуть?.. Т.е вместо uart попробовать спользовать ethernet и тогда память никакая не нужна? Цитата У вас есть модуль сбора данных с ацп? он может полученные данные выдать на параллельную шину, и дернуть одной ножкой вверх-вниз? Модуль сбора данных с ацп есть. Выдать данные на параллельную шину - это можно организовать. Цитата Дальше делаете так микроблайз + уарт Микроблайз с uart есть. Сделал проект а xps. Там же ddr2 у меня(при создании проекта указывал). Цитата дальше добавляете стандартную IPcore fifo Это каким образом добавить и где его взять?
|
|
|
|
|
Sep 17 2013, 11:53
|
Гуру
     
Группа: Свой
Сообщений: 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, таймеры, порты ввода-вывода и куча куча куча всего
|
|
|
|
|
Sep 17 2013, 18:50
|
Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354

|
Не нахожу такого. Вот скрин.
Эскизы прикрепленных изображений
|
|
|
|
|
Sep 17 2013, 20:15
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
это когда вы уже выберите фифо memory and storage-> FIFOs -> fifo Generator
элемент сделается и добавится в проект, потом по нему 2 раза кликните откроется (или сразу по добавлению откроется) визард. на первой странице натив - акси, ставьте галку натив.
работает оно так, у него есть шина входная и выходная, клок, ресет, и врайт енайбл и реад енайбл. Если фифо не в ресете, то на каждый клок при установленном реад енайбле на выходе появляются данные, а при установленном врайт енайбле данные со входа пихаются в фифо.
то есть алгоритм считали данные а АЦП, поставили на вход фифо, дернули на 1 клок врайт енайбл и готово.
дальше каждое чтение из регистра с шины (со стороны проца) выставляете данные с выхода фифо на шину, а сами на 1 клок дергаете реад енайбл. вот и все... остается только следить за опустошением - переполнением фифо, в нем есть счетчик данных и соотвествующие сигналы
кстати эти сигналы очень для вас важны, если фифо опустошится значит скорости передачи хватает, если переполнится то нет. Потерь данных с фифо не должно быть, если оно не переполнилось и не опустошилось
|
|
|
|
|
Sep 17 2013, 21:10
|
Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354

|
Посмтотри пожалуйста правильно ли там все, вот что получилось пока что(модуль ацп еще не добавлял). Его добавить его то просто как add source? Где его вставить как компонент и связать порты (в каком из файлов). И алгоритм, что ты описал где мне кодить?(спасибо, кстати, что подробно так его описал)).
|
|
|
|
|
Sep 18 2013, 10:28
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
во я лошара  это у меня среда vhd файл приняла за какой то образ диска)... ну да ладно. я увидел пустой юзер файл, это не есть верно) его стоило бы наполнить. А импортить модуль в проект надо уже после того как в ISE вы его напишите, проверите и имплементнете. Честно не очень понимаю чего вы хотите чтобы я посмотрел  если вас беспокоит что по коду, то лучше кидайте код суда, я его погляжу глазьями, а если по соединениям, то опять же лучше картинки. У меня виндоус 8 и 64 бита, а для ксалинкса - это приговор, так что работаю на виртуалке (не спрашивайте почему так получилось, это карма  ), и надо сделать кучу действий чтобы открыть проект, это утомляет...
|
|
|
|
|
Sep 18 2013, 11:31
|
Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354

|
Цитата для начала попробуйте без фифо, просто организовать считывание данных с АЦП в процессор через шину. Т.е пока без 4 пункта сделать? (без фифо)
|
|
|
|
|
Sep 19 2013, 07:11
|
Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354

|
Вообщем добавил ацп модуль, добавил ацп как компонент в user , возник вопрос: при связывании портов adc с user портами не знаю, к чему подключить spi_adc(in). И еще: мне похоже нужно будет добавить еще модули приемника и передатчика, т.к я платой управляю(настраиваю предусилитель и включаю ацп) с компа(посылаю по uart команды).
|
|
|
|
|
Sep 19 2013, 09:03
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Sep 19 2013, 13:17
|
Гуру
     
Группа: Свой
Сообщений: 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 это именно в этом месте нельзя добавлять и менять, для вас выделили местечко повыше, там написано типа пользовательские сигналы добавляйте здесь, или по ниже... это условное разделение на области для удобства чтения
|
|
|
|
|
Sep 19 2013, 17:28
|
Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354

|
Я так понял выход с ацп нужно приязывать будет ко входу одного из регистров. А что за шаблон-модуль с указанием регистров? Как его создавать? Цитата данные что хотите подать на АЦП по СПИ протоколу, надо передать спец модулем, взять готовый или сделать свой, который будет получать данные по шине в регистр и выдавливать его СПИ интерфейсов на вход АЦП Мне это точно не нужно. Работа с ацп и получением данных на вход описана в моем модуле, что я добавляю. Делал строго по даташиту
|
|
|
|
|
Sep 19 2013, 17:53
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
еще разок... в платформ студии есть hardware -> create or add perif... в ней можно выбрать create new, ну вы это делали судя по тому что у вас есть модуль. так вот где то по ходу визарда можно указать сколько регистров вы хотите. я не пробовал хотеть 1 регистр  , всегда хотел несколько, потому у меня всегда в юзер был добавлен кусок где идет разбор адреса и запись - чтение этих регистров. у вас навярняка тоже есть такой кусок. сделайте wire подключите его к выходу вашего АЦП, а при чтении какого хотите из регистров, выдайте этот сигнал на шину вместо него, или просто каждый такт сохраняйте значение wire в регистр... ну вообщем и целом проявите сообразительность) слишком долго вы уже топчитесь вокруг несложной штуки...
|
|
|
|
|
Sep 20 2013, 09:50
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
вот можете если хотите  теперь если вы подключите этот модуль ничего не меняя то сможете писать и читать ваши регистры Адрес модуля + Адрес регистра. Адреса через 4 байта. Дальше вам надо изменить этот модуль так чтобы данные АЦП сохранялись в регистр. А дальше чтобы данные АЦП сохранялись в фифо, а выход фифо в регистр по каждому чтению из регистра. я уверен вы справитесь!
|
|
|
|
|
Sep 20 2013, 10:04
|
Частый гость
 
Группа: Участник
Сообщений: 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; Их мне нужно будет потом на ножки вывести. Правильно?
|
|
|
|
|
Sep 20 2013, 11:46
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
можно и 1, но еще хорошо настройки ацп как то передавать, это второй регистр, выбирать чего - то и так далее... были бы регистры, а там придумаете...
вы подключите ваш уарт, как процессор узнает что это уарт?... если вас тревожит вопрос как проц узнает что принтф надо отправлять в уарт, так это делается через спец библиотеку, которая по специальному хедеру определяет модули уарта написанные ксалинксом и в них обращается, это чисто для отладки, потому что даже между 2 ксалиновских уартов эта функция не разбирается. В настройках проекта можно указывать куда идет вывод спринтфа и с этим лучше не играть.
К ксалинковскому уарту есть библиотека как в него писать и читать, рекомендую воспользоваться ей для передачи своих данных по уарту, а спринтф оставить для отладки и не более.
Ваш уарт надо делать через тот же интерфейс с регистрами на шине...
|
|
|
|
|
Sep 20 2013, 12:06
|
Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354

|
Не, с спринтфом я ничего не хочу делать. Это все для отладки в sdk. Я просто наверно плохо объяснил. Когда я создал проект в xps(без ip), я экспортнул его в sdk, чтобы протестировать. При создании проекта я указывал что в проце будет rs-232 dce. Потом в sdk создал тестовые проекты, так вот все работало, и по uart там передавалось что память инициализирована или тот же hello world. Если бы я просто хотел бы увидеть оцифрованные данные в том же com-port toolkit, то без проблем. Но мне нужно платой то управлять из программы(c#), там у меня есть кнопка которая открывает порт, потом жму кнопку настроить ацп и предусилитель(по uart посылется команда, загораются диоды что все ок), и потом уже жму кнопку считать данные на комп. Т.е нужно мои модули работы uart еще добавить, и некоторые порты тоже наружу вывести
|
|
|
|
|
Sep 20 2013, 14:52
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
это не уарт, это модуль настройки АЦП с УАРТ интерфейсом.
Нет он не только не нужен, а и вреден! вы писали модуль с автоматом который принимает данные и настраивает АЦП, теперь у вас есть процессор, он и должен это сделать.
Так что система у вас должна быть КОМП -----------(УАРТ) МикроБлайз (ШИНА)------------ АЦП Никаких прямых каналов КОМП - АЦП быть не должно. Микроблайз должен настроить АЦП, обработать, собрать данные, и послать в компьютер. Он теперь ядро вашей системы. Единственное что можно это организовать ДМА канал АЦП - ПАМЯТЬ. И если есть отдельный не управляющий УАРТ то сделать второй канал ПАМЯТЬ - этот УАРТ. Но управлять всем должен микроблайз согласно данным по основному уарту.
На канале комп - микроблайз вам надо сделать интерфейс, лучше что-то стандартное подобрать, модбас или что-то подобное
|
|
|
|
|
Sep 20 2013, 16:01
|
Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354

|
Цитата Микроблайз должен настроить АЦП, обработать, собрать данные, и послать в компьютер. Он теперь ядро вашей системы Микроблайз все это делает автоматически? Если он автоматически включает мой ацп, собирает и отправляет, то тогда вообще идеально. Я просто с компа приму данные и все)
Сообщение отредактировал vitali36 - Sep 20 2013, 16:02
|
|
|
|
|
Sep 21 2013, 08:30
|
Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354

|
Цитата ну думаю в вашем случае да. Все так и будет, все произойдет само собой Это сарказм?) Да, не долго(реальный проект вот первый для меня). Нас двое. Что делаем? Да вот это пока что задание и делаем)
|
|
|
|
|
Sep 21 2013, 19:07
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
не не так  ... Цитата т.е при обходе 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)  Ребята, может Вы в личку перейдете? Кроме Вас тут никого нет ... Вряд ли кому-нибудь это окажется полезным. может каким то зеленым... хотя наверное вы правы... надо тему порезать и забыть...
|
|
|
|
|
Sep 21 2013, 20:47
|

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

|
Цитата(vitali36 @ Sep 22 2013, 00:08)  Написал в личку. Сергей, почему зеленых он запутает окончательно? Он нормально разъясняет вроде как) Вам шашечки или ехать? Иными словами Вам задачу надо решить или что? Если это Ваш первый проект, то Вам в первую очеедь надо научится отлаживать, локализовать ошибки и исправлять их. Вы же неработающий проект начинаете усложнять, причем вещами, которые на порядок больше и сложнее, чем то, что уже есть в проекте. Микроблэйз палка о двух концах. Я несколько лет назад после тренингов Ксайлинкс именно по встраиваемым системам отлаживал свой проект долго и с плясками с бубном.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|