Перейти к содержанию
    

Совмещение аппаратного PCIe и GXB приёмопередатчика на Cyclone 5 GX в одном банке

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

Имеется FPGA Altera/Intel Cyclone 5 GX - 5CGXFC3B7F23C8.  Делаю прикидочный проект, чтобы понять подходит ли мне эта микросхема.

Надо запихнуть в FPGA PCIe x1 Gen1 и один дополнительный GXB приёмопередатчик (передача и приём, скорость 2.5Gbps, как в PCIe), который обеспечивает внешний скоростной интерфейс устройства.
В FPGA имеется всего три channel PLL. Две из них занимает IP core PCIe (первая идёт на преобразование refclk в 1.25MHz, вторая нужна в составе CDR).
Остаётся всего одна channel PLL, которая неизбежно идёт на CDR дополнительного GXB приёмопередатчика (внешний скоростной интерфейс устройства).
Ещё нужна четвёртая channel PLL, которая будет кормить GXB передатчик (TX PMA) внешнего скоростного интерфейса устройства. Но эту же функцию делает PLL в PCIe IP core (Cyclone V Hard IP for PCI Express). Исходя из внутренней структуры FPGA нет никаких препятствий закормить вход дополнительного передатчика от PLL PCIe IP core. Вопрос как это сделать в имеющимся софте (Quarus 16.1).

В PMA дополнительного GXB передатчика нашёл соответствующий вход:
ext_pll_clk[ <p> -1:0] Input This optional signal is created when you select the Use external TX PLL option. If you instantiate a fractional PLL which is external to the Native PHY IP, then
connect the output clock of this PLL to ext_pll_clk.

А вот в IP core "Cyclone V Hard IP for PCI Express" не могу найти соответствующего выхода PLL.
Может кто сталкивался с подобной задачей?

Кстати, в вышеприведённом тексте намекают, что можно clock для GXB передатчика взять с fractional PLL (которые находятся вне банка приёмопередатчиков)!
В подтверждение можно привести фрагмент из HandBook:
fPLL as a Transmitter PLL
In addition to CMU PLL, the fPLL located adjacent to the transceiver banks are available for clocking the
transmitters for serial data rates up to 3.125 Gbps.
Это конечно тоже выход, но непонятно что будет с jitter-ом и как это повлияет на качество выходного сигнала.
Хотелось бы всё-таки взять clock от channel PLL, размещённой PCIe IP core.
Отпишитесь пожалуйста, если кто успешно использовал GXB передатчик в такой связке (channel PLL на CDR, fPLL на GXB передатчик).
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всяко пробовал, ничего не выходит. Две PLL в одну не сливаются. Печально.

Приведу фрагмент лога компилятора:

