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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? jtag_logic.vhd

?? USB下載線的vhdl程序,實現USB協議和JTAG接口的轉換,用狀態機實現的
?? VHD
字號:
-------------------------------------------------------------------------------
-- Serial/Parallel converter, interfacing JTAG chain with FTDI FT245BM
-------------------------------------------------------------------------------
-- Copyright (C) 2005-2007 Kolja Waschk, ixo.de
-------------------------------------------------------------------------------
-- This code is part of usbjtag. usbjtag is free software; you can redistribute
-- it and/or modify it under the terms of the GNU General Public License as
-- published by the Free Software Foundation; either version 2 of the License,
-- or (at your option) any later version. usbjtag is distributed in the hope
-- that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.  You should have received a
-- copy of the GNU General Public License along with this program in the file
-- COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin
-- St, Fifth Floor, Boston, MA  02110-1301  USA
-------------------------------------------------------------------------------

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;

ENTITY jtag_logic IS
	PORT
	(
		CLK : IN STD_LOGIC;        -- external 24/25 MHz oscillator
		nRXF : IN STD_LOGIC;       -- FT245BM nRXF
		nTXE : IN STD_LOGIC;       -- FT245BM nTXE
		B_TDO  : IN STD_LOGIC;     -- JTAG input: TDO, AS/PS input: CONF_DONE
		B_ASDO : IN STD_LOGIC;     -- AS input: DATAOUT, PS input: nSTATUS
		B_TCK  : BUFFER STD_LOGIC; -- JTAG output: TCK to chain, AS/PS DCLK
		B_TMS  : BUFFER STD_LOGIC; -- JTAG output: TMS to chain, AS/PS nCONFIG
		B_NCE  : BUFFER STD_LOGIC; -- AS output: nCE
		B_NCS  : BUFFER STD_LOGIC; -- AS output: nCS
		B_TDI  : BUFFER STD_LOGIC; -- JTAG output: TDI to chain, AS: ASDI, PS: DATA0
		B_OE   : BUFFER STD_LOGIC; -- LED output/output driver enable 
		nRD : OUT STD_LOGIC;       -- FT245BM nRD
		WR : OUT STD_LOGIC;        -- FT245BM WR
		D : INOUT STD_LOGIC_VECTOR(7 downto 0) -- FT245BM D[7..0]
	);
END jtag_logic;

ARCHITECTURE spec OF jtag_logic IS

	-- There are exactly 16 states. If this is encoded using 4 bits, there will
	-- be no unknown/undefined state. The host will send us 64 times "0" to move
	-- the state machine to a known state. We don't need a power-on reset.
	
	TYPE states IS
	(
		wait_for_nRXF_low,
		set_nRD_low,
		keep_nRD_low,
		latch_data_from_host,
		set_nRD_high,
		bits_set_pins_from_data,
		bytes_set_bitcount,
		bytes_get_tdo_set_tdi,
		bytes_clock_high_and_shift,
		bytes_keep_clock_high,
		bytes_clock_finish,
		wait_for_nTXE_low,
		set_WR_high,
		output_enable,
		set_WR_low,
		output_disable
	);
	
	ATTRIBUTE ENUM_ENCODING: STRING;
	ATTRIBUTE ENUM_ENCODING OF states: TYPE IS 
	  "0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111";
	
	SIGNAL carry: STD_LOGIC;
	SIGNAL do_output: STD_LOGIC;
	SIGNAL ioshifter: STD_LOGIC_VECTOR(7 DOWNTO 0);
	SIGNAL bitcount: STD_LOGIC_VECTOR(8 DOWNTO 0);
	SIGNAL state, next_state: states;
	
BEGIN
	sm: PROCESS(CLK, nRXF, nTXE, state, bitcount, ioshifter, do_output)

	BEGIN
		CASE state IS
		
			-- ============================ INPUT
		
			WHEN wait_for_nRXF_low =>
				IF nRXF='0' THEN
					next_state <= set_nRD_low;
				ELSE
					next_state <= wait_for_nRXF_low;
				END IF;
				
			WHEN set_nRD_low =>
				next_state <= keep_nRD_low;
			
			WHEN keep_nRD_low => 
				next_state <= latch_data_from_host;
				
			WHEN latch_data_from_host =>
				next_state <= set_nRD_high;
			
			WHEN set_nRD_high =>
				IF NOT (bitcount(8 DOWNTO 3) = "000000") THEN
					next_state <= bytes_get_tdo_set_tdi;
				ELSIF ioshifter(7) = '1' THEN
					next_state <= bytes_set_bitcount;
				ELSE
					next_state <= bits_set_pins_from_data;
				END IF;
			
			WHEN bytes_set_bitcount =>
				next_state <= wait_for_nRXF_low;
			
			-- ============================ BIT BANGING
				
			WHEN bits_set_pins_from_data =>
				IF ioshifter(6) = '0' THEN
					next_state <= wait_for_nRXF_low; -- read next byte from host
				ELSE
					next_state <= wait_for_nTXE_low; -- output byte to host
				END IF;
				
			-- ============================ BYTE OUTPUT (SHIFT OUT 8 BITS)
			
			WHEN bytes_get_tdo_set_tdi =>
				next_state <= bytes_clock_high_and_shift;
			
			WHEN bytes_clock_high_and_shift =>
				next_state <= bytes_keep_clock_high;
				
			WHEN bytes_keep_clock_high =>
				next_state <= bytes_clock_finish;
				
			WHEN bytes_clock_finish =>
				IF NOT (bitcount(2 DOWNTO 0) = "111") THEN
					next_state <= bytes_get_tdo_set_tdi; -- clock next bit
				ELSIF do_output = '1' THEN
					next_state <= wait_for_nTXE_low; -- output byte to host
				ELSE
					next_state <= wait_for_nRXF_low; -- read next byte from host
				END IF;
			
			-- ============================ OUTPUT BYTE TO HOST
			
			WHEN wait_for_nTXE_low =>
				IF nTXE = '0' THEN
					next_state <= set_WR_high;
				ELSE
					next_state <= wait_for_nTXE_low;
				END IF;
				
			WHEN set_WR_high =>
				next_state <= output_enable;
				
			WHEN output_enable =>
				next_state <= set_WR_low;
				
			WHEN set_WR_low =>
				next_state <= output_disable;
			
			WHEN output_disable =>
				next_state <= wait_for_nRXF_low; -- read next byte from host
				
			WHEN OTHERS => 
				next_state <= wait_for_nRXF_low;
				
		END CASE;
	END PROCESS sm;

	out_sm: PROCESS(CLK, state, ioshifter, B_TDO, bitcount, carry)

	BEGIN
		IF CLK = '1' AND CLK'event THEN
			
			IF state = set_nRD_low OR state = keep_nRD_low OR state = latch_data_from_host THEN
				nRD <= '0';
			ELSE
				nRD <= '1';
			END IF;
			
			IF state = latch_data_from_host THEN
				ioshifter(7 DOWNTO 0) <= D;
			END IF;
			
			IF state = set_WR_high OR state = output_enable THEN
				WR <= '1';
			ELSE
				WR <= '0';
			END IF;
			
			IF state = output_enable OR state = set_WR_low THEN
				D <= ioshifter(7 DOWNTO 0);
			ELSE
				D <= "ZZZZZZZZ";	
			END IF;
			
			IF state = bits_set_pins_from_data THEN
				B_TCK <= ioshifter(0);
				B_TMS <= ioshifter(1);
				B_NCE <= ioshifter(2);
				B_NCS <= ioshifter(3);
				B_TDI <= ioshifter(4);
				B_OE  <= ioshifter(5);
				ioshifter <= "000000" & B_ASDO & B_TDO;
			END IF;
			
			IF state = bytes_set_bitcount THEN
				bitcount <= ioshifter(5 DOWNTO 0) & "111";
				do_output <= ioshifter(6);
			END IF;
			
			IF state = bytes_get_tdo_set_tdi THEN
				IF B_NCS = '1' THEN
					carry <= B_TDO; -- JTAG mode (nCS=1)
				ELSE
					carry <= B_ASDO; -- Active Serial mode (nCS=0)
				END IF;
				B_TDI <= ioshifter(0);
				bitcount <= bitcount - 1;
			END IF;
			
			IF state = bytes_clock_high_and_shift OR state = bytes_keep_clock_high THEN
				B_TCK <= '1';
			END IF;
			
			IF state = bytes_clock_high_and_shift THEN
				ioshifter <= carry & ioshifter(7 DOWNTO 1);
			END IF;
			
			IF state = bytes_clock_finish THEN
				B_TCK <= '0';
			END IF;
		
			state <= next_state;
			
		END IF;
	END PROCESS out_sm;
	
END spec;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品三级av在线播放| 黄色小说综合网站| 国产精品美女久久久久高潮| 精品精品国产高清一毛片一天堂| 在线欧美小视频| 欧美亚洲综合久久| 色乱码一区二区三区88| 精品视频色一区| 欧美性大战久久| 制服.丝袜.亚洲.中文.综合| 91精品国产乱码久久蜜臀| 91精品国产色综合久久不卡蜜臀 | 不卡大黄网站免费看| 国产精品一区二区黑丝| 国产成人aaa| 91色视频在线| 亚洲成在人线在线播放| 午夜伊人狠狠久久| 亚洲国产视频直播| 日日夜夜精品免费视频| 久久精品72免费观看| 国模少妇一区二区三区| www.欧美精品一二区| 精品视频在线免费观看| 日韩一区二区影院| 欧美国产日韩一二三区| 亚洲免费成人av| 美女国产一区二区| 成人午夜精品一区二区三区| 在线亚洲一区观看| 精品国产乱码久久久久久闺蜜 | 国产高清亚洲一区| 国产69精品久久久久毛片| 97se亚洲国产综合自在线观| 欧美另类久久久品| 国产精品网友自拍| 日韩黄色小视频| 成人av免费在线| 日韩午夜激情视频| 日韩精品色哟哟| 欧美探花视频资源| 精品少妇一区二区三区免费观看| 国产亚洲欧美日韩俺去了| 亚洲免费观看高清在线观看| 久久疯狂做爰流白浆xx| 色综合久久久久久久| 精品精品国产高清a毛片牛牛| 中文字幕一区二区三区色视频 | 欧美日韩精品久久久| 欧美一级电影网站| 一区二区三区在线视频播放| 精品在线你懂的| 欧美日韩亚洲综合一区二区三区| 久久一二三国产| 免费在线观看日韩欧美| 欧美视频一区在线| 国产精品盗摄一区二区三区| 国产在线精品一区在线观看麻豆| 国产三级精品三级在线专区| 欧美日韩一区二区三区四区| 国产视频一区二区三区在线观看| 亚洲成人一区在线| 色婷婷综合久久| 国产欧美一区二区三区网站| 激情综合亚洲精品| 精品国产乱码久久久久久老虎 | 欧美日韩中文字幕一区| 中文字幕在线观看不卡| 国产69精品久久777的优势| 日韩免费看的电影| 日本成人中文字幕| 欧美久久久久久蜜桃| 亚洲妇女屁股眼交7| 欧美综合天天夜夜久久| 亚洲三级在线免费观看| 暴力调教一区二区三区| 成人欧美一区二区三区在线播放| 成人手机电影网| 国产色91在线| 亚洲啪啪综合av一区二区三区| 成人h动漫精品一区二区| 久久九九影视网| 成人影视亚洲图片在线| 国产日韩v精品一区二区| 国产高清在线观看免费不卡| 国产精品另类一区| 高清在线观看日韩| 中文字幕一区二区三中文字幕 | 亚洲男同1069视频| 欧美在线免费观看亚洲| 亚洲sss视频在线视频| 欧美一区二区三区思思人| 狠狠色2019综合网| 国产欧美日韩精品一区| 99在线精品免费| 午夜精品久久久久久久蜜桃app| 91精品国产色综合久久不卡电影| 蜜桃久久久久久| 国产精品久久久久久久久久免费看| 91蜜桃在线免费视频| 亚洲第一会所有码转帖| 精品国产99国产精品| va亚洲va日韩不卡在线观看| 亚洲国产cao| 国产午夜亚洲精品不卡| 色婷婷av一区| 蜜桃在线一区二区三区| 欧美国产日本韩| 欧美久久一区二区| 国内精品国产成人国产三级粉色| 亚洲欧美激情一区二区| 欧美一二三区在线| 成人成人成人在线视频| 石原莉奈一区二区三区在线观看| 精品国产91乱码一区二区三区| gogogo免费视频观看亚洲一| 丝袜国产日韩另类美女| 国产精品久久久爽爽爽麻豆色哟哟 | 国产一区二区三区免费观看| 国产午夜亚洲精品不卡| 91黄色激情网站| 久久99久久精品| 亚洲午夜精品17c| 中文字幕在线免费不卡| 日韩视频免费直播| 欧美性生交片4| 99精品视频中文字幕| 亚洲成人免费看| 亚洲欧美在线视频观看| 欧美一区中文字幕| 91麻豆福利精品推荐| 国产夫妻精品视频| 免费观看在线综合色| 亚洲午夜激情av| 亚洲欧美自拍偷拍| 日本一区二区三区四区 | 欧美videossexotv100| 色94色欧美sute亚洲13| 成人v精品蜜桃久久一区| 黑人精品欧美一区二区蜜桃 | 日韩欧美国产高清| 亚洲激情欧美激情| 中文字幕乱码日本亚洲一区二区 | 久久成人综合网| 日日摸夜夜添夜夜添国产精品| 国产精品夫妻自拍| 国产精品欧美久久久久一区二区| 欧美电视剧在线看免费| 日韩一区二区三区在线视频| 欧美三级在线看| 在线观看成人免费视频| 色综合天天做天天爱| 成人动漫精品一区二区| 国产高清成人在线| 粉嫩欧美一区二区三区高清影视| 国产在线精品国自产拍免费| 韩国午夜理伦三级不卡影院| 国产呦精品一区二区三区网站| 精品无人区卡一卡二卡三乱码免费卡| 日韩专区欧美专区| 日韩不卡一二三区| 麻豆成人久久精品二区三区小说| 免费观看久久久4p| 国产精品一区二区男女羞羞无遮挡 | 欧美又粗又大又爽| 在线观看日产精品| 3d动漫精品啪啪一区二区竹菊| 7777精品伊人久久久大香线蕉的| 91麻豆精品国产91久久久资源速度| 91精品国产一区二区三区蜜臀| 欧美一区二区三区四区视频| 久久老女人爱爱| 亚洲视频在线观看一区| 亚洲成av人片在线| 韩国中文字幕2020精品| jizzjizzjizz欧美| 欧美日韩亚洲综合| 久久亚洲一区二区三区明星换脸| 欧美国产精品久久| 亚洲mv在线观看| 国产高清不卡一区二区| 91色乱码一区二区三区| 日韩写真欧美这视频| 国产欧美一区二区在线| 亚洲第一精品在线| 成人高清视频免费观看| 欧美日韩在线精品一区二区三区激情| 精品久久久久久无| 亚洲欧美色一区| 国产一二三精品| 色噜噜久久综合| 久久精品亚洲麻豆av一区二区| 亚洲一区二区影院| 国产麻豆视频一区二区| 欧美在线综合视频| 国产精品理伦片| 激情综合网天天干| 欧美亚洲一区三区| 中文一区一区三区高中清不卡| 日本不卡123|