Полная версия этой страницы:
Microblaze+DDR2+UART
vitali36
Sep 19 2013, 19:13
Хорошо. Да я этот код юзал уже. Xps его сгенерил под ddr2 мою. Что-то не могу найти эти регистры. Где этот кусок находится? В user Точно нету.
vitali36
Sep 20 2013, 07:43
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 указал как ты сказал)
Golikov A.
Sep 20 2013, 09:50
вот можете если хотите

теперь если вы подключите этот модуль ничего не меняя то сможете писать и читать ваши регистры
Адрес модуля + Адрес регистра. Адреса через 4 байта.
Дальше вам надо изменить этот модуль так чтобы данные АЦП сохранялись в регистр.
А дальше чтобы данные АЦП сохранялись в фифо, а выход фифо в регистр по каждому чтению из регистра.
я уверен вы справитесь!
vitali36
Sep 20 2013, 10:04
Цитата
Дальше вам надо изменить этот модуль так чтобы данные АЦП сохранялись в регистр.
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;
Их мне нужно будет потом на ножки вывести. Правильно?
Golikov A.
Sep 20 2013, 10:23
в целом да.
есть одна тонкость
slv_reg2 может быть записан через шину из проца. Так что присваивать в него данные надо либо под тем же клоком по которому происходит запись, либо убрать вообще его из списка записываемых. А то будет конфликт 2 источника данных у регистра.
vitali36
Sep 20 2013, 10:35
По сути можно вообще один регистр юзать) зачем их 4) Алгоритм работы fifo пока не писать, сначала просто данные с ацп в регистр и с регистра по uart да? Кстати, я еще щас добавлю мои модули работы uart(там приемник и передатчик). Но в проце уже есть uart(автоматически сгенеринный) и там похоже свой алгоритм. Как он узнает что нужно на мои модули uart ориентироваться?
Golikov A.
Sep 20 2013, 11:46
можно и 1, но еще хорошо настройки ацп как то передавать, это второй регистр, выбирать чего - то и так далее... были бы регистры, а там придумаете...
вы подключите ваш уарт, как процессор узнает что это уарт?... если вас тревожит вопрос как проц узнает что принтф надо отправлять в уарт, так это делается через спец библиотеку, которая по специальному хедеру определяет модули уарта написанные ксалинксом и в них обращается, это чисто для отладки, потому что даже между 2 ксалиновских уартов эта функция не разбирается. В настройках проекта можно указывать куда идет вывод спринтфа и с этим лучше не играть.
К ксалинковскому уарту есть библиотека как в него писать и читать, рекомендую воспользоваться ей для передачи своих данных по уарту, а спринтф оставить для отладки и не более.
Ваш уарт надо делать через тот же интерфейс с регистрами на шине...
vitali36
Sep 20 2013, 12:06
Не, с спринтфом я ничего не хочу делать. Это все для отладки в sdk. Я просто наверно плохо объяснил. Когда я создал проект в xps(без ip), я экспортнул его в sdk, чтобы протестировать. При создании проекта я указывал что в проце будет rs-232 dce. Потом в sdk создал тестовые проекты, так вот все работало, и по uart там передавалось что память инициализирована или тот же hello world. Если бы я просто хотел бы увидеть оцифрованные данные в том же com-port toolkit, то без проблем. Но мне нужно платой то управлять из программы(c#), там у меня есть кнопка которая открывает порт, потом жму кнопку настроить ацп и предусилитель(по uart посылется команда, загораются диоды что все ок), и потом уже жму кнопку считать данные на комп. Т.е нужно мои модули работы uart еще добавить, и некоторые порты тоже наружу вывести
Golikov A.
Sep 20 2013, 14:52
это не уарт, это модуль настройки АЦП с УАРТ интерфейсом.
Нет он не только не нужен, а и вреден!
вы писали модуль с автоматом который принимает данные и настраивает АЦП, теперь у вас есть процессор, он и должен это сделать.
Так что система у вас должна быть КОМП -----------(УАРТ) МикроБлайз (ШИНА)------------ АЦП
Никаких прямых каналов КОМП - АЦП быть не должно. Микроблайз должен настроить АЦП, обработать, собрать данные, и послать в компьютер. Он теперь ядро вашей системы. Единственное что можно это организовать ДМА канал АЦП - ПАМЯТЬ. И если есть отдельный не управляющий УАРТ то сделать второй канал ПАМЯТЬ - этот УАРТ. Но управлять всем должен микроблайз согласно данным по основному уарту.
На канале комп - микроблайз вам надо сделать интерфейс, лучше что-то стандартное подобрать, модбас или что-то подобное
vitali36
Sep 20 2013, 16:01
Цитата
Микроблайз должен настроить АЦП, обработать, собрать данные, и послать в компьютер. Он теперь ядро вашей системы
Микроблайз все это делает автоматически? Если он автоматически включает мой ацп, собирает и отправляет, то тогда вообще идеально. Я просто с компа приму данные и все)
Golikov A.
Sep 20 2013, 21:00
ну думаю в вашем случае да. Все так и будет, все произойдет само собой.
мне просто интересно, а вы разработчик? как долго? велика ли команда? что делаете такими силами? правда реально любопытно...
может вам уже кого поднанять?
vitali36
Sep 21 2013, 08:30
Цитата
ну думаю в вашем случае да. Все так и будет, все произойдет само собой
Это сарказм?) Да, не долго(реальный проект вот первый для меня). Нас двое. Что делаем? Да вот это пока что задание и делаем)
Golikov A.
Sep 21 2013, 10:01
Найдите третьего кто это уже когда то делал. Без проводника в этом деле не стоит. Сразу запомните как делать не надо и времени кучу потеряете.
По нормативом ваша задача решается за полдня-день с отладкой, на выходе хороший код с комментариями.
Если ни разу не были до этого знакомы с микроблайзом то не более недели.
Вы ковыряетесь уже очень долго, гораздо дольше чем было бы разумно...
По поводу вашего вопроса, микроблайз - это процессор без программы он ничего не сделает... Я имел ввиду что настраивать АЦП надо из микроблайза а не из компьютера. Компьютер просто дает команду настрой АЦП, а микроблайз делает... можно конечно организовать сквозной канал компьютер - ацп, это надо определить по тому как часто вам надо это делать и какие есть вариации настроек, надо ли их менять...
Но в любом случае даже сквозной канал должен идти через микроблайз, с протоколом на УАРТе
П.С. Уверены что в коммерцианализированной помощи не нуждаетесь?
vitali36
Sep 21 2013, 13:47
Да вот это вот доделаем и третьего однозначно будем искать. Я 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.
Так?
Sergey_Bekrenyov
Sep 21 2013, 19:02
Ребята, может Вы в личку перейдете? Кроме Вас тут никого нет ...
Вряд ли кому-нибудь это окажется полезным.
Golikov A.
Sep 21 2013, 19:07
не не так