Error (14566): The Fitter cannot place 3 periphery component(s) due to conflicts with existing constraints (2 HSSI PMA Aux. block(s), 1 HSSI AVMM Interface(s)). Fix the errors described in the submessages, and then rerun the Fitter. The Intel FPGA Knowledge Database may also contain articles with information on how to resolve this periphery placement failure. Review the errors and then visit the Knowledge Database at https://www.altera.com/support/support-resources/knowledge-base/search.html and search for this specific error message number.
    Error (175001): The Fitter cannot place 1 HSSI AVMM Interface, which is within Cyclone V Hard IP for PCI Express PCIe.
        Info (14596): Information about the failing component(s):
            Info (175028): The HSSI AVMM Interface name(s): PCIe:PCIeM|altpcie_cv_hip_ast_hwtcl:pcie_inst|altpcie_av_hip_ast_hwtcl:altpcie_av_hip_ast_hwtcl|altpcie_av_hip_128bit_atom:altpcie_av_hip_128bit_atom|av_xcvr_pipe_native_hip:g_pcie_xcvr.av_xcvr_pipe_native_hip|av_xcvr_native:inst_av_xcvr_native|av_xcvr_avmm:inst_av_xcvr_avmm|avmm_interface_insts[0].av_hssi_avmm_interface_inst
        Error (11238): The following 1 HSSI AVMM Interface locations are already occupied, and the Fitter cannot merge the previously placed nodes with these instances. The nodes may have incompatible inputs or parameters.
            Error (11239): Location HSSIAVMMINTERFACE_X0_Y11_N86 is already occupied by GX:gx_m|altera_xcvr_native_av:gx_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_xcvr_avmm:inst_av_xcvr_avmm|avmm_interface_insts[0].av_hssi_avmm_interface_inst.
                Error (21087): Input port "I_AVMMCLK" must be driven by the same source
                    Info (21090): Atom "PCIe:PCIeM|altpcie_cv_hip_ast_hwtcl:pcie_inst|altpcie_av_hip_ast_hwtcl:altpcie_av_hip_ast_hwtcl|altpcie_av_hip_128bit_atom:altpcie_av_hip_128bit_atom|av_xcvr_pipe_native_hip:g_pcie_xcvr.av_xcvr_pipe_native_hip|av_xcvr_native:inst_av_xcvr_native|av_xcvr_avmm:inst_av_xcvr_avmm|avmm_interface_insts[0].av_hssi_avmm_interface_inst" is driven by source "qd[0]"
                    Info (21090): Atom "GX:gx_m|altera_xcvr_native_av:gx_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_xcvr_avmm:inst_av_xcvr_avmm|avmm_interface_insts[0].av_hssi_avmm_interface_inst" is driven by source "gxb_cfgclk~inputCLKENA0"
                Error (21088): Input port "I_AVMMCLK" must be driven by a consistent source
                    Info (21090): Atom "PCIe:PCIeM|altpcie_cv_hip_ast_hwtcl:pcie_inst|altpcie_av_hip_ast_hwtcl:altpcie_av_hip_ast_hwtcl|altpcie_av_hip_128bit_atom:altpcie_av_hip_128bit_atom|av_xcvr_pipe_native_hip:g_pcie_xcvr.av_xcvr_pipe_native_hip|av_xcvr_native:inst_av_xcvr_native|av_xcvr_avmm:inst_av_xcvr_avmm|avmm_interface_insts[0].av_hssi_avmm_interface_inst" is driven by source "qd[0]"
                    Info (21090): Atom "GX:gx_m|altera_xcvr_native_av:gx_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_xcvr_avmm:inst_av_xcvr_avmm|avmm_interface_insts[0].av_hssi_avmm_interface_inst" is driven by source "gxb_cfgclk~inputCLKENA0"
                Error (21087): Input port "INTERFACESEL" must be driven by the same source
                    Info (21090): Atom "PCIe:PCIeM|altpcie_cv_hip_ast_hwtcl:pcie_inst|altpcie_av_hip_ast_hwtcl:altpcie_av_hip_ast_hwtcl|altpcie_av_hip_128bit_atom:altpcie_av_hip_128bit_atom|av_xcvr_pipe_native_hip:g_pcie_xcvr.av_xcvr_pipe_native_hip|av_xcvr_native:inst_av_xcvr_native|av_xcvr_avmm:inst_av_xcvr_avmm|avmm_interface_insts[0].av_hssi_avmm_interface_inst" is driven by source "qd[44]"
                    Info (21090): Atom "GX:gx_m|altera_xcvr_native_av:gx_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_xcvr_avmm:inst_av_xcvr_avmm|avmm_interface_insts[0].av_hssi_avmm_interface_inst" is driven by source "GX_CFG:gx_cfg_m|alt_xcvr_reconfig:gx_cfg_inst|alt_xcvr_reconfig_basic:basic|av_xcvr_reconfig_basic:a5|pif_interface_sel~_wirecell"
    Error (175001): The Fitter cannot place 1 HSSI PMA Aux. block, which is within Cyclone V Transceiver Native PHY GX.
        Info (14596): Information about the failing component(s):
            Info (175028): The HSSI PMA Aux. block name(s): GX:gx_m|altera_xcvr_native_av:gx_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pma:inst_av_pma|av_tx_pma:av_tx_pma|av_tx_pma_ch:tx_pma_insts[0].av_tx_pma_ch_inst|tx_pma_ch.tx_pma_buf.tx_pma_aux
        Error (11238): The following 1 HSSI PMA Aux. block locations are already occupied, and the Fitter cannot merge the previously placed nodes with these instances. The nodes may have incompatible inputs or parameters.
            Error (11239): Location HSSIPMAAUX_X0_Y11_N91 is already occupied by PCIe:PCIeM|altpcie_cv_hip_ast_hwtcl:pcie_inst|altpcie_av_hip_ast_hwtcl:altpcie_av_hip_ast_hwtcl|altpcie_av_hip_128bit_atom:altpcie_av_hip_128bit_atom|av_xcvr_pipe_native_hip:g_pcie_xcvr.av_xcvr_pipe_native_hip|av_xcvr_native:inst_av_xcvr_native|av_pma:inst_av_pma|av_tx_pma:av_tx_pma|av_tx_pma_ch:tx_pma_insts[0].av_tx_pma_ch_inst|tx_pma_ch.tx_pma_buf.tx_pma_aux.
                Error (21087): Input port "CALCLK" must be driven by the same source
                    Info (21090): Atom "GX:gx_m|altera_xcvr_native_av:gx_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pma:inst_av_pma|av_tx_pma:av_tx_pma|av_tx_pma_ch:tx_pma_insts[0].av_tx_pma_ch_inst|tx_pma_ch.tx_pma_buf.tx_pma_aux" is driven by source "gxb_cfgclk~inputCLKENA0"
                    Info (21090): Atom "PCIe:PCIeM|altpcie_cv_hip_ast_hwtcl:pcie_inst|altpcie_av_hip_ast_hwtcl:altpcie_av_hip_ast_hwtcl|altpcie_av_hip_128bit_atom:altpcie_av_hip_128bit_atom|av_xcvr_pipe_native_hip:g_pcie_xcvr.av_xcvr_pipe_native_hip|av_xcvr_native:inst_av_xcvr_native|av_pma:inst_av_pma|av_tx_pma:av_tx_pma|av_tx_pma_ch:tx_pma_insts[0].av_tx_pma_ch_inst|tx_pma_ch.tx_pma_buf.tx_pma_aux" is driven by source "qd[0]"
    Error (175001): The Fitter cannot place 1 HSSI PMA Aux. block, which is within Cyclone V Transceiver Native PHY GX.
        Info (14596): Information about the failing component(s):
            Info (175028): The HSSI PMA Aux. block name(s): GX:gx_m|altera_xcvr_native_av:gx_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pma:inst_av_pma|av_rx_pma:av_rx_pma|rx_pmas[0].rx_pma.rx_pma_aux
        Error (11238): The following 1 HSSI PMA Aux. block locations are already occupied, and the Fitter cannot merge the previously placed nodes with these instances. The nodes may have incompatible inputs or parameters.
            Error (17932): Location HSSIPMAAUX_X0_Y11_N91 is already occupied by 2 HSSI PMA Aux. blocks
                Info (11237): Already placed at this location: PCIe:PCIeM|altpcie_cv_hip_ast_hwtcl:pcie_inst|altpcie_av_hip_ast_hwtcl:altpcie_av_hip_ast_hwtcl|altpcie_av_hip_128bit_atom:altpcie_av_hip_128bit_atom|av_xcvr_pipe_native_hip:g_pcie_xcvr.av_xcvr_pipe_native_hip|av_xcvr_native:inst_av_xcvr_native|av_pma:inst_av_pma|av_tx_pma:av_tx_pma|av_tx_pma_ch:tx_pma_insts[0].av_tx_pma_ch_inst|tx_pma_ch.tx_pma_buf.tx_pma_aux
                Info (11237): Already placed at this location: PCIe:PCIeM|altpcie_cv_hip_ast_hwtcl:pcie_inst|altpcie_av_hip_ast_hwtcl:altpcie_av_hip_ast_hwtcl|altpcie_av_hip_128bit_atom:altpcie_av_hip_128bit_atom|av_xcvr_pipe_native_hip:g_pcie_xcvr.av_xcvr_pipe_native_hip|av_xcvr_native:inst_av_xcvr_native|av_pma:inst_av_pma|av_rx_pma:av_rx_pma|rx_pmas[0].rx_pma.rx_pma_aux
                Error (21087): Input port "CALCLK" must be driven by the same source
                    Info (21090): Atom "GX:gx_m|altera_xcvr_native_av:gx_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pma:inst_av_pma|av_rx_pma:av_rx_pma|rx_pmas[0].rx_pma.rx_pma_aux" is driven by source "gxb_cfgclk~inputCLKENA0"
                    Info (21090): Atom "PCIe:PCIeM|altpcie_cv_hip_ast_hwtcl:pcie_inst|altpcie_av_hip_ast_hwtcl:altpcie_av_hip_ast_hwtcl|altpcie_av_hip_128bit_atom:altpcie_av_hip_128bit_atom|av_xcvr_pipe_native_hip:g_pcie_xcvr.av_xcvr_pipe_native_hip|av_xcvr_native:inst_av_xcvr_native|av_pma:inst_av_pma|av_tx_pma:av_tx_pma|av_tx_pma_ch:tx_pma_insts[0].av_tx_pma_ch_inst|tx_pma_ch.tx_pma_buf.tx_pma_aux" is driven by source "qd[0]"
Error (11997): Design has 4 tx channels, 4 rx channels, exceeds the capacity of targeted device, 3 channels.
Error (11998): Design has 2 cdr plls, exceeds the capacity of targeted device, 1 PLLs.
Error (11999): Channel(s) under reference clocks: p_refclk  are 4 tx channels, 4 rx channels, which exceeds the capacity for the targeted device's HSSI strip, 3 channels.
Error (12260): There are 2 CDR PLLs under reference clocks: p_refclk  , which exceeds the capacity of  1 PLLs provided by the HSSI channel. Modify the design to ensure CDR PLLs driven by the reference clock set is less than the number of CDR PLLs supported for the target device.
Error (11692): Design cannot be fitted into HSSI strip. 2 pma_aux_blocks under reference clocks set: p_refclk , exceed the HSSI strip capacity of 1.
Error (12289): An error occurred while applying the periphery constraints. Review the offending constraints and rerun the Fitter.
 

Перечитал ещё раз фразу "In addition to CMU PLL, the fPLL located adjacent to the transceiver banks...".
Похоже тут речь о всё-таки о PLL в других банках с трансиверами (если таки есть, а в моём случае банк один), а не о fractional PLL общего назначения.
С другой стороны в handbook внимательнее перечитал Table 2-1: Input Reference Clock Sources в разделе "Transceiver Clocking in Cyclone V Devices". Тут упомянуты некие fPLL, которые исходя из Figure 2-4 сильно смахивает на PLL общего назначения:
The fPLL clock output can be used as input reference clock source to transmitter PLL or CDR. ... Figure 2-4: fPLL Clock Output as Input Reference Clock
В общем немного подзапутался. Буду дальше изучать этот вопрос.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Согласно следующей ссылке

