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

 
 
> 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  « < 2 3 4 5 >  
Start new topic
Ответов (45 - 59)
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

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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 02:38
Рейтинг@Mail.ru


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