|
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;
|
|
|
|
|
 |
Ответов
|
Jun 30 2014, 19:54
|
Знающий
   
Группа: Свой
Сообщений: 614
Регистрация: 12-06-09
Из: рядом с Москвой
Пользователь №: 50 219

|
Цитата(Ar-han @ Jun 30 2014, 22:43)  Что не так делаю? Почему вместо синуса вижу корявый меандр? Не реагирует на изменение амплитуды сигнала. С какой стороны младшие биты? (c D0 или с D6) Тактирую ПЛИС по CLK_OUT от АЦП
АЦП ADS6145... ПЛИС и инструментарий не указан - ХЗ чем вы там синтезите, но по своему опыту скажу: с такими аппаратными фичами Xilinx как DDR, SERDES, PLL, IODELAY и др. лучше ИМХО обращаться путём наглого вставления примитивов в HDL, иначе ISE будет тупить очень сильно (он конечно тупит и с примитивами - но значительно меньше). Дифференциальные буферы не поленились вставить в ввиде примитивов - вот и IDDR нужно также. Там у IDDR, есть помниться несколько режимов работы, задающихся генериками. А что вам тут ваш синтезатор сделал из вашего кода ХЗ? И вставил ли он вообще IDDR? И если вставил, то с какими настройками? И ещё режет глаз: generic( DIFF_TERM : boolean := FALSE); это так и задумано? место на плате много и снаружи не поленились резюки по 100Ом запаять? P.S. и ещё не ясно, что с клоком из АЦП - на какой тип ноги он заведен (GCLK, MRCC, SRCC или CLOCK_DEDICATED_ROUTE = false) ? P.S.2 констреинты есть какие-нибудь?
|
|
|
|
|
Jul 4 2014, 22:35
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 12-09-11
Пользователь №: 67 135

|
Цитата(druzhin @ Jul 4 2014, 22:42)  У меня есть рабочие проекты на Spartan-6 по приёму данных с АЦП LTC2157. Было бы интересно взглянуть, хотя может сначала стоит своих шишек набить. А то у меня сегодня микроблейз на внешние прерывания напрочь отказывался реагировать. Бывает, застряну на какой-то мелочи и сижу по пол дня. Цитата(doom13 @ Jul 4 2014, 20:37)  Да, и расскажите, как Вы считываете свои данные с памяти, а то что-то дружно тут много всего наговорили. В моём варианте двухпортовая память в один порт ацп пишет по два значения (14бит) в один регистр (32бит), а вторым портом она на PLB шине (пока что микроблейза): #define XPAR_XPS_SHARED_BRAM_IF_CNTLR_BASEADDR 0xA0000000 Указатель на эту память: #define pData ((char*)0xA0000000) копирую: memcpy(pbuf_to_be_sent->payload,pData,STR_SIZE); отправляю: err = udp_send(pcb, pbuf_to_be_sent); Хочу научиться понимать и работать со всеми вариантами обмена данными, но пока иду от простого к сложному. Не пинайте сильно, не всегда с новыми понятиями легко разобраться, такими как DMA. Периодически, даю команду читать ацп и писать в память до заполнения, складывая два значения в один регистр. Дергаю ногу прерывания микроблейза флагом, что память заполнена, по этому прерыванию пытаюсь читать данные и отправлять пакет. Пока что заткнулся на прерывании микроблейза. Упорно не хочет работать, хотя раньше с ним проблем не было. (Может я импульс короткий даю на прерывание? он порядка 100 ns) До этого, писал в эту память 4 мкс сигнала, ждал 200 ms и снова писал, а проц выгребал оттуда 10 раз в секунду данные со своей, уж не знаю какой скоростью, и посылал пакеты. В таком варианте сигнал приходил порезанный на несколько кусков в разных фазах. При этом, если снизить частоту тактирования АЦП раз в 10, то сигнал приходил без искажений. Я пока только учусь, хочу попробовать как не правильно делать и как правильно. Всем большое спасибо за поддержку.
|
|
|
|
|
Jul 7 2014, 14:32
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 12-09-11
Пользователь №: 67 135

|
Цитата(doom13 @ Jul 5 2014, 10:58)  Откуда тогда дискуссия про GPIO и вычитку с его помощью данных  Так и нужно - память как бы внешняя получается. 64-битная шина GPIO была в самом начале, от неё перешёл на двухпортовую BRAM, повешанную на PLB шину. Как мне лучше флаг заполнения памяти передать процессору? Сейчас его завожу на ногу внешнего прерывания. А как правильно? Тоже через корку какую делать обмен флагами? Разделил по времени запись и чтение в двухпортовую память. Теперь сигнал не режется на куски, но какие-то ошибки возникают, снова запутался, порядок ног уже 5 раз проверил. Пила на входе вместо диф. приемников рисуется правильно. синус на входе
без сигнала с замкнутым входом
Может быть какие-то временные ограничения нужно указать сигналу, по которому защелкиваю данные в диф. приемниках? Защелкиваю данные по сигналу clk_out с АЦП. Может нужно подвигать фазу защелкивания DCM блоком, или указать допустимый джиттер на этот сигнал (USER_CLK) ? У меня сейчас так: Код IBUFGDS_1 : IBUFGDS port map (I=>SMA_DIFF_CLK_IN_P, IB=>SMA_DIFF_CLK_IN_N, O=>USER_CLK);
IBUFDS_6 : IBUFDS port map (I=>HDR2_64_SM_9_P, IB=>HDR2_62_SM_9_N, O=>DDR_6); IDDR_6 : IDDR port map (C=>USER_CLK, CE=>VPP, D=>DDR_6, R=>GRND, S=>GRND, Q1=>out12, Q2=>out13); ...
Сообщение отредактировал Ar-han - Jul 7 2014, 14:40
|
|
|
|
|
Jul 8 2014, 07:07
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 12-09-11
Пользователь №: 67 135

|
Цитата(Ar-han @ Jul 7 2014, 18:32)  синус на входе Ура, всё заработало! Нашел еще одну дурацкую ошибку, пихал данные в память по совершенно другой частоте, не по той, на которой они защелкивались в диф. приемниках. На входе синус, 2 МГц.
|
|
|
|
Сообщений в этой теме
Ar-han LVDS DDR данные из АЦП в ПЛИС Jun 30 2014, 18:43     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 Golikov A. ЦитатаПозвольте спросить, Вы работали с АЦП с похо... Jul 1 2014, 16:22 doom13 Цитата(Golikov A. @ Jul 1 2014, 19:22) Ну... Jul 1 2014, 20:26  Ar-han Цитата(doom13 @ Jul 2 2014, 00:26) Но, во... Jul 2 2014, 07:37   doom13 Цитата(Ar-han @ Jul 2 2014, 10:37) П... Jul 2 2014, 09:44   doom13 Цитата(Ar-han @ Jul 2 2014, 10:37) И... Jul 2 2014, 10:28    Ar-han Цитата(doom13 @ Jul 2 2014, 14:28) Судя п... Jul 2 2014, 12:39     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, 15:39) Я... Jul 2 2014, 15:55      Ar-han Цитата(doom13 @ Jul 2 2014, 19:55) Чтение... Jul 2 2014, 18:52       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
|
|
|