⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hdsdi_rio_refclk.vhd

📁 SDI接口的源程序,包括扰码编码,并串转换,用VHDL硬件描述语言编写
💻 VHD
📖 第 1 页 / 共 2 页
字号:
        CONFIGOUT : out std_logic;
        RXBUFSTATUS : out std_logic_vector (1 downto 0);
        RXCHARISCOMMA : out std_logic_vector (3 downto 0);
        RXCHARISK : out std_logic_vector (3 downto 0);
        RXCHECKINGCRC : out std_logic;
        RXCLKCORCNT : out std_logic_vector (2 downto 0);
        RXCOMMADET : out std_logic;
        RXCRCERR : out std_logic;
        RXDATA : out std_logic_vector (31 downto 0);
        RXDISPERR : out std_logic_vector (3 downto 0);
        RXLOSSOFSYNC : out std_logic_vector (1 downto 0);
        RXNOTINTABLE : out std_logic_vector (3 downto 0);
        RXREALIGN : out std_logic;
        RXRECCLK : out std_logic;
        RXRUNDISP : out std_logic_vector (3 downto 0);
        TXBUFERR : out std_logic;
        TXKERR : out std_logic_vector (3 downto 0);
        TXN : out std_logic;
        TXP : out std_logic;
        TXRUNDISP : out std_logic_vector (3 downto 0)
    );
end component;

begin

    GND1 <= '0';
    GND  <= (others => '0');
    GND2 <= (others => '0');
    VCC  <= (others => '1');

--
-- loopback control signals
--
-- Encodes the loopback_en and loopback_mode signals into the two inputs
-- needed by the RocketIO to control loopback mode.
--
    loop_ctl(1) <= loopback_en and not loopback_mode;
    loop_ctl(0) <= loopback_en and loopback_mode;

