Jump to content

    

Подключение Video PHY Controller к GTH на Zynq Ultrascale+

Recommended Posts

WladimirK

Задача следующая. Надо подключить IP-Core Display Port Tx. Это IP подключается через Video PHY Controller к GTH (гигабитному приемопередатчику). Первым этапом я подключаю выходы FPGA (xczu4cg-fbvb900-1-e) к Video PHY Controller. Вот Block Disign:

image.thumb.png.f2e4339d8eb3c37ea59037780cbc42a1.png

Затем выходы этого Block Design я просто передаю на выходы TX GTH. Вот код:

 

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity top is
    Port (  DP_Dx_SEL:      out     std_logic;
            DP_AUX_SEL:     out     std_logic;
            DP_ENABLE:      out     std_logic;
            
            --DP TX OUT
            DP_MGT_TX_P:    out     std_logic_vector(3 downto 0);
            DP_MGT_TX_N:    out     std_logic_vector(3 downto 0));

end top;

-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
architecture Behavioral of top is

signal      clk100MHz:              std_logic;

signal      phy_txp_out:            std_logic_vector(3 downto 0);
signal      phy_txn_out:            std_logic_vector(3 downto 0);

signal      ibuf_ds_p_0:            std_logic;
signal      ibuf_ds_n_0:            std_logic;
signal      ibuf_ds_p_1:            std_logic;
signal      ibuf_ds_n_1:            std_logic;

-----------------------------------------------------------------------------
begin
-----------------------------------------------------------------------------
--DP control initialisation
DP_Dx_SEL<=     '0';
DP_AUX_SEL<=    '0';
DP_ENABLE<=     '1';

DP_MGT_TX_P<=   phy_txp_out;
DP_MGT_TX_n<=   phy_txn_out;

--ZYNQ Block Design
ZYNQ_VIDEO_BD:entity work.bd
    port map(  clk100MHz=>                clk100MHz,
    
               phy_txp_out=>           phy_txp_out,
               phy_txn_out=>           phy_txn_out,

               
               ibuf_ds_p_0=>           ibuf_ds_p_0,
               ibuf_ds_n_0=>           ibuf_ds_n_0,
               ibuf_ds_p_1=>           ibuf_ds_p_1,
               ibuf_ds_n_1=>           ibuf_ds_n_1
               );

end Behavioral;

 

Но после сборки проекта, на этапе Generate Bitstream, выскакиет ошибка:

[DRC NSTD-1] Unspecified I/O Standard: 8 out of 11 logical ports use I/O standard (IOSTANDARD) value 'DEFAULT', instead of a user assigned specific value. This may cause I/O contention or incompatibility with the board power or connectivity affecting performance, signal integrity or in extreme cases cause damage to the device or the components to which it is connected. To correct this violation, specify all I/O standards. This design will fail to generate a bitstream unless all logical ports have a user specified I/O standard value defined. To allow bitstream creation with unspecified I/O standard values (not recommended), use this command: set_property SEVERITY {Warning} [get_drc_checks NSTD-1].  NOTE: When using the Vivado Runs infrastructure (e.g. launch_runs Tcl command), add this command to a .tcl file and add that file as a pre-hook for write_bitstream step for the implementation run. Problem ports: DP_MGT_TX_N[3:0], and DP_MGT_TX_P[3:0].

[DRC UCIO-1] Unconstrained Logical Port: 8 out of 11 logical ports have no user assigned specific location constraint (LOC). This may cause I/O contention or incompatibility with the board power or connectivity affecting performance, signal integrity or in extreme cases cause damage to the device or the components to which it is connected. To correct this violation, specify all pin locations. This design will fail to generate a bitstream unless all logical ports have a user specified site LOC constraint defined.  To allow bitstream creation with unspecified pin locations (not recommended), use this command: set_property SEVERITY {Warning} [get_drc_checks UCIO-1].  NOTE: When using the Vivado Runs infrastructure (e.g. launch_runs Tcl command), add this command to a .tcl file and add that file as a pre-hook for write_bitstream step for the implementation run.  Problem ports: DP_MGT_TX_N[3:0], and DP_MGT_TX_P[3:0].
 

Может кто подключал эту штуку и подскажет куда копать!? Что я упускаю?
 

Share this post


Link to post
Share on other sites

WladimirK

Все, разобрался. Проблема была в подключении генераторов ко входам PHY. В моем случае надо использовать mgtrefclk0/1. Тогда ошибки уходят.

Share this post


Link to post
Share on other sites

Flip-fl0p

Вопрос не по теме. 

Зачем Вы применяете эти библиотеки ?

use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

 

Share this post


Link to post
Share on other sites

WladimirK
В 16.05.2022 в 07:42, Flip-fl0p сказал:

Вопрос не по теме. 

Зачем Вы применяете эти библиотеки ?

use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

 

Ко мне на почту не пришел ваш вопрос, извиняюсь, что так поздно отвечаю. Последняя точно для работы с integer. Например резервирую переменную: signal x std_logic_vector(7 downto 0). Далее я хочу ее использовать в качестве счетчика, то есть x<=x+1; так вот без этой библиотеки я не смогу использовать вектор как целое число. А про первую, надо почитать, подзабыл, но я ее везде использую. Привык:)

Edited by WladimirK

Share this post


Link to post
Share on other sites

Flip-fl0p
В 09.06.2022 в 22:20, WladimirK сказал:

Ко мне на почту не пришел ваш вопрос, извиняюсь, что так поздно отвечаю. Последняя точно для работы с integer. Например резервирую переменную: signal x std_logic_vector(7 downto 0). Далее я хочу ее использовать в качестве счетчика, то есть x<=x+1; так вот без этой библиотеки я не смогу использовать вектор как целое число. А про первую, надо почитать, подзабыл, но я ее везде использую. Привык:)

 

VHDL - язык со строгой типизацией. 

Если Вам необходимо инкрементить тип STD_LOGIC_VECTOR то вы можете подключить стандартную библиотеку IEEE.numeric_std

затем вы тип STD_LOGIC_VECTOR преобразуете в тип UNSIGNED. Инкрементируете. И преобразуете обратно в тип STD_LOGIC_VECTOR.

Или же сразу счетчики объявляете типом UNSIGNED.

    signal x std_logic_vector(7 downto 0) := (others => '0');
    signal y unsigned(7 downto 0)        := (others => '0');
begin
    counter_x_proc : process
    begin
        if (rising_edge(clk)) then 
            x <= std_logic_vector(unsigned(x) + "1");
        end if;
    end process
    
    counter_y_proc : process
    begin
        if (rising_edge(clk)) then 
            y <= y + "1";
        end if;
    end process
end process;

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.