|
LVDS DDR данные из АЦП в ПЛИС |
|
|
|
Jun 30 2014, 18:43
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 12-09-11
Пользователь №: 67 135

|
Что не так делаю? Почему вместо синуса вижу корявый меандр? Не реагирует на изменение амплитуды сигнала. С какой стороны младшие биты? (c D0 или с D6) Тактирую ПЛИС по CLK_OUT от АЦП АЦП ADS6145 http://www.ti.com/lit/ds/symlink/ads6145.pdfСпасибо. Код component IBUFGDS -- -- synopsys translate_off generic( DIFF_TERM : boolean := FALSE); -- -- synopsys translate_on port ( I : in std_logic; IB : in std_logic; O : out std_logic); end component; attribute IOSTANDARD of IBUFGDS : component is "DEFAULT"; attribute DIFF_TERM of IBUFGDS : component is "FALSE"; attribute BOX_TYPE of IBUFGDS : component is "BLACK_BOX"; component IBUFDS -- synopsys translate_off generic( DIFF_TERM : boolean := FALSE); -- synopsys translate_on port ( I : in std_logic; IB : in std_logic; O : out std_logic); end component; attribute IOSTANDARD of IBUFDS : component is "DEFAULT"; attribute DIFF_TERM of IBUFDS : component is "FALSE"; attribute BOX_TYPE of IBUFDS : component is "BLACK_BOX";
begin
data_out <= out13 & out12 & out11 & out10 & out9 & out8 & out7 & out6 & out5 & out4 & out3 & out2 & out1 & out0 ;
clk_out <= USER_CLK;
IBUFGDS_1 : IBUFGDS port map (I=>SMA_DIFF_CLK_IN_P, IB=>SMA_DIFF_CLK_IN_N, O=>USER_CLK);
IBUFDS_1 : IBUFDS port map (I=>HDR2_28_SM_11_P, IB=>HDR2_26_SM_11_N, O=>DDR_1); IBUFDS_2 : IBUFDS port map (I=>HDR2_32_DIFF_3_P, IB=>HDR2_30_DIFF_3_N, O=>DDR_2); ....
process(USER_CLK) begin
if (USER_CLK = '1') then out0 <= DDR_0; out2 <= DDR_1; out4 <= DDR_2; out6 <= DDR_3; out8 <= DDR_4; out10<= DDR_5; out12<= DDR_6;
elsif (USER_CLK = '0') then out1 <= DDR_0; out3 <= DDR_1; out5 <= DDR_2; out7 <= DDR_3; out9 <= DDR_4; out11 <= DDR_5; out13 <= DDR_6;
end if;
end process;
|
|
|
|
|
 |
Ответов
|
Jul 1 2014, 20:26
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(Golikov A. @ Jul 1 2014, 19:22)  Ну я так категорично по виду данных не смог определить ошибку, как вы... но от интерфейса АЦП та ошибка про которую я говорю не зависит, это чисто конструктивные ограничения... но я не настаиваю, просто как версия, которую можно проверить... Это определено не категорично по виду данных, просто есть опыт работы с подобными АЦП (ADS6445, ADS5263), отличие только в том, что в моём случае у одной 8-бит последовательно передаются по 1-ой линии, у другой - 4 бита, у данного экземпляра 2 бита на одной линии. Я так же не настаиваю, просто из возможных ошибок наиболее вероятна та, которую озвучил. Нормально настраивать АЦП без SPI - никак. Но, возможно, это у Вас отладочная плата от TI? Если так тогда там должны быть джамперы, которые и задают режим работы АЦП (PARALLEL INTERFACE CONTROL), смотрите даташит. Тогда Вы можете попробовать Цитата(Timmy @ Jul 1 2014, 19:08)  перевести АЦП в режим SDR CMOS - так захватывать данные будет гораздо проще. , но интерфейс DDR LVDS более помехоустойчив. Цитата(Ar-han @ Jul 1 2014, 20:53)  Есть еще вопрос по теме. Собираю пакет данных и кидаю в двупортовую брам. А со стороны процессора PPC передаю указатель эту на область памяти функции, которая отсылает udp пакеты через lwip. Весь поток данных мне не нужен, только пакеты заданной длины по синхроимпульсу. А какой пакет планируется и с какой частотой идут синхроимпульсы? Цитата(Ar-han @ Jul 1 2014, 20:53)  Каким размером лучше разбить эту память по UDP пакетам? Пока что тренировался с 1 кБайтом, проблем не было, всё влезает в один UDP пакет. В UDP пакет влезает почти 64 кБ (нужно только размер шапки отнять) - это максимальная длинна пакета, которую можете посылать. LwIP поддерживает фрагментацию на уровне IP, создаёте буфер необходимой длинны, при отправке UDP указываете длинну данных, LwIP сама определит, за сколько фрагментов послать Ваш пакет. Цитата(Ar-han @ Jul 1 2014, 20:53)  Может лучше на tcp/ip перейти? Для отправки данных АЦП UDP будет вполне достаточно, всегда используем в этих целях именно UDP. Цитата(Ar-han @ Jul 1 2014, 17:39)  До SPI еще не добрался, и с моими темпами, похоже, не скоро )) LwIP прикрутили, а SPI - нет?
|
|
|
|
|
Jul 2 2014, 07:37
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 12-09-11
Пользователь №: 67 135

