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

 
 
> LVDS DDR данные из АЦП в ПЛИС
Ar-han
сообщение Jun 30 2014, 18:43
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 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;



Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
VladimirB
сообщение Jun 30 2014, 19:54
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 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 констреинты есть какие-нибудь?
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 30 2014, 20:39
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(VladimirB @ Jun 30 2014, 22:54) *
Дифференциальные буферы не поленились вставить в ввиде примитивов - вот и IDDR нужно также.

Вот тут, похоже, правда, а то из Вашего процесса какая-то ерунда должна синтезироваться, а не DDR-буфер.
Go to the top of the page
 
+Quote Post
druzhin
сообщение Jul 4 2014, 18:42
Сообщение #4


druzhin
***

Группа: Свой
Сообщений: 286
Регистрация: 18-06-04
Из: Москва
Пользователь №: 58



У меня есть рабочие проекты на Spartan-6 по приёму данных с АЦП LTC2157.

Есть даже в двух экземплярах - и на SERDES, и на IDDR.
Go to the top of the page
 
+Quote Post
Ar-han
сообщение Jul 4 2014, 22:35
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 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, то сигнал приходил
без искажений.

Я пока только учусь, хочу попробовать как не правильно делать и как правильно.
Всем большое спасибо за поддержку.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jul 5 2014, 06:58
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Ar-han @ Jul 5 2014, 01:35) *
Откуда тогда дискуссия про GPIO и вычитку с его помощью данных sm.gif Так и нужно - память как бы внешняя получается.

В Вашем варианте реализации, на мой взгляд, более сложным является то, что есть флаг заполнения и флаг разрешения на запись (хотя это тоже имеет место быть). Т.е. у вас чтение и запись зависимы друг от друга, в варианте с двумя буферами памяти, которые переключаются поочереди чтение и запись независимы. Записывающая и вычитывающая стороны работают самостоятельно никак не оказывая влияния друг на друга.
Go to the top of the page
 
+Quote Post
Ar-han
сообщение Jul 7 2014, 14:32
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 12-09-11
Пользователь №: 67 135



Цитата(doom13 @ Jul 5 2014, 10:58) *
Откуда тогда дискуссия про GPIO и вычитку с его помощью данных sm.gif Так и нужно - память как бы внешняя получается.


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
Go to the top of the page
 
+Quote Post
Ar-han
сообщение Jul 8 2014, 07:07
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 12-09-11
Пользователь №: 67 135



Цитата(Ar-han @ Jul 7 2014, 18:32) *
синус на входе


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

На входе синус, 2 МГц.
Прикрепленное изображение
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 06:13
Рейтинг@Mail.ru


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