Jump to content

    

novartis

Свой
  • Content Count

    406
  • Joined

  • Last visited

Community Reputation

0 Обычный

About novartis

  • Rank
    Местный

Контакты

  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

5861 profile views
  1. года два назад на алиэкспресс покупал, самые обычные. В один рейзер x16 вставлена плата с FPGA, в другой рейзер x16 вставлена сетевая карта. Эти два рейзера соединены между собой usb кабелем. К одному из этих рейзеров припаял витую пару к pcie refclk, другой конец витой пары припаял к рейзеру x1 - этот рейзер x1 вставляю в материнскую плату компа, от него и беру опорный клок для pcie. Ниоса нет. Сначала простую стейт машину набросал, потом реализовал простенький логический блок, который берет команды из памяти (чтобы команды мог без перепрошивки менять). Вместо сетевой карты цеплял NVME SSD диск, прочитал endpoint config space, запустил nvme контроллер (CC.EN = 1), посмотрел, что взводится ответный сигнал CSTS.RDY. Пока на этом остановился. Мне думается, что этот PCIe switch все у вас и портит.
  2. Да, все получилось. Соединил плату Стратикс 5 и плату сетевой карты через рейзер x8. Пробовал запитать в плис pcie корку от другой опорной тактовой частоты с платы, ничего не получалось (опорная частота должна быть с дедикейтед клок пин, должна находиться в том же регионе, что и пины линков и т.п.), поэтому в итоге припаял к райзеру витую пару (одна пара из обычного эзернет кабеля) и подал опорный клок с материнской платы. Root Complex завёлся. Прочитал root config space. Прочитал endpoint config space.
  3. тогда так делать не надо У вас есть данные - адресные входы для внешней мс sdram, и есть тактирующий эти данные клок ck. С фазой ck ничего специально придумывать не надо. Нужно оценить длину дорожек от пинов плис до микросхемы SDRAM. Подставить в констрейны и квартус там сам все разрулит. Как оценить длину дорожек и в какие констрейны подставлять - надо почитать мануалы от интела. Вот в том документе есть Board Delay (Data) и Board Delay (Clock) = 0.8ns. Надо подобные констрейны наколдовать.
  4. а оно так по даташиту требуется, чтобы PCK был с фазой 270 относительно данных?
  5. вместо всех этих команд, описывающих клоки pll, можно написать одну derive_pll_clocks Но у вас тут вроде еще имена clk и PCK привязываются к выходам pll. если PCK идет прям на выходную ножку, и не участвует в тактировании другой логики плис, то нет смысла в этой команде. Если это так, то не понятно, почему таймквест выдает ту диаграмму из первого вашего поста. Но можно прописать так: set_clock_groups -exclusive -group {clk PCK} -group {clk} Вы точно кварутсу об этом не сообщили другими констрейнами? В Assignment Editor'е нет записей на эти ножки?
  6. У вас данные inst_PAA тактируются частотой clk (125MHz, фаза 0), эти данные поступают в другой клоковый домен (другой process или другой always блок), тактируемый частотой PCK (125MHz, фаза 270). Вот на это таймквест и ругается. А дальше надо думать, схема то не вся показана. смотрите Latch Clock - жирный нарастающий фронт справа, там где 6ns
  7. По коду из архива вы туда и не попадете. Можно попробовать написать так: signal state_wr : integer range 0 to 4 :=0; --FSM счетчик тактов синхронной state-машины process (clk, sbr) begin if sbr='0' then state_wr <= 0; elsif falling_edge(clk) then case faza is when PRM0 => if ReWr0 ='0' then state_wr <= state_wr +1; end if; when PRM1 => if ReWr1 ='0' then state_wr <= state_wr +1; end if; when PRM2 => if ReWr2 ='0' then state_wr <= state_wr +1; end if; when PRM3 => if ReWr3 ='0' then state_wr <= state_wr +1; end if; --when PUST => state_wr <= 0; when others=>state_wr <= 0; end case; end if; end process; -------------------------------------------------------------- process (clk, sbr) begin if sbr='0' then faza <= PRM0; elsif rising_edge(clk) then case state_wr is when 0 => faza <= PRM0; when 1 => faza <= PRM1; when 2 => faza <= PRM2; when 3 => faza <= PRM3; --when 4 => faza <= PUST; when others=>faza <= PUST; end case; end if; end process;
  8. Есть у меня плата Stratix 5 с PCIE (Terasic TR5-F40W (Stratix 5, Pcie Gen 3 x8)), я ее соединил с обычной сетевой картой PCIE x1. На стратиксе в проекте сгенерил Pcie IP Core в режиме root complex. Соединил платы через два рейзера x1. Опорный клок refclk 100 МГц подал на рейзеры от материнки компа (припаял диф пару). PCIE_PERSTN для стратикса завел от button_0 платы FPGA, а PCIE_PERSTN для сетевой карты сделал и от button_0 и от button_1 FPGA, можно одновременно сбросить pcie стратикс 5 и pcie сетевой карты, и можно сбросить только pcie сетевой карты. В сигналтапе смотрю, pcie_core_clk_out есть, это клок из Pcie IP Core , опорная частота захвачена, корка работает. LTSSMSTATE = 0x0F - это состояние L0 - это нормальное состояние, когда данные и контрольные пакеты могут быть отправлены и приняты. Если сетевую карту PCIE x1 вытащить из слота и дернуть PCIE_PERSTN стратикса, то LTSSMSTATE будет постоянно перепрыгивать из начальных состояний. Если обратно вставить сетевуху, то LTSSMSTATE = L0. Делаю, вывод, что линк между платами устанавливается. Вот дальше есть не понимание, что делать дальше) Читал спецификацию, пришел к выводу, что надо сделать enumeration. Для этого надо прочитать конфигурационное пространство подключенных устройств. Делаю Cnfg Rd Type 0 (хочу прочитать конфиг своей платы FPGA), в ответ получаю пакет с vendor id и device id, которые я указал при настройках PCIE IP Core. Тут все норм. Делаю Cnfg Rd Type 1, в ответ ничего получаю. Перебираю все возможные Bus, Device Number в пакете Cnfg Rd Type 1, ответ не приходит. Не понятно почему не приходит ответ от сетевой карты на чтение ее конфигурационного пространства. Может логика работы совсем не такая? Или нужно успеть сделать опрос Cnfg Rd за определенное время после сброса?
  9. 6.369 и 6.397 - это периоды? Но они разные. Частоты с такими периодами равны 157.01 и 156.32 Для частоты 156.25 MHz период получается ровно 6.4 нс. Не знаю как там квартус расчет произведет конечно. И на картинке видно, что второй клок чуть уползает от первого. cmp_10gbase_r_phy_inst|xv_xcvr_10gbaser_nr_inst|ch[0].sv_xcvr_10gbaser_native_inst|g_fpll.altera_pll_156M~PLL_OUTPUT_COUNTER|divclk ; Generated ; 6.397 ; 156.25 MHz ; cmp_10gbase_r_phy_inst|xv_xcvr_10gbaser_nr_inst|ch[0].sv_xcvr_10gbaser_native_inst|native_inst|inst_sv_pma|rx_pma.sv_rx_pma_inst|rx_pmas[0].rx_pma.rx_pma_deser|clk33pcs ; Generated ; 6.369 ; 156.25 MHz ; Посмотрел в каком то своем старом проекте для 10gbase_r, там квартус тоже разные периоды получает. Не понятно
  10. Задача - посмотреть что такое pcie root complex. Есть у меня pcie рейзеры (которые майнеры используют). Посмотрел, с помощью двух таких рейзеров вполне можно две pcie платы соединить, в режиме x1, там по проводу usb3 передаются один линк туда обратно ( x1), клок и сброс. Потихоньку дальше буду разбираться.
  11. Точно, надо с клоком вопрос решить. Нашел вот такой адаптер https://dgway.com/products/IP/ABseries/AB18-PCIEx16-MAN-E.pdf Клоковый генератор прям на плате адаптера, и клок разводится на оба pcie разъема. Также и питание с адаптера разводится на оба разъема. Но он стоит 1500$ на маузере. Хочется за 200 рублей, ну максимум за 1500 рублей
  12. Вопрос пока теоретический, но все же... Есть к примеру две платы 1. Terasic TR5-F40W (Stratix 5, Pcie Gen 3 x8) 2. Intel® Cyclone® 10 GX FPGA Development Kit (Pcie Gen2 x4) Воткнуть каждую из них в комп, настроить Pcie как endpoint - это понятно как сделать. А можно ли соединить их между собой, одну настроить как root complex, другую как endpoint? И может кто подкинет ссылку на такой адаптер - переходник?
  13. Подскажите, пожалуйста, как проходила процедура очистки на таможне?