|
Цитата(doom13 @ Jul 2 2014, 00:26)  Но, возможно, это у Вас отладочная плата от TI? Если так тогда там должны быть джамперы, которые и задают режим работы АЦП (PARALLEL INTERFACE CONTROL), смотрите даташит. Плату сам рисовал, переключение в параллельную шину кмоп есть, еще не пробовал.
Цитата А какой пакет планируется и с какой частотой идут синхроимпульсы? Буду добиваться максимально возможной частоты синхроимпульсов, хотелось бы чтобы 20-40 МБайт в секунду через UDP пролезало, но пока мучаю 100 Мбит канал. Цитата LwIP поддерживает фрагментацию на уровне IP Очень интересно, спасибо. С LWIP поверхностно пока что разобрался, переделал программу из эхо-демо, подозреваю, что там много лишнего, например, не понимаю, почему без этой строчки программа не работает: Код xemacif_input(netif); Тут тоже не совсем пока ясно, с выделением памяти, что к чему Код PBUF_RAW или PBUF_TRANSPORT PBUF_RAM или PBUF_POOL остановился на этом: pbuf_to_be_sent = pbuf_alloc( PBUF_RAW, STR_SIZE, PBUF_RAM); Цитата LwIP прикрутили, а SPI - нет?  C spi конечно возился, общался spi-ацп/цап на спартане, но это было давно и как-то я там всё через одно место реализовал, что и вспоминать стыдно, сколько это времени заняло ) Исправил пины диф. шины, картинка уже проясняется.
|
|
|
|
|
Jul 2 2014, 10:28
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(Ar-han @ Jul 2 2014, 10:37)  Исправил пины диф. шины, картинка уже проясняется. Судя по картинке, АЦП выдаёт данные в формате 2s complement format (т.е. знаковый). На график же данные выводятся как беззнаковые, вот и получается - положительные числа отображаются правильно, отрицательные - НЕТ. Либо поменяйте джампер (возможность такая, как понял, есть), чтоб АЦП выдавало данные в формате Straight binary (беззнаковом), либо правильно отображайте на графике. Но проблема с битами, смотрю, осталась, всё же попутаны они у Вас. Переводите АЦП, как и советовали, в режим SDR CMOS и всё будет гуд.
|
|
|
|
|
Jul 2 2014, 12:39
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 12-09-11
Пользователь №: 67 135

