Jump to content
    

Microblaze+DDR2+UART

Частота дискретизации 3мегасемпла. Частота сигнала не помню какую точно задавал ( около 1кГц )
- значит на форме где-то 1/100 периода ? И еще, если АЦП 8-битное (это 24000000бит/сек) , а com-port настроен на 9600 бит/сек, то как происходит передача данных на ПК :принял семпл-передал, остальные пропустил или принял несколько семплов-отослал, потом опять часть принял-отослал)? в первом случае частота семплирования намного меньше, чем ожидается, а во втором должны выходить куски сигнала, не связанные с собой

Share this post


Link to post
Share on other sites

Ацп 14-ти разрядный. Данные я разделяю. Сначала 8, потом 6 дополненные двумя нулями. А в самой программе на c# данные скидываю в массив, но т.к ацп 14 разрдядный я просто делаю конкатенацию 0 элемент с 1, 2 c 3 и т.д. Скорость 921600. Вы мне скажите график не похож что ли?

Golikov.A. Да, частота определяется самим ацп. Писалось по даташиту все - там прежде чем ацп запустить нужно предусилитель настроить. По поводу временной метки, не очень понял. Вообще я сейчас хочу все это доделать с памятью, вывести график и посмотреть как что) . Только вот не пойму все входы с ацп ли нужно к microblaze подключать. rst, clk и выход с ацп я подключил, ругается потом xps на spi_adc. Вообще хочу спасибо всем сказать что помогаете мне - тратите свое личное время

Edited by vitali36

Share this post


Link to post
Share on other sites

Ацп 14-ти разрядный. Данные я разделяю. Сначала 8, потом 6 дополненные двумя нулями. А в самой программе на c# данные скидываю в массив, но т.к ацп 14 разрдядный я просто делаю конкатенацию 0 элемент с 1, 2 c 3 и т.д. Скорость 921600. Вы мне скажите график не похож что ли?

Golikov.A. Да, частота определяется самим ацп. Писалось по даташиту все - там прежде чем ацп запустить нужно предусилитель настроить. По поводу временной метки, не очень понял. Вообще я сейчас хочу все это доделать с памятью, вывести график и посмотреть как что) . Только вот не пойму все входы с ацп ли нужно к microblaze подключать. rst, clk и выход с ацп я подключил, ругается потом xps на spi_adc. Вообще хочу спасибо всем сказать что помогаете мне - тратите свое личное время

 

Прицепите Чипскоп и он выведет Вам график. Вы пытаетесь настроить кучу модулей одновременно.

Share this post


Link to post
Share on other sites

Мне не график нужно вывести в данный момент. Я добавляю ацп ( vhdl модуль к микроблейз) . Вернее уже добавил, теперь хочу связать входы-выходы. clk, rst от ацп привязал к Bus2IP_CLK, Bus2IP_Reset, а выход ацп с данными к IP2RFIFO_Data. но ругается xps потом на вход spi_adc. С чем его связать нужно?

 

Share this post


Link to post
Share on other sites

Опишите для ясности чем Вы владеете

- какое ацп

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

 

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

 

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

 

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

 

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

 

1 АДЦ_код

2 АДЦ код

....

 

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

 

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

 

 

Share this post


Link to post
Share on other sites

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

rx_tx_amp_adc_v3.rar

Share this post


Link to post
Share on other sites

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

 

замените данные АЦП на счетчик - проверите стык uart и Ваш софт. И начните с 8 бит

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

 

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

 

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

 

Дальше делаете так

микроблайз + уарт

дальше добавляете стандартную IPcore fifo

 

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

 

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

 

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

 

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

 

 

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

 

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

 

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

 

Share this post


Link to post
Share on other sites

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

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

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

Модуль сбора данных с ацп есть. Выдать данные на параллельную шину - это можно организовать.

Дальше делаете так

микроблайз + уарт

Микроблайз с uart есть. Сделал проект а xps. Там же ddr2 у меня(при создании проекта указывал).

дальше добавляете стандартную IPcore fifo
Это каким образом добавить и где его взять?

 

Share this post


Link to post
Share on other sites

Т.е вместо 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, таймеры, порты ввода-вывода и куча куча куча всего

Share this post


Link to post
Share on other sites

Ладно, буду делать все по порядку, как ты сказал. Сгенерил проект в xps, открыл в ise, при добавлении fifo в ip core можно выбрать fifo generator v. 8.5 или 9.1. Но рядом колонки Axi4, axi4-stream, axi4 - lite. Мне не plb случаем нужно?

Share this post


Link to post
Share on other sites

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

Но для использования в вашем модуле внутри ISE надо натив фифо, оно вообще не на шину, у него параллельный выход - выход, клок, и строб разрешения чтения и записи...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...