|
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
|
|
|
|
|
 |
Ответов
(45 - 59)
|
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
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|