|
Цитата(doom13 @ Jul 2 2014, 14:28)  Судя по картинке, АЦП выдаёт данные в формате 2s complement format (т.е. знаковый). На график же данные выводятся как беззнаковые, вот и получается - положительные числа отображаются правильно, отрицательные - НЕТ. Да, я тоже так решил, искал как конвертировать дополнение до 2 в беззнаковые, и не придумал ничего лучше, как проинвертировать старший бит в данных. Сигнал стал похож на синус, джампер переставил в режим: Straight binary format and DDR LVDS interface И получил такую картинку.
Если джампер переставить в режим: 2s Complement format and DDR LVDS interface картинка такая же, но больше каких-то ошибок ????
Снова что-то я напутал, не пойму почему сигнал режется на 7 кусков в разной фазе. Причём если подобрать частоту сигнала, можно получить целый синус без разрезов. Я в двухпортовую память с ацп записываю кусок 512 точек, каждые 8 ns, получается 4 mks сигнала. Дальше у меня пауза 200 ms, и всё повторяется. Вторым портом память сидит на PLB шине, и процессору передаю указатель на эту память, примерно 10 раз в секунду, и отправляю пакеты на комп. Для режима 2s Complement format and DDR LVDS interface джампер нужно на землю замкнуть, с этим проблем нет. А для режима Straight binary format and DDR LVDS interface джампер нужно замкнуть на (3/8 VDD) = 1.24 В А я замыкаю на (1/3 VDD) = 1.1 В Интересно, это может влиять на ошибки, которые выглядят как помехи? Цитата(Ar-han @ Jul 2 2014, 16:04)  И получил такую картинку. Снова нашел ошибку в порядке пинов. Младшая диф. пара была перепутана со старшей. ))
|
|
|
|
|
Jul 2 2014, 15:55
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(Ar-han @ Jul 2 2014, 15:39)  Я в двухпортовую память с ацп записываю кусок 512 точек, каждые 8 ns, получается 4 mks сигнала. Дальше у меня пауза 200 ms, и всё повторяется. Вторым портом память сидит на PLB шине, и процессору передаю указатель на эту память, примерно 10 раз в секунду, и отправляю пакеты на комп. Чтение и запись у Вас по времени не совпадают? Обычно делаю двухбуферную память в таких случаях, когда один буфер пишется - второй читается, потом наоборот. Цитата(Ar-han @ Jul 2 2014, 15:39)  Для режима 2s Complement format and DDR LVDS interface джампер нужно на землю замкнуть, с этим проблем нет.
А для режима Straight binary format and DDR LVDS interface джампер нужно замкнуть на (3/8 VDD) = 1.24 В А я замыкаю на (1/3 VDD) = 1.1 В Интересно, это может влиять на ошибки, которые выглядят как помехи? Используйте то, что должно на 100% работать правильно, выбирайте 2s Complement format, а далее учитывайте это при отрисовке графика.
|
|
|
|
|
Jul 2 2014, 18:52
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 12-09-11
Пользователь №: 67 135

