Jump to content

    

Aleksei_Rostov

Свой
  • Content Count

    312
  • Joined

  • Last visited

Posts posted by Aleksei_Rostov


  1. Что на вход каждого фильтра, что на выход, можно загонять сигнал любой разрядности. Как ее выбирать? исходя из чего? Динамический диапазон вроде обеспечил требуемый, а вот с избирательностью по соседнему каналу никак не получается. Получаемые значения очень сильно зависят от разрядности. Как ее грамотно выбрать? При учете того, что с АЦП идет 14 бит и на выходе FIR фильтра нужна конкретная разрядность 24 бита. Заранее спасибо.

    Разрядность сигнала на вход я выбирал исходя из разрядности АЦП, отбросив шумящие младшие разряды. В моём случае из 14 я брал только 8. Коэффициенты фильтра рассчитал в матлабе и далее округлил до целого значения в 16ти или 32 разрядной сетке. На выходе округлил значения до требуемой разрядности. Все действия проверял матлабом.

     

  2. Здравствуйте.

    Создаю ila core для отладки проекта.

    Добавляют сигналы, выбираю клок, но найти кнопку implement debug core, по аналогии с plan ahead не могу.

    Работаю в vivado 2014.3.

    Либо это глюк среды, либо изменилась идеология создания ядер для отладки chipscope

     

     

    Разобрался. Отладка изменилась по сравнению с PA

  3. День добрый farbius! Пытаетесь в моульсиме или на реальной железке? Только сегодня просматривал софт ядро. скоро должна железка прийти там буду пробовать! есть опыт LVDS на Циклоне 5. там работает все на ура.

    Благодарю что откликнулись. Работаю в модел симе. Поставил 15 квартус. От моделировать так и не смог. Причем для циклона lvds_tx моделируется без проблем!

    Вообщем если получится дайте пжл знать!

    Пока собираюсь писать для max 10 сериализатор самостоятельно

  4. Т.е 1. Я помещаю эти буферы в схему.

    2. И в top level их надо как то описывать?

    В info про эти буферы сказано, они LCMOS 1.8. Или это не имеет значения?

     

    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use ieee.std_logic_unsigned.all;
    
    library UNISIM;
    use UNISIM.VComponents.all;
    
    entity top is
    port(clk  : in std_logic; 
         rst  : in std_logic;
    -- data_in : in std_logic_vector(7 downto 0);
       sync_p : out STD_LOGIC;
       sync_n : out STD_LOGIC;
        
       adcdata_p : in STD_LOGIC_VECTOR (13 downto 0);
       adcdata_n : in STD_LOGIC_VECTOR (13 downto 0);
       
       dacA_p : out std_logic_vector(13 downto 0);
       dacA_n : out std_logic_vector(13 downto 0));
    end top;
    
    ARCHITECTURE beh OF top IS
    
    component convert2diffpairs 
        Port ( 
               diff_p : out STD_LOGIC_VECTOR (13 downto 0);
               diff_n : out STD_LOGIC_VECTOR (13 downto 0);
               data_in : in STD_LOGIC_VECTOR (13 downto 0));
    end component;
    
    begin
    
    ------------------------------------------------------------------------------------------------------------------------------
        i5 : IBUFDS generic map ( DIFF_TERM => FALSE, IBUF_LOW_PWR => TRUE, IOSTANDARD => "DEFAULT") port map (data_in(0), adcdata_p(0), adcdata_n(0));
        i6 : IBUFDS generic map ( DIFF_TERM => FALSE, IBUF_LOW_PWR => TRUE, IOSTANDARD => "DEFAULT") port map (data_in(1), adcdata_p(1), adcdata_n(1));
        i7 : IBUFDS generic map ( DIFF_TERM => FALSE, IBUF_LOW_PWR => TRUE, IOSTANDARD => "DEFAULT") port map (data_in(2), adcdata_p(2), adcdata_n(2));
        i8 : IBUFDS generic map ( DIFF_TERM => FALSE, IBUF_LOW_PWR => TRUE, IOSTANDARD => "DEFAULT") port map (data_in(3), adcdata_p(3), adcdata_n(3));
    
         i41: convert2diffpairs port map(dacA_p, dacA_n, pr(22 downto 9));
    -----------------------------------------------------------------------------------------------------------------------------
    
    end;

  5. У меня сейчас схема такая. На CIC заводится тактовая 100 МГц. Так же, эти 100 МГц заводятся в делитель и делятся до 500 кГц. И эти 500 кГц тактируют FIR. Такое будет работать?

    Работать наверное будет, пробуйте моделировать.

    Делитель лучше не использовать, а поставить pll модуль.

    Посмотрите на входы типа enable, или nd фильтра. Не помню как у altera в xilinx они есть. По этим сигналам загружают данные в фильтр. При этом такт может быть и 500 и 100мгц

  6. Добрый день. Помогите разобраться. Имеется два соединенных блока мегфункций Altera: CIC и FIR фильтры. CIC децимирует сигнал в несколько сотен раз, а FIR служит для децимации в 2 раза, а так же в качестве компенсационного фильтра. В общем-то это распространенная схема для грамотной децимации. Так вот, CIC фильтр тактируется от 100 МГц, на выходе - данные с частотой например 500 кГц. Эти данные поступают в FIR фильтр. Вопрос в том, чем тактировать FIR фильтр? Можно ли просто сделать делитель тактовой и заводить в FIR нужную частоту? Тогда как FIR фильтр будет понимать, в какой момент пришли данные от CIC? Ведь в CIC могут быть задержки. В описании к мегафункциям, не нашел, как можно вытянуть тактовую из CIC. Надеюсь, объяснил понятно, буду признателен за любую помощь.

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

    Если будете использовать 100МГц для 500кгц то на выходе фильтра будут отсчеты повторяться пока не придёт новый отсчёт входного сигнала.

  7. В разрабатываемом устройстве планируется использовать несколько

    пар LVDS как входов так и выходов

    Файл верхнего уровня сделан на основе схемы

    Каким образом мне организовывать LVDS сигналы? В виде описания или

    существуют стандартные LVDS буфферы (символьное представление)?

     

    electronix.ru/forum/index.php?showtopic=127684

    OBUFDS, IBUFDS

  8. Нужно прописать обе половины пары и в констрейнтах и в топлевеле. А в топлевеле нужно инстанциировать (i/o)bufds. И на сколько я знаю, по другому нельзя. И это логично. И очень удобно. Вроде в Альтере можно, но это тихий ужас.

    Спасибо, уже разобрался. Получаю диф пары с выходов obufg ,кот потом вывож у в топ модуль и на пины

  9. А где вторая половина пары описана в UCF? (_p и _n) Ну и правильно пишут Correct the I/O connectivity by instantiating a differential I/O buffer.

    То есть в ucf прописать dac_n и dac_p констрейны, а сигнал топ модуля оставить dac?

    Или single ended dac сигнал сигнал завести на obufgs и получить на выходе диф пары и в топ модуль выводить _n и _p?

     

    Неужели нет возможности в топ модуль вывести только single ended сигнал, а в ucf указать что это дифпары?

  10. Приветствую!

    Кто сталкивался, подскажите пжл. как правильно назначать пины для диф пар на ml605 board?

    В проекте сигнал DDS хочу вывести на FMC разъем. В plan ahead назначаю пины, называю их диф парами, в ucf

    NET "dac[0]" IOSTANDARD = LVDS_25;
    NET "dac[1]" IOSTANDARD = LVDS_25;
    NET "dac[2]" IOSTANDARD = LVDS_25;
    NET "dac[3]" IOSTANDARD = LVDS_25;
    NET "clk" IOSTANDARD = LVCMOS25;
    NET "clk" DRIVE = 12;
    NET "clk" SLEW = SLOW;
    NET "clk" LOC = J9;
    NET "dac[0]" LOC = T33;
    NET "dac[1]" LOC = U33;
    NET "dac[2]" LOC = V32;
    NET "dac[3]" LOC = U31;

    при сборке ошибка

     

    ERROR:Pack:2908 - The I/O component "dac<3>" has an illegal IOSTANDARD value.

    The IOB component is configured to use single-ended signaling and can not use

    differential IOSTANDARD value LVDS_25. Two ways to rectify this issue are:

    1) Change the IOSTANDARD value to a single-ended standard. 2) Correct the I/O

    connectivity by instantiating a differential I/O buffer.

     

    Как правильно развести выход DDS dac[3:0] на диф пары?

  11. Похожий пост с проблемой при использовании своего IP в Vivado создавал ранее.

     

    Кто нибудь пробовал использовать ядра, сгенерированные IP интегратором в Vivado?

     

    Сделал проект: Microblaze, bram, cdma, custom IP AXI4 slave.

    Программа в процессоре выполняет запись данных в custom IP AXI4 slave, затем трансфер данных с помощью CDMA в bram.

     

    Собрал проект для Spartan 6 (Nexus 3 board) в XPS 14.7.

    Проверяю данные через XMD консоль:

    1. вычитываю что записал процессором в custom IP AXI4 slave

    2. вычитываю что записал CDMA в bram.

     

    В XPS все работает отлично.

     

    Собираю точно такой же проект в Vivado 2014.3 только для платы с Artix 7.

    Настройки для микроблейза и остальных ядер аналогичны.

    Проверяю данные через XMD консоль:

    1. вычитываю что записал процессором в custom IP AXI4 slave

     

    в консоле получаю

     

    connect mb mdm
    
    MicroBlaze Processor Configuration :
    -------------------------------------
    Version............................9.4
    Optimization.......................Performance
    Interconnect.......................AXI-LE
    MMU Type...........................No_MMU
    No of PC Breakpoints...............1
    No of Read Addr/Data Watchpoints...0
    No of Write Addr/Data Watchpoints..0
    Instruction Cache Support..........off
    Data Cache Support.................off
    Exceptions  Support................off
    FPU  Support.......................off
    Hard Divider Support...............off
    Hard Multiplier Support............off
    Barrel Shifter Support.............off
    MSR clr/set Instruction Support....off
    Compare Instruction Support........off
    Data Cache Write-back Support......off
    Fault Tolerance Support............off
    Stack Protection Support...........off
    
    Connected to "mb" target. id = 0
    Starting GDB server for "mb" target (id = 0) at TCP port no 1240
    XMD% mrd 0x76000000 8
    ERROR: Cannot Read from target
    
    
        Processor is stalled at memory access.
    
    
    XMD%

     

    В чем может быть проблема?

    linker script в обоих проектах одинаковы

     

     

     

  12. Burst поддерживает только полная AXI-4. AXI-Lite соответственно не поддерживает.

     

    Ядро которое я создаю full AXI4.

    Опишу проблему более просто:

     

    Есть mblz, ddr3, bram, cdma.

    Пишу код для процессора

    static u32 *PtrSrcDma = CDMA_BASE + 0x18;
    static u32 *PtrDstDma = CDMA_BASE + 0x20;
    static u32 *PtrBttDma = CDMA_BASE + 0x28;
    
    #define BTT 128
    
    int main(void){
    
        u8 Buffer[BTT], k = 0;
        int i;
    
        for(i = 0; i < BTT; i++){
            k += 1;
            Buffer[i]=k;
        }
        *PtrSrcDma = (u8 *)Buffer;
        *PtrDstDma = BRAM_BASE;
        *PtrBttDma = BTT;
    
    
    
        return 0;
    }

     

    Data, code, stack&heap процессора мапирую в DDR3. Тогда Buffer заполняется в DDR, откуда пересылается в BRAM. После того как код выполнился, проверяю содержимое DDR3, BRAM, регистров CDMA с помощью XMD.

    Все работает отлично.

    Создаю и прикручиваю собственное AXI4 full slave IP. Запускаю все тоже самое.

    Процессор Unable to Stop. и сообщение

     

    An internal error occurred during: "Execute Debug Command".

    Unable to Stop Processor

    MicroBlaze Pipeline Stalled on a Blocking Instruction or Invalid Bus Access

    Stalled PC: 0x80000010

    Try Resetting the Processor to Continue..Processor is stalled at address 0x80000004. UNABLE to STOP MicroBlaze

    0x80000000 адрес DDR контроллера

    Data, code, stack&heap процессора мапирую в local memory bram. Процессор не виснет, но Buffer через CDMA в BRAM естественно я уже не вычитаю.

    В чем может быть загвоздка с custom IP?

     

     

     

     

  13. По умолчанию микроблайз может проинитить только БРАМ память.

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

     

    Это про старт после выключения питания.

     

    При старте через среду, перед "заливкой" программы надо заливать bootloop прошивку (в sdk генерится автоматом), а только потом стартовать основную программу... бутлуп тормозить работу проца до загрузки программы во внешнюю память, а без него будет то что вы видите, потому что выполняется мусор оттуда...

     

    В моем случае проблемы с загрузчиком нет (bootloop заливаю каждый раз). Вопросы возникают с добавлением собственного ядра.

     

    Например собрал простой проект: микроблейз, брам, дма, юарт.

     

    Проинициализировал массив в памяти процессора, далее отправил с помощью ДМА в БРАМ, считал с помощью ДМА обратно в процессор и вывел массив в консоль Eclipse. Все работает идеально.

     

    Далее добавляю к шине собственное IP c AXI 4 интерфейсом. Запускаю в Eclipse прежний проект и он не работает! (в консоле нули).

     

    Получается следующее: при добавлении собственного ядра по шине нельзя пересылать burst ами. Как будто она блокируется.

    При этом почисловое чтение\запись работают.

     

    Может вопрос с burst ами. И тогда вышеописанная проблема возникает при попытке инициализации с помощью burst?

     

    Может кто-нибудь создавал в Vivado собственные IP slave с AXI 4?

     

    В XPS таких проблем не было (((

     

     

  14. Здравствуйте! Столкнулся с одной проблемой в Vivado 2014.3

    Собрал систему с микроблейзом.

     

    Добавил собственное ядро (созданное Визардом). В ядро записываю данные процессором, при записи в ядре прибавляется константа, и при считывании процессором данных из ядра наблюдаю сумму константы и исходных данных. Код в процессоре бесконечного цикла не содержит. Запись, чтение и вывод в консоль eclipse

     

    Не понятно следующее:

    При размещении секций памяти микроблейза в lmb_microbl_bram все работает отлично. При размещении в другой памяти (bram, ddr) появляется ошибка

    post-77312-1429513500_thumb.png

     

    и ссылка на адрес в памяти

     

    post-77312-1429514149_thumb.png

     

    post-77312-1429513490_thumb.png

     

    При этом если не использую собственное ядро, то без проблем размещаю Code, Data, Stack&Heap во внутренней bram (не lmb_mblz). Наиболее емким является text микроблейза.

    Пробовал в linker script менять расположение секций памяти. Data секцию вывожу из lmb_bram работает без проблем, вывожу text -- опять ошибка.

     

    Повторюсь: вся проблема только при использовании собственного IP AXI4 слейва без каких либо модификации (за исключением прибавления константы).

  15. Как с этим бороться?

     

    Бороться то зачем? DDS это обычный алгоритм вычисления функции (в Вашем случае синуса). На крайнем рисунке частота соответствует 1\4 частоты дискретизации (4 точки на период). Увеличьте частоту дискретизации и получите сигнал бОльшей частоты.

  16. Добрый день.

    Если у Вас есть возможность вывести из плис видеоданные в формате, например 8битRED/8битGREEN/8битBLUE/HSYNC/VSYNC/DATAEN/CLK, то такую шину можно завести на чип

    DS90CR287, который преобразует ее в LVDS сигналы TXO3+/TXO3-, TXO2+/TXO2-, TXO1+/TXO1-, TXO0+/TXO0-, TXCLK+/TXCLK-.

    Эти сигналы передаются через стандартный для CameraLink разъем, например MDR-26.

    Кроме этих сигналов на разъеме есть еще сигналы связи с камерой, но они Вам, возможно, не нужны.

    Связку плис(spartan6)-DS90CR287-MDR-26 реализовывал.

    Удачи.

     

    Большое спаисбо.

    Как к компьютеру подключали: переходник типа на DVI или VGA? или использовали приставку?

  17. А зачем Вам этот коннектор? Стандартный чем не устраивает? И приставки вместо фрэймграббера с готовым софтом?

     

    Поясните пожалуйста, поподробней. Пока камера линк тёмная тема для меня. У меня задача с платы на кот ПЛИС с lvds по протоколу камера линк передать данные на пк.

    Как я понял можно купить готовую микро схему сериализатор, куда просто заливаешь кадр, а микросхема раскладывает по camera link base.

    Какой распространенный коннектор для соединения плата-пк?

  18. КамераЛинк подразумевает использование определенного коннектора. Как собираетесь разъемы камералинка к плате прикручивать? Если собираетесь делать платку-переходник, то проще всего не делать-искать кору, а использовать готовые National Semi сериализаторы (название не помню. стоят не дорого. искать у тексаса).

    Пока думаю vhdci коннектор. На него заведу диф пары lvds с платы. На ПК присматриваю готовые приставки под pcie с vhdci коннектором.