📄 hdsdi_rio_refclk.vhd
字号:
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 + -