--
-- Instantiate the RocketIO transceiver
--
-- Use the GT_CUSTOM primitive because we need to be able to bypass the 8B10B
-- encode/decode functions.
--
   RIO : GT_CUSTOM
        generic map (
            ALIGN_COMMA_MSB             => FALSE,
            CHAN_BOND_LIMIT             => 16,
            CHAN_BOND_MODE              => "OFF",
            CHAN_BOND_OFFSET            => 8,
            CHAN_BOND_ONE_SHOT          => FALSE,
            CHAN_BOND_SEQ_1_1           => "00000000000",
            CHAN_BOND_SEQ_1_2           => "00000000000",
            CHAN_BOND_SEQ_1_3           => "00000000000",
            CHAN_BOND_SEQ_1_4           => "00000000000",
            CHAN_BOND_SEQ_2_1           => "00000000000",
            CHAN_BOND_SEQ_2_2           => "00000000000",
            CHAN_BOND_SEQ_2_3           => "00000000000",
            CHAN_BOND_SEQ_2_4           => "00000000000",
            CHAN_BOND_SEQ_2_USE         => FALSE,
            CHAN_BOND_SEQ_LEN           => 1,
            CHAN_BOND_WAIT              => 8,
            CLK_CORRECT_USE             => FALSE,
            CLK_COR_INSERT_IDLE_FLAG    => FALSE,
            CLK_COR_KEEP_IDLE           => FALSE,
            CLK_COR_REPEAT_WAIT         => 1,
            CLK_COR_SEQ_1_1             => "00000000000",
            CLK_COR_SEQ_1_2             => "00000000000",
            CLK_COR_SEQ_1_3             => "00000000000",
            CLK_COR_SEQ_1_4             => "00000000000",
            CLK_COR_SEQ_2_1             => "00000000000",
            CLK_COR_SEQ_2_2             => "00000000000",
            CLK_COR_SEQ_2_3             => "00000000000",
            CLK_COR_SEQ_2_4             => "00000000000",
            CLK_COR_SEQ_2_USE           => FALSE,
            CLK_COR_SEQ_LEN             => 1,
            COMMA_10B_MASK              => "1111111000",
            CRC_END_OF_PKT              => "K29_7",
            CRC_FORMAT                  => "USER_MODE",
            CRC_START_OF_PKT            => "K27_7",
            DEC_MCOMMA_DETECT           => FALSE,
            DEC_PCOMMA_DETECT           => FALSE,
            DEC_VALID_COMMA_ONLY        => FALSE,
            MCOMMA_10B_VALUE            => "1100000000",
            MCOMMA_DETECT               => FALSE,
            PCOMMA_10B_VALUE            => "0011111000",
            PCOMMA_DETECT               => FALSE,
            RX_BUFFER_USE               => TRUE,
            RX_CRC_USE                  => FALSE,
            RX_DATA_WIDTH               => 2,
            RX_DECODE_USE               => FALSE,
            RX_LOSS_OF_SYNC_FSM         => FALSE,
            RX_LOS_INVALID_INCR         => 1,
            RX_LOS_THRESHOLD            => 4,
            TERMINATION_IMP             => 50,
            SERDES_10B                  => FALSE,
            TX_BUFFER_USE               => TRUE,
            TX_CRC_FORCE_VALUE          => "11010110",
            TX_CRC_USE                  => FALSE,
            TX_DATA_WIDTH               => 2,
            TX_DIFF_CTRL                => 800,
            TX_PREEMPHASIS              => 0,
            REF_CLK_V_SEL               => 0)
     
        port map (
            CHBONDI                     => GND(3 downto 0),
            CONFIGENABLE                => GND1,
            CONFIGIN                    => GND1,
            ENMCOMMAALIGN               => GND1,
            ENPCOMMAALIGN               => GND1,
            ENCHANSYNC                  => GND1,
            LOOPBACK                    => loop_ctl,
            POWERDOWN                   => GND1,
            REFCLK                      => refclk,
            REFCLK2                     => refclk2,
            REFCLKSEL                   => refclk_sel,
            BREFCLK                     => brefclk,
            BREFCLK2                    => brefclk2,
            RXN                         => rxn,
            RXP                         => rxp,
            RXPOLARITY                  => GND1,
            RXRESET                     => rst_x,
            RXUSRCLK                    => rxusrclk,
            RXUSRCLK2                   => rxusrclk2,
            TXBYPASS8B10B               => VCC(3 downto 0),
            TXCHARDISPMODE              => gt_txchardispmode,
            TXCHARDISPVAL               => gt_txchardispval,
            TXCHARISK                   => GND(3 downto 0),
            TXDATA                      => gt_txdata,
            TXFORCECRCERR               => GND1,
            TXINHIBIT                   => txinhibit,
            TXPOLARITY                  => GND1,
            TXRESET                     => rst_x,
            TXUSRCLK                    => txusrclk,
            TXUSRCLK2                   => txusrclk2,
            CHBONDDONE                  => open,
            CHBONDO                     => open,
            CONFIGOUT                   => open,
            RXBUFSTATUS                 => open,
            RXCHARISCOMMA               => open,
            RXCHARISK                   => gt_rxcharisk,
            RXCHECKINGCRC               => open,
            RXCLKCORCNT                 => open,
            RXCOMMADET                  => open,
            RXCRCERR                    => open,
            RXDATA                      => gt_rxdata,
            RXDISPERR                   => open,
            RXLOSSOFSYNC                => open,
            RXNOTINTABLE                => open,
            RXREALIGN                   => open,
            RXRECCLK                    => rxrecclk,
            RXRUNDISP                   => gt_rxrundisp,
            TXBUFERR                    => open,
            TXKERR                      => open,
            TXN                         => txn,
            TXP                         => txp,
            TXRUNDISP                   => open);

gt_txchardispmode <= ("00" & txdata_swap(19) & txdata_swap(9));
gt_txchardispval <= ("00" & txdata_swap(18) & txdata_swap(8));
gt_txdata <= ("0000000000000000" & txdata_swap(17 downto 10) & txdata_swap(7 downto 0));
recdata <= (gt_rxcharisk(1) & gt_rxrundisp(1) & gt_rxdata(15 downto 8) & 
            gt_rxcharisk(0) & gt_rxrundisp(0) & gt_rxdata(7 downto 0));
 
--
-- Swap the received data
--
    process(recdata)
    begin
        for i in 0 to 19 loop
            rxdata(i) <= recdata(19 - i);
        end loop;
    end process;
 
--
-- Swap the transmit data
--
    process(txdata)
    begin
        for i in 0 to 19 loop
            txdata_swap(i) <= txdata(19 - i);
        end loop;
    end process;

--
-- RocketIO transceiver reset logic
--
    process(rxusrclk, dcm_locked)
    begin
        if rxusrclk'event and rxusrclk = '1' then
            if dcm_locked = '0' then
                startup_counter <= (others => '0');
            else
                startup_counter <= (startup_counter(1 downto 0) & '1');
            end if;
        end if;
    end process;

    process(rxusrclk, dcm_locked)
    begin
        if rxusrclk'event and rxusrclk = '1' then
            if dcm_locked = '0' then
                gt_rst <= '1';
            elsif startup_counter(2) = '1' then
                gt_rst <= '0';
            end if;
        end if;
    end process;

    rst_x <= gt_rst or rst;
                             
end synth;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -