亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? phy_dq_align.vhd

?? The xapp851.zip archive includes the following subdirectories. The specific contents of each subdi
?? VHD
字號:
-------------------------------------------------------------------------------
-- Copyright (c) 2006 Xilinx, Inc.
-- This design is confidential and proprietary of Xilinx, All Rights Reserved.
-------------------------------------------------------------------------------
--   ____  ____
--  /   /\/   /
-- /___/  \  /   Vendor: Xilinx
-- \   \   \/    Version: 1.1
--  \   \        Filename: phy_dq_align.vhd
--  /   /        Date Last Modified: 5/10/06
-- /___/   /\    Date Created:
-- \   \  /  \
--  \___\/\___\
-- 
--Device: Virtex-5
--Purpose: Read-data capture calibration and alignment logic. Instantiates:
--         (1) IDELAY elements for both data and DQS strobe, (2) BUFIO local
--         clock buffer for incoming DQS, (3) IDDRs flops for incoming read
--         data capture, (4) 2nd and 3rd rank of flops (located in the FPGA
--         fabric) for transferring data to FPGA clock domain
--Reference:
--    XAPP851
--Revision History:
--    Rev 0.1 - Created. Author: Toshihiko Moriyama. 11/14/05.
--    Rev 1.0 - Internal release. Author: Toshihiko Moriyama. 4/29/06.
--    Rev 1.1 - External release. Added header. 5/10/06.
-------------------------------------------------------------------------------

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;

library work;
use work.ddr1_parameters.all;

library unisim ;
use unisim.vcomponents.all ;

entity phy_dq_align is
port(
	rst			: in	std_logic;
	clk0		: in	std_logic;

	DQS			: in	std_logic;
	DQ			: in	std_logic_vector(dq_per_dqs - 1 downto 0);

	rd_data		: out	std_logic_vector(dq_per_dqs*2 - 1 downto 0);
	calib_start	: in	std_logic;
	calib_done	: out	std_logic
);

end phy_dq_align;

-----------------------------------------------
architecture rtl of phy_dq_align is

	TYPE ALIGNSTATE_TYPE is (
	WAIT_ST,	-- wait until 1st data pattern is available
	FIRST_CAP_ST,
	INCR_ST,
	INCR_WAIT_ST,
	CAPTURE_ST,
	COMP_ST,
	CALC_ST,
	SET_ST,
	SET_WAIT_ST,
	RUN_ST
	);

	signal state_c	: ALIGNSTATE_TYPE;
	signal state_n	: ALIGNSTATE_TYPE;

	signal DQS_dly			: std_logic;
	signal DQS_dly_bufio	: std_logic;
	signal DQS_bufio		: std_logic;

	signal DQ_dly			: std_logic_vector(dq_per_dqs - 1 downto 0);
	signal DQ_iddr_r		: std_logic_vector(dq_per_dqs - 1 downto 0);
	signal DQ_iddr_f		: std_logic_vector(dq_per_dqs - 1 downto 0);

	signal DQ_iddr_r0		: std_logic_vector(dq_per_dqs - 1 downto 0);
	signal DQ_iddr_f0		: std_logic_vector(dq_per_dqs - 1 downto 0);
	signal DQ_iddr_r180		: std_logic_vector(dq_per_dqs - 1 downto 0);
	signal DQ_iddr_f180		: std_logic_vector(dq_per_dqs - 1 downto 0);
	signal DQ_iddr_r180_2	: std_logic_vector(dq_per_dqs - 1 downto 0);

	signal rd_data_r			: std_logic_vector(dq_per_dqs - 1 downto 0);
	signal rd_data_f			: std_logic_vector(dq_per_dqs - 1 downto 0);

	signal use_clk0			: std_logic;

	signal dly_ce			: std_logic;
	signal dly_rst			: std_logic;
	signal dly_inc			: std_logic;

	signal DQ_r_first		: std_logic_vector(1 downto 0);
	signal DQ_r_cur			: std_logic_vector(1 downto 0);
	signal dly_taps			: unsigned(5 downto 0);
	signal inc_cnt			: unsigned(5 downto 0);

	constant DLYTAP_RST	: std_logic_vector(2 downto 0) := "001";
	constant DLYTAP_INC	: std_logic_vector(2 downto 0) := "110";
	constant DLYTAP_DEC	: std_logic_vector(2 downto 0) := "100";
	constant DLYTAP_NOP	: std_logic_vector(2 downto 0) := "000";
	signal dlyTap_cmd	: std_logic_vector(2 downto 0);

	constant NUM_TAPS_90DEGREE	: unsigned(5 downto 0) := "010000";	-- 16 taps at 200Mhz

	-- Debug
	signal dly_inc_dq			: std_logic;
	signal dly_ce_dq			: std_logic;
	signal dly_rst_dq			: std_logic;
	signal dly_inc_dqs			: std_logic;
	signal dly_ce_dqs			: std_logic;
	signal dly_rst_dqs			: std_logic;

	signal clk0_sel				: std_logic;
	signal calibration_done		: std_logic;

	signal LOGIC_0		: std_logic;
	signal LOGIC_1		: std_logic;

begin

	process (rst, clk0)
	begin
	if rst='1' then

		dly_inc_dq	<= '0';
		dly_ce_dq	<= '0';
		dly_rst_dq	<= '1';
		dly_inc_dqs	<= '0';
		dly_ce_dqs	<= '0';
		dly_rst_dqs	<= '1';

		clk0_sel	<= '0';
		calib_done	<= '0';

	elsif clk0'event and clk0='1' then

		dly_inc_dq	<= dly_inc;
		dly_ce_dq	<= dly_ce;
		dly_rst_dq	<= dly_rst;
		dly_inc_dqs	<= dly_inc;
		dly_ce_dqs	<= dly_ce;
		dly_rst_dqs	<= dly_rst;

		clk0_sel	<= use_clk0;
		calib_done	<= calibration_done;

	end if;
	end process;

	LOGIC_0	<= '0';
	LOGIC_1 <= '1';

	------------------------------------------------------------------

	P_ALIGN_NEXT : process(clk0)
	begin
	if clk0'event and clk0='1' then
		if rst='1' then
			state_c <= WAIT_ST;
		else
			state_c <= state_n;
		end if;

	end if;
	end process;

	-------------------
	-- STATE MACHINE --
	-------------------
	P_ALIGN_ST : process(rst, state_c, calib_start, DQ_r_cur, DQ_r_first, inc_cnt, dly_taps)
	begin
	if rst='1' then
		state_n <= WAIT_ST;
	else
		case state_c is

		when WAIT_ST =>
			if calib_start='1' then
				state_n <= FIRST_CAP_ST;
			else
				state_n <= WAIT_ST;
			end if;

		when FIRST_CAP_ST =>
			state_n <= INCR_ST;

		when INCR_ST =>
			state_n <= INCR_WAIT_ST;

		when INCR_WAIT_ST =>
			if inc_cnt = 5 then
				state_n <= CAPTURE_ST;
			else
				state_n <= INCR_WAIT_ST;
			end if;

		when CAPTURE_ST =>
			state_n <= COMP_ST;

		when COMP_ST =>
			if (((DQ_r_cur(0) xor DQ_r_cur(1)) = '1') xor ((DQ_r_first(0) xor DQ_r_first(1)) = '1' ))
				or (dly_taps = 31 ) then
				state_n <= CALC_ST;
			else
				state_n <= INCR_ST;
			end if;

		when CALC_ST =>
			state_n <= SET_ST;

		when SET_ST =>
			if inc_cnt = dly_taps then
				state_n <= SET_WAIT_ST;
			else
				state_n <= SET_ST;
			end if;

		when SET_WAIT_ST =>
			if inc_cnt = 5 then
				state_n <= RUN_ST;
			else
				state_n <= SET_WAIT_ST;
			end if;

		when RUN_ST =>
			state_n <= RUN_ST;

		when others =>
			state_n <= WAIT_ST;

		end case;

	end if;
	end process;

	-- delay increment
	P_ALIGN : process( clk0 )
	begin
	if clk0'event and clk0='1' then
		if rst='1' then
			dlyTap_cmd <= DLYTAP_RST;
			dly_taps <= (others => '0');
			inc_cnt <= (others => '0');
			use_clk0 <= '0';

		else
			case state_c is

			when WAIT_ST =>
				dlyTap_cmd <= DLYTAP_NOP;
				dly_taps <= (others => '0');
				inc_cnt <= (others => '0');

			when FIRST_CAP_ST =>
				dlyTap_cmd <= DLYTAP_NOP;
				dly_taps <= (others => '0');
				inc_cnt <= (others => '0');

			when INCR_ST =>
				dlyTap_cmd <= DLYTAP_INC;
				inc_cnt <= (others => '0');
				dly_taps <= dly_taps + 1;

			when INCR_WAIT_ST =>
				dlyTap_cmd <= DLYTAP_NOP;
				dly_taps <= dly_taps;
				inc_cnt <= inc_cnt + 1;

			when CAPTURE_ST =>
				dlyTap_cmd <= DLYTAP_NOP;
				dly_taps <= dly_taps;
				inc_cnt <= (others => '0');

			when COMP_ST =>
				dlyTap_cmd <= DLYTAP_NOP;
				dly_taps <= dly_taps;
				inc_cnt <= (others => '0');

			when CALC_ST =>
				if dly_taps >= NUM_TAPS_90DEGREE then
					dly_taps <= dly_taps - NUM_TAPS_90DEGREE;
					if (DQ_r_first(0) xor DQ_r_first(1)) = '1' then
						use_clk0 <= '0';
					else
						use_clk0 <= '1';
					end if;
				else
					dly_taps <= dly_taps + NUM_TAPS_90DEGREE;
					if (DQ_r_first(0) xor DQ_r_first(1)) = '1' then
						use_clk0 <= '1';
					else
						use_clk0 <= '0';
					end if;
				end if;

				-- reset the idelay to default setting
				dlyTap_cmd <= DLYTAP_RST;
				inc_cnt <= (others => '0');

			when SET_ST =>
				if inc_cnt = dly_taps then
					dlyTap_cmd <= DLYTAP_NOP;
					inc_cnt <= (others => '0');
				else
					dlyTap_cmd <= DLYTAP_INC;
					inc_cnt <= inc_cnt + 1;
				end if;

				dly_taps <= dly_taps;

			when SET_WAIT_ST =>
				dlyTap_cmd <= DLYTAP_NOP;
				dly_taps <= dly_taps;
				inc_cnt <= inc_cnt + 1;

			when RUN_ST =>
				dlyTap_cmd <= DLYTAP_NOP;

			when others =>
				dlyTap_cmd <= DLYTAP_NOP;

			end case;
		end if;
	end if;
	end process;

	dly_rst <= dlyTap_cmd(0);
	dly_inc <= dlyTap_cmd(1);
	dly_ce  <= dlyTap_cmd(2);

	--
	P_FIRST_CAP : process( clk0 )
	begin
	if clk0'event and clk0='1' then
		if rst='1' then
			DQ_r_first <= (others => '0');
		else
			case state_c is
			when FIRST_CAP_ST =>
				-- Uses data from first FFs in CLB
				DQ_r_first <= DQ_iddr_r180(0) & DQ_iddr_r0(0);
			when others =>
				DQ_r_first <= DQ_r_first;
			end case;
		end if;
	end if;
	end process;

	--
	P_DATA_CAP : process( clk0 )
	begin
	if clk0'event and clk0='1' then
		if rst='1' then
			DQ_r_cur <= (others => '0');
		else
			case state_c is
			when CAPTURE_ST =>
				DQ_r_cur <= DQ_iddr_r180(0) & DQ_iddr_r0(0);
			when others =>
				DQ_r_cur <= DQ_r_cur;
			end case;
		end if;
	end if;
	end process;

	--
	P_CALIB_DONE : process( clk0 )
	begin
	if clk0'event and clk0='1' then
		if rst='1' then
			calibration_done <= '0';
		else
			case state_c is
			when RUN_ST =>
				calibration_done <= '1';
			when others =>
				calibration_done <= '0';
			end case;
		end if;
	end if;
	end process;

	-----------------------------------------------------
	-- IOB components instantiation
	-----------------------------------------------------

	IDELAY_DQS : IDELAY
	generic map (
	IOBDELAY_TYPE => "VARIABLE",
	IOBDELAY_VALUE => 0)
	port map (
	O	=> DQS_dly,
	C	=> clk0,
	CE	=> dly_ce_dqs,
	I	=> DQS,
	INC	=> dly_inc_dqs,
	RST	=> dly_rst_dqs
	);

	BUFIO_DQS : BUFIO
	port map ( O => DQS_dly_bufio, I => DQS_dly );

	DQS_bufio <= DQS_dly_bufio after 100 ps;

	G_DQ_IDDR : for I in 0 to dq_per_dqs - 1 generate

		IDELAY_DQ : IDELAY
		generic map (
		IOBDELAY_TYPE => "VARIABLE",
		IOBDELAY_VALUE => 0)
		port map (
		O	=> DQ_dly(I),
		C	=> clk0,
		CE	=> dly_ce_dq,
		I	=> DQ(I),
		INC	=> dly_inc_dq,
		RST	=> dly_rst_dq
		);

		IDDR_DQ : IDDR
		generic map (
		DDR_CLK_EDGE => "OPPOSITE_EDGE",
		INIT_Q1 => '0',
		INIT_Q2 => '0',
		SRTYPE => "SYNC")
		port map (
		Q1	=> DQ_iddr_r(I),
		Q2	=> DQ_iddr_f(I),
		C	=> DQS_bufio,
		CE	=> LOGIC_1,
		D	=> DQ_dly(I),
		R	=> LOGIC_0,
		S	=> LOGIC_0
		);

	end generate;

	G_RD_FF : for I in 0 to dq_per_dqs - 1 generate

	-----------------------------------------
	-- clk0 data path
	FD_DQ_IDDR_R0 : FD
	port map (
	Q => DQ_iddr_r0(I),
	C => clk0,
	D => DQ_iddr_r(I)
	);

	FD_DQ_IDDR_F0 : FD_1
	port map (
	Q => DQ_iddr_f0(I),
	C => clk0,
	D => DQ_iddr_f(I)
	);

	-----------------------------------------
	-- clk180 data path
	FD_DQ_IDDR_R180 : FD_1
	port map (
	Q => DQ_iddr_r180(I),
	C => clk0,
	D => DQ_iddr_r(I)
	);

	FD_DQ_IDDR_R180_2 : FD
	port map (
	Q => DQ_iddr_r180_2(I),
	C => clk0,
	D => DQ_iddr_r180(I)
	);

	FD_DQ_IDDR_F180 : FD
	port map (
	Q => DQ_iddr_f180(I),
	C => clk0,
	D => DQ_iddr_f(I)
	);

	end generate;

	rd_data_r <= DQ_iddr_r0 when clk0_sel='1' else DQ_iddr_r180_2;
	rd_data_f <= DQ_iddr_f0 when clk0_sel='1' else DQ_iddr_f180;


	P_RD_DATA : process( clk0 )
	begin
	if clk0'event and clk0='1' then
		if rst='1' then
			rd_data <= (others => '0');
		else
			rd_data <= rd_data_f & rd_data_r;
		end if;
	end if;
	end process;

end rtl;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产福利一区二区| 免费高清成人在线| 色网站国产精品| 有码一区二区三区| 欧美午夜免费电影| 喷水一区二区三区| 久久女同互慰一区二区三区| 国产**成人网毛片九色| **欧美大码日韩| 一本大道av一区二区在线播放| 亚洲欧美另类小说| 欧美精品高清视频| 国产在线精品国自产拍免费| 中文一区二区在线观看| 色天使久久综合网天天| 日韩国产精品久久久| 久久综合狠狠综合久久综合88| 风间由美一区二区av101 | 亚洲视频 欧洲视频| 欧美午夜精品久久久久久孕妇| 青娱乐精品视频在线| 亚洲国产精品传媒在线观看| 欧美自拍偷拍午夜视频| 麻豆高清免费国产一区| 中文字幕在线一区二区三区| 91精品免费在线| 成人午夜免费av| 五月婷婷激情综合网| 久久精品人人做| 欧美日韩一区不卡| 国产精品亚洲视频| 亚洲国产综合人成综合网站| 久久蜜桃一区二区| 欧美精品高清视频| 97久久超碰国产精品电影| 免费人成精品欧美精品| 一区二区在线观看免费视频播放| 91精品国产欧美一区二区18| 色综合久久中文字幕| 国产自产2019最新不卡| 亚洲国产中文字幕| 国产精品家庭影院| 久久久噜噜噜久久人人看| 欧美三级一区二区| aa级大片欧美| 国产999精品久久久久久绿帽| 亚洲大片免费看| 亚洲九九爱视频| 国产女人18毛片水真多成人如厕| 欧美久久一二三四区| 色综合夜色一区| 成人av在线网站| 久久成人麻豆午夜电影| 日韩激情视频在线观看| 一区二区三区在线免费视频| 欧美国产日韩亚洲一区| 亚洲精品一区二区三区99| 在线播放中文字幕一区| 欧美在线观看一二区| 99re免费视频精品全部| 国产suv精品一区二区883| 美女视频免费一区| 日本aⅴ精品一区二区三区 | 一区二区三区欧美激情| 中文字幕不卡的av| 欧美激情在线一区二区| 精品粉嫩aⅴ一区二区三区四区| 欧美精品在线观看播放| 精品视频一区二区三区免费| 91成人看片片| 色天使色偷偷av一区二区| 91影院在线免费观看| 99热这里都是精品| 99v久久综合狠狠综合久久| 大尺度一区二区| 成人国产免费视频| 99久久国产免费看| 色综合天天狠狠| 色综合久久综合网欧美综合网| av网站一区二区三区| 99精品桃花视频在线观看| www.色精品| 色噜噜狠狠色综合中国| 欧美在线三级电影| 欧美日本乱大交xxxxx| 欧美一区二区视频在线观看| 欧美大片日本大片免费观看| 久久欧美一区二区| 国产精品国产三级国产专播品爱网| 中文字幕中文乱码欧美一区二区| 中文字幕一区二区在线观看 | 欧美色图第一页| 91精品欧美综合在线观看最新| 欧美电影免费观看完整版| www激情久久| 中文字幕一区二区三区精华液| 亚洲欧美日韩一区| 亚洲国产婷婷综合在线精品| 日韩高清欧美激情| 精品一区二区三区影院在线午夜| 国产一区二区三区免费看 | 中文字幕一区二区视频| 亚洲欧美日韩国产手机在线| 日韩一区精品视频| 国产成人午夜高潮毛片| 日本道精品一区二区三区| 91精品午夜视频| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 中文字幕亚洲成人| 午夜免费久久看| 国产一区福利在线| 91久久久免费一区二区| 欧美一级二级三级乱码| 亚洲国产精品高清| 日本中文字幕一区二区视频| 国产.欧美.日韩| 51午夜精品国产| 中文字幕在线观看不卡| 青青国产91久久久久久| bt7086福利一区国产| 91精品国产麻豆国产自产在线 | 亚洲综合免费观看高清完整版 | 午夜伊人狠狠久久| 大白屁股一区二区视频| 在线不卡的av| 1024亚洲合集| 国产福利一区二区三区| 7777女厕盗摄久久久| 中文字幕综合网| 狠狠狠色丁香婷婷综合激情| 欧美三级视频在线观看| 国产精品高潮久久久久无| 久久精品理论片| 欧美日韩免费不卡视频一区二区三区 | 黄页视频在线91| 91豆麻精品91久久久久久| 国产欧美一区二区三区鸳鸯浴 | 欧美男生操女生| 亚洲欧洲三级电影| 国产毛片精品国产一区二区三区| 欧洲精品视频在线观看| 国产精品卡一卡二卡三| 极品少妇xxxx精品少妇| 欧美精品在线一区二区| 夜夜精品视频一区二区 | 性做久久久久久久免费看| 懂色av中文一区二区三区| 26uuu另类欧美| 久久综合综合久久综合| 91精品福利在线一区二区三区| 一区二区在线免费观看| 色综合天天天天做夜夜夜夜做| 国产日韩欧美一区二区三区乱码 | 久久99精品久久久久婷婷| 欧美日产在线观看| 一区二区三区四区激情| aaa国产一区| 国产精品久久久久影院亚瑟| 国产九色sp调教91| 久久久噜噜噜久久中文字幕色伊伊| 免费成人深夜小野草| 这里只有精品电影| 日韩国产精品大片| 日韩三级电影网址| 免费观看成人av| 精品少妇一区二区三区在线播放 | 日韩亚洲电影在线| 麻豆精品新av中文字幕| 精品欧美一区二区久久| 毛片av中文字幕一区二区| 日韩精品一区二| 国产一区二区三区精品视频| 久久久久综合网| 成人av电影在线| 亚洲丝袜美腿综合| 欧美中文字幕不卡| 亚洲不卡一区二区三区| 欧美一级片在线看| 久久99精品国产麻豆婷婷| 久久这里只精品最新地址| 国产精品911| 自拍偷拍亚洲欧美日韩| 欧美午夜一区二区三区| 蜜臀va亚洲va欧美va天堂| 2021中文字幕一区亚洲| 国产成人自拍在线| 亚洲免费高清视频在线| 欧美日韩精品二区第二页| 日本午夜一本久久久综合| 精品粉嫩超白一线天av| 暴力调教一区二区三区| 亚洲一区二区在线免费观看视频 | 欧美国产一区二区| 99国产精品一区| 日韩电影免费在线看| 国产亚洲欧美日韩俺去了| 91极品美女在线| 国产在线一区二区| 一区二区三区精密机械公司| 日韩精品一区二区三区四区|