|
Цитата(doom13 @ Jul 2 2014, 19:55)  Чтение и запись у Вас по времени не совпадают? Обычно делаю двухбуферную память в таких случаях, когда один буфер пишется - второй читается, потом наоборот. Да, процессор на своей частоте работает, флагов заполнения памяти пока никаких не успел реализовать. Поэтому сделал большую паузу между циклами записи в эту память. Спасибо за идею, то есть нужно две области памяти и два флага заполнения, беру на вооружение. А как лучше флаги процессору передавать? Не через GPIO же ведь? Так же какой-нибудь регистр этой двухпортовой памяти можно использовать под флаги? Подсунул снова на вход пилу вместо диф приемников, но теперь уже амплитуду в 14 бит, вместо 8-и, и вижу, не правильно данные в память пишутся, упаковываются в регисты... Буду искать баги... )
|
|
|
|
Сообщений в этой теме
Ar-han LVDS DDR данные из АЦП в ПЛИС Jun 30 2014, 18:43 VladimirB Цитата(Ar-han @ Jun 30 2014, 22:43) ... Jun 30 2014, 19:54 doom13 Цитата(VladimirB @ Jun 30 2014, 22:54) Ди... Jun 30 2014, 20:39  druzhin У меня есть рабочие проекты на Spartan-6 по приёму... Jul 4 2014, 18:42   Ar-han Цитата(druzhin @ Jul 4 2014, 22:42) У мен... Jul 4 2014, 22:35    doom13 Цитата(Ar-han @ Jul 5 2014, 01:35) О... Jul 5 2014, 06:58     Ar-han Цитата(doom13 @ Jul 5 2014, 10:58) Откуда... Jul 7 2014, 14:32      Ar-han Цитата(Ar-han @ Jul 7 2014, 18:32) с... Jul 8 2014, 07:07     Ar-han Цитата(doom13 @ Jul 5 2014, 10:58) в вари... Jul 9 2014, 05:45      doom13 Цитата(Ar-han @ Jul 9 2014, 08:45) П... Jul 9 2014, 06:38      doom13 Цитата(Ar-han @ Jul 9 2014, 08:45) Н... Jul 9 2014, 07:11      doom13 Цитата(Ar-han @ Jul 9 2014, 08:45) Т... Jul 9 2014, 07:52 Ar-han Цитата(VladimirB @ Jun 30 2014, 23:54) ПЛ... Jul 1 2014, 05:30  doom13 Цитата(Ar-han @ Jul 1 2014, 08:30) П... Jul 1 2014, 06:32  Ar-han Цитата(Ar-han @ Jul 1 2014, 09:30) X... Jul 1 2014, 10:00 Ar-han Цитата(Ar-han @ Jun 30 2014, 22:43) ... Jul 1 2014, 13:08 doom13 Долго же Вы понимали Jul 1 2014, 13:20  Ar-han Цитата(doom13 @ Jul 1 2014, 17:20) Долго ... Jul 1 2014, 13:59   doom13 Цитата(Ar-han @ Jul 1 2014, 16:59) И... Jul 1 2014, 14:11    Ar-han Цитата(doom13 @ Jul 1 2014, 18:11) Биты у... Jul 1 2014, 14:19 iosifk Цитата(Ar-han @ Jun 30 2014, 22:43) ... Jul 1 2014, 14:21 Ar-han Цитата(iosifk @ Jul 1 2014, 18:21) А симу... Jul 1 2014, 14:26 doom13 Могу предложить, но для этого Вам понадобиться нал... Jul 1 2014, 14:35 Ar-han Цитата(doom13 @ Jul 1 2014, 18:31) Могу п... Jul 1 2014, 14:39  doom13 Цитата(Ar-han @ Jul 1 2014, 17:39) Ж... Jul 1 2014, 14:53   Ar-han Цитата(doom13 @ Jul 1 2014, 18:53) Баг в ... Jul 1 2014, 17:53  Timmy А я посоветую сначала запустить SPI и перевести АЦ... Jul 1 2014, 16:08 Golikov A. А у вас не с АЦП проблемы? В ветке армов обсуждало... Jul 1 2014, 14:47   doom13 Цитата(Ar-han @ Jul 2 2014, 10:37) П... Jul 2 2014, 09:44     doom13 Цитата(Ar-han @ Jul 2 2014, 15:39) Д... Jul 2 2014, 12:50      Ar-han Цитата(doom13 @ Jul 2 2014, 16:50) Если х... Jul 3 2014, 04:43       doom13 Цитата(Ar-han @ Jul 2 2014, 21:52) С... Jul 2 2014, 20:11  Timmy Цитата(doom13 @ Jul 2 2014, 00:26) но инт... Jul 2 2014, 10:14 Golikov A. дополнительный код - старший бит определяет знак. ... Jul 3 2014, 06:46 doom13 Цитата(Golikov A. @ Jul 3 2014, 09:46)
М... Jul 3 2014, 07:58 Ar-han Цитата(Golikov A. @ Jul 3 2014, 10:46) до... Jul 3 2014, 19:57 Golikov A. ЦитатаЭто, насколько я понимаю преобразование в пр... Jul 4 2014, 05:47 doom13 Цитата(Golikov A. @ Jul 4 2014, 08:47) Гл... Jul 4 2014, 07:50 Ar-han Цитата(Golikov A. @ Jul 4 2014, 09:47) не... Jul 4 2014, 09:19 Golikov A. Цитатано если использовать прерывание от GPIO, как... Jul 4 2014, 08:18 doom13 Цитата(Golikov A. @ Jul 4 2014, 11:18) Сн... Jul 4 2014, 16:37 Golikov A. а ну да... это я действительно тупанул. Инверсия с... Jul 4 2014, 10:39 Ar-han Цитата(Golikov A. @ Jul 4 2014, 14:39) Вы... Jul 4 2014, 11:32 Golikov A. ЦитатаПриведите пример подразумеваемого процессора... Jul 4 2014, 16:45 doom13 Цитата(Golikov A. @ Jul 4 2014, 19:45) LP... Jul 4 2014, 17:34 Golikov A. ЦитатаТут Вы не разобрались в предложенном вариант... Jul 4 2014, 18:33 doom13 Цитата(Golikov A. @ Jul 4 2014, 21:33) Я ... Jul 4 2014, 19:35 doom13 А что там с режимом SDR CMOS, можете джампер переб... Jul 7 2014, 20:09 Golikov A. ЦитатаПодвигать фазу PLL скорее всего не получится... Jul 7 2014, 20:22 doom13 Цитата(Golikov A. @ Jul 7 2014, 23:22) Ну... Jul 7 2014, 21:29 Golikov A. Перейдите уже на FIFO в конце концов...
Брать 2 ... Jul 9 2014, 07:03 Golikov A. ЦитатаУ меня есть пример констрейна для входного с... Jul 9 2014, 07:17 Golikov A. У меня нет времени и желания разбираться в предлож... Jul 9 2014, 09:05 doom13 Цитата(Golikov A. @ Jul 9 2014, 12:05) У ... Jul 9 2014, 10:01 Golikov A. FIFO
1. Размер отправляемого пакета - любой задает... Jul 9 2014, 10:15 doom13 Цитата(Golikov A. @ Jul 9 2014, 13:15) Не... Jul 9 2014, 10:52 doom13 Цитата(Golikov A. @ Jul 9 2014, 13:15) FI... Jul 9 2014, 11:55
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|