...
Цитата
т.е при обходе 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)

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

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

Написал в личку. Сергей, почему зеленых он запутает окончательно? Он нормально разъясняет вроде как)
Вам шашечки или ехать? Иными словами Вам задачу надо решить или что?
Если это Ваш первый проект, то Вам в первую очеедь надо научится отлаживать, локализовать ошибки и исправлять их. Вы же неработающий проект начинаете усложнять, причем вещами, которые на порядок больше и сложнее, чем то, что уже есть в проекте.
Микроблэйз палка о двух концах. Я несколько лет назад после тренингов Ксайлинкс именно по встраиваемым системам отлаживал свой проект долго и с плясками с бубном.
Golikov A.
Sep 21 2013, 21:43
Он ДДР хотел прикрутить в начале, оттуда микроблайз и образовался, ведь согласитесь ДДР без него трудно в проект воткнуть, чтобы удобно было...
Sergey_Bekrenyov
Sep 21 2013, 21:54
Цитата(Golikov A. @ Sep 22 2013, 01:43)

Он ДДР хотел прикрутить в начале, оттуда микроблайз и образовался, ведь согласитесь ДДР без него трудно в проект воткнуть, чтобы удобно было...
MIG чем не устраивает? Один канал на запись, один на чтение
Golikov A.
Sep 22 2013, 06:56
в начале казалось что это сложнее, плюс данные - настройки по уарту должны были ходить.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.