https://forums.intel.com/s/question/0D50P00004N9KcJSAV/error-14566-when-using-the-pcie-hard-ip-core-next-to-the-custom-transceiver-ip-core-on-a-cyclone-v-gx?language=ru

прямой путь использования CMU PLL от PCIe похоже закрыт (по крайней мере для стандартного PCIe IP Core).

Зато идея использования fractal PLL реально работает. Подробнее это описано в

Большое спасибо всем участникам вышеназванного обсуждения. При помощи этого описания мне удалось сделать один duplex канал (СH2) в котором используется только одна channel PLL (этого канала) в качестве CDR. Хитрость состоит в том, что надо создать fractal PLL с двумя выходами. На вход PLL подать тактовую частоту 125MHz с выделенного GCLK пина. Нулевой выход настроить на 1250 MHz (2500/2) и подать на порт ext_pll_clk IP трансиверов. Первый выход PLL настроить на 125MHz и подать на порт rx_cdr_refclk[0] IP трансиверов.

...
 gx_m.ext_pll_clk[0]=FPLLM.outclk_0;  -- fractional PLL replaces CMU PLL for TX channel
...
 gx_m.rx_cdr_refclk[0] = FPLLM.outclk_1;
...

Всё бы ничего, но модуль PCIe всё равно вместе не хочет компилироваться. Сначала он похоже не мог догадаться, что дополнительный канал надо на CH2 поместить. Указал вручную. Теперь что-то про реконфигурационные контроллеры ругается. Разбираюсь. Похоже надо один реконфигурационный контроллер на весь банк трансиверов, а то у меня для экспериментов с PCIe вообще заглушка стояла, вместо реконфигурационного модуля.

Эх, хоть бы кто готовым тестовым дизайном поделился.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё, добил. Откомпилировалось!

Действительно надо было сгенерить один реконфигурационный контроллер на два интерфейса (для каждого IP ядра свой интерфейс). В опциях указать "2,1".
Осталось понять, что качество дополнительного канала приемлемое, но это уже на реальном железе испытывать надо будет.
Трудно в идеологию почти с нуля въезжать.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...