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

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

?? atacntl.vhd

?? 這是一個基于FPGA的CF卡讀寫程序
?? VHD
?? 第 1 頁 / 共 3 頁
字號:
			ddIn				=> ddIn,
			ddOut				=> ddOut,
			ddOutEnbl		=> ddOutEnbl,
			intrq				=> intrq,
			dmack_n			=> dmack_n
		);

	-----------------------------------------------------------
	-- attach some internal signals to the host and disk ports 
	-----------------------------------------------------------

	hdOut		<= pioDOut;
	status	<= status_r;

	-----------------------------------------------------------
	-- compute the next state and outputs 
	-----------------------------------------------------------

	combinatorial: process(state_r,rd,wr,head,cylinder,sector,hDIn,cmd_r,pioDOut,
													status_r,pioBusy,wordCnt_r,rtnState_r)
	begin

		-----------------------------------------------------------
		-- setup default values for signals 
		-----------------------------------------------------------

		done				<= NO;
		pioRd				<= NO;
		pioWr				<= NO;
		pioDIn			<= (others=>'0');
		pioAddr			<= (others=>'0');
		state_x			<= state_r;
		rtnState_x	<= rtnState_r;
		cmd_x				<= cmd_r;
		wordCnt_x		<= wordCnt_r;
		status_x		<= status_r;

		if(pioBusy = NO) then

			-----------------------------------------------------------
			-- compute the next state and outputs 
			-----------------------------------------------------------

			case state_r is

			-----------------------------------------------------------------
			-- set and then clear the reset bit in the disk control register
			-----------------------------------------------------------------				
			when RESET_DRIVE =>
				pioWr <= YES;
				pioAddr <= CONTROL_REG;
				pioDIn(7 downto 0) <= DRIVE_RESET_CMD;
				state_x <= RESET_DRIVE_1;
			when RESET_DRIVE_1 =>
				pioWr <= YES;
				pioAddr <= CONTROL_REG;
				pioDIn(7 downto 0) <= DRIVE_RELEASE_CMD;
				state_x <= WAIT_FOR_NOT_BUSY;	-- wait for the drive to go non-busy after reset

			-----------------------------------------------------------------
			-- abort the current command by issuing a NOP command
			-----------------------------------------------------------------				
			when ABORT_1 =>
				pioWr <= YES;
				pioAddr <= CMD_REG;
				pioDIn(7 downto 0) <= NOP_CMD;
				state_x <= WAIT_FOR_NOT_BUSY;
				rtnState_x <= WAIT_FOR_CMD;

			-----------------------------------------------------------------
			-- wait for the busy bit in the disk status register to clear
			-----------------------------------------------------------------				
			when WAIT_FOR_NOT_BUSY =>
				pioRd <= YES;
				pioAddr <= STATUS_REG;
				state_x <= WAIT_FOR_NOT_BUSY_1;
			when WAIT_FOR_NOT_BUSY_1 =>
				if(pioDOut(STATUS_REG_BSY) = YES) then
					state_x <= WAIT_FOR_NOT_BUSY;	-- busy bit not clear so check it again
				else
					state_x <= rtnState_r;				-- pop the state registers
				end if;

			-----------------------------------------------------------------
			-- wait for a read or write sector command
			-----------------------------------------------------------------				
			when WAIT_FOR_CMD =>
				if(rd = YES) then
					-- read a sector of the disk
					wordCnt_x <= SECTOR_SIZE-1;	-- set number of words to read from sector
					cmd_x <= READ_SECTOR_CMD;		-- command for rading a sector
					state_x <= SETUP_DRIVE;			-- setup the disk registers for reading the sector
					rtnState_x <= READ_WORDS;
				elsif(wr = YES) then
					-- write a sector of the disk
					wordCnt_x <= SECTOR_SIZE-1;	-- set number of words to write to sector
					cmd_x <= WRITE_SECTOR_CMD;	-- command for writing a sector
					state_x <= SETUP_DRIVE;			-- setup the disk registers for writing the sector
					rtnState_x <= WRITE_WORDS;
				else
					-- no operation requested
					state_x <= WAIT_FOR_CMD;		-- keep waiting for a R/W command
				end if;

			-----------------------------------------------------------------
			-- setup the disk to read or write a sector
			-----------------------------------------------------------------				
			when SETUP_DRIVE =>
				-- load the sector count register with 1 since only a single sector will be read/written
				pioWr <= YES;
				pioAddr <= SECTOR_CNT_REG;
				pioDIn <= TO_UNSIGNED(1,pioDIn'length);
				state_x <= SETUP_DRIVE_1;
			when SETUP_DRIVE_1 =>
				-- load the number of the sector that will be read/written
				pioWr <= YES;
				pioAddr <= SECTOR_REG;
				pioDIn(7 downto 0) <= sector;
				state_x <= SETUP_DRIVE_2;
			when SETUP_DRIVE_2 =>
				-- load the number of the cylinder that contains the desired sector
				pioWr <= YES;
				pioAddr <= CYL_LOW_REG;
				pioDIn(7 downto 0) <= cylinder(7 downto 0);
				state_x <= SETUP_DRIVE_3;
			when SETUP_DRIVE_3 =>
				pioWr <= YES;
				pioAddr <= CYL_HIGH_REG;
				pioDIn(7 downto 0) <= cylinder(15 downto 8);
				state_x <= SETUP_DRIVE_4;
			when SETUP_DRIVE_4 =>
				-- load the number of the head that accesses the desired cylinder
				pioWr <= YES;
				pioAddr <= DRIVE_HEAD_REG;
				pioDIn(7 downto 0) <= "1010" & head;
				state_x <= SETUP_DRIVE_5;
			when SETUP_DRIVE_5 =>
				-- load the command (read sector or write sector)
				pioWr <= YES;
				pioAddr <= CMD_REG;
				pioDIn(cmd_r'range) <= cmd_r;
				state_x <= rtnState_r;

			-----------------------------------------------------------------
			-- write data to the disk sector
			-----------------------------------------------------------------				
			when WRITE_WORDS =>
				state_x <= WAIT_FOR_NOT_BUSY;
				rtnState_x <= WRITE_WORDS_1;
			when WRITE_WORDS_1 =>
				-- check the data request bit to see if the sector is ready for read/write ops
				if(pioDOut(STATUS_REG_DRQ) = YES) then
					state_x <= WRITE_WORDS_2;	-- if ready, then write sector state
				elsif(pioDOut(STATUS_REG_ERR) = YES) then
					status_x(ERROR_FLAG) <= YES;	-- tell the host there was an error
					state_x <= ERROR;
				else
					-- data not ready, so read status again
					pioRd <= YES;
					pioAddr <= STATUS_REG;
					state_x <= WRITE_WORDS_1;
				end if;
			when WRITE_WORDS_2 =>
				-- write another word to the disk each time the write control is high
				if(wr = YES) then
					pioWr <= YES;
					pioAddr <= DATA_REG;
					pioDIn <= hDIn;
					state_x <= WRITE_WORDS_3;
				else
					state_x <= WRITE_WORDS_2;	-- halt writes to disk when wr is inactive
				end if;
			when WRITE_WORDS_3 =>
				done <= YES;	-- tell the host this word has been written to disk
				if(wordCnt_r = 0) then
					-- return and wait for another command if the entire sector has been written
					state_x <= WRITE_WORDS_4;
				else
					-- otherwise, write the next word to the disk
					wordCnt_x <= wordCnt_r - 1;
					state_x <= WRITE_WORDS_2;
				end if; 
			when WRITE_WORDS_4 =>
				if(pioIntrq = YES) then
					pioRd <= YES;
					pioAddr <= STATUS_REG;
					state_x <= WAIT_FOR_CMD;
				else
					state_x <= WRITE_WORDS_4;
				end if;

			-----------------------------------------------------------------
			-- read data from the disk sector
			-----------------------------------------------------------------				
			when READ_WORDS =>
				if(pioIntrq = YES) then
					pioRd <= YES;
					pioAddr <= STATUS_REG;
					state_x <= READ_WORDS_1;
				else
					state_x <= READ_WORDS;
				end if;
			when READ_WORDS_1 =>
				-- read another word from the disk each time the read control is high
				if(rd = YES) then
					pioRd <= YES;
					pioAddr <= DATA_REG;
					state_x <= READ_WORDS_2;
				else
					state_x <= READ_WORDS_1;	-- halt reads from disk when rd is inactive
				end if;
			when READ_WORDS_2 =>
				done <= YES;	-- tell the host a word has been read and is available
				if(wordCnt_r = 0) then
					-- return and wait for another command if the entire sector has been read
					state_x <= WAIT_FOR_CMD;
				else
					-- otherwise, read the next word from the disk
					wordCnt_x <= wordCnt_r - 1;
					state_x <= READ_WORDS_1;
				end if; 

			-----------------------------------------------------------------
			-- error state.  Requires a reset to leave this state
			-----------------------------------------------------------------				
			when ERROR =>
				status_x(ERROR_FLAG) <= YES;
				state_x <= ERROR;

			-----------------------------------------------------------------
			-- unknown state.  Go to the error state
			-----------------------------------------------------------------				
			when others =>
				status_x(ERROR_FLAG) <= YES;
				state_x <= ERROR;

			end case;
		end if;
	end process combinatorial;


	-----------------------------------------------------------
	-- update registers on the appropriate clock edge	
	-----------------------------------------------------------

	update: process(rst,clk)
	begin

		if rst = YES then
			-- asynchronous reset
			state_r				<= RESET_DRIVE;		-- upon reset, reset the drive
			rtnState_r		<= WAIT_FOR_CMD;	-- and then wait for read/write commands
			cmd_r					<= (others=>'0');
			wordCnt_r			<= (others=>'0');
			status_r			<= (others=>'0');	-- clear the status register
		elsif clk'event and clk='1' then
			if(abort = YES) then
				-- abort a read or write sector command and go back to wait for another command
				state_r			<= ABORT_1;
			else
				state_r			<= state_x;
			end if;
			rtnState_r		<= rtnState_x;
			cmd_r					<= cmd_x;
			wordCnt_r			<= wordCnt_x;
			status_r			<= status_x;
		end if;

	end process update;

end arch;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩亚洲欧美一区| 在线观看日韩毛片| 久久亚洲影视婷婷| 国产综合一区二区| 国产午夜精品理论片a级大结局| 九九视频精品免费| 亚洲国产精品高清| 91在线视频官网| 亚洲成人自拍偷拍| 久久夜色精品国产噜噜av | 三级成人在线视频| 日韩欧美美女一区二区三区| 国产麻豆日韩欧美久久| 国产精品久线观看视频| 欧美午夜精品一区二区三区| 天天综合天天综合色| 精品国产免费视频| 成人教育av在线| 亚洲成年人影院| 亚洲综合在线观看视频| 中文字幕中文字幕在线一区 | 午夜欧美在线一二页| 欧美一区二区三区啪啪| 欧美日韩成人综合在线一区二区| 午夜精品久久久久久久蜜桃app| 日韩欧美国产一区在线观看| 成人夜色视频网站在线观看| 亚洲影院在线观看| 久久久久久毛片| 欧美日韩中文字幕一区| 免费在线一区观看| 亚洲女同ⅹxx女同tv| 欧美一级在线观看| 色美美综合视频| 国产一区二区在线影院| 玉米视频成人免费看| 精品欧美久久久| 91成人免费电影| 风间由美性色一区二区三区| 婷婷开心激情综合| 亚洲丝袜另类动漫二区| 日韩视频永久免费| 在线视频国产一区| 成人免费高清在线| 久久国产成人午夜av影院| 亚洲精品日产精品乱码不卡| 久久日韩粉嫩一区二区三区| 欧美日韩在线播| av日韩在线网站| 国产福利视频一区二区三区| 蜜臀av亚洲一区中文字幕| 亚洲美女一区二区三区| 欧美激情综合五月色丁香| 欧美一区二区啪啪| 欧美天堂亚洲电影院在线播放| 福利电影一区二区| 国产自产v一区二区三区c| 天天色综合天天| 一区二区三区在线观看欧美| 国产精品蜜臀av| 久久精品亚洲乱码伦伦中文| 欧美一级免费观看| 欧美日本国产视频| 欧美色视频在线观看| 99久久精品国产观看| 粉嫩一区二区三区在线看| 国产一区视频导航| 国内精品久久久久影院一蜜桃| 青青草97国产精品免费观看 | 亚洲无人区一区| 亚洲欧美日韩国产手机在线| 国产精品成人在线观看| 国产精品免费视频观看| 中文字幕欧美国产| 亚洲国产精品二十页| 国产精品系列在线| 国产欧美视频一区二区三区| 久久午夜免费电影| 久久先锋影音av鲁色资源| 久久精品日韩一区二区三区| 国产色产综合产在线视频| 久久久激情视频| 国产欧美一区二区三区在线看蜜臀| 久久欧美一区二区| 欧美激情一区二区在线| 国产精品久久二区二区| 亚洲人成网站影音先锋播放| 亚洲最新视频在线观看| 亚洲不卡在线观看| 奇米精品一区二区三区四区| 韩国中文字幕2020精品| 国产精品综合一区二区三区| 成熟亚洲日本毛茸茸凸凹| 9l国产精品久久久久麻豆| 色婷婷久久久综合中文字幕| 欧美日韩国产一级| 日韩一区二区三| 国产丝袜欧美中文另类| 中文字幕一区二区三区在线观看 | 日本精品裸体写真集在线观看| 91福利精品视频| 欧美一二三在线| 国产日韩精品一区二区三区| 中文字幕一区二区三区在线不卡 | 欧美在线free| 日韩视频免费观看高清完整版| 久久亚洲影视婷婷| 一色桃子久久精品亚洲| 视频一区二区中文字幕| 国产精品资源在线看| jvid福利写真一区二区三区| 欧美午夜精品电影| 欧美成人高清电影在线| 一区在线中文字幕| 久色婷婷小香蕉久久| 97精品电影院| 日韩欧美一二区| 亚洲欧美日韩一区二区| 韩国成人福利片在线播放| 色综合久久综合| 久久午夜国产精品| 性做久久久久久久免费看| 国产91精品欧美| 欧美一区二区在线观看| 最新国产成人在线观看| 久久精品国产久精国产爱| 日本精品免费观看高清观看| 久久久久97国产精华液好用吗| 亚洲观看高清完整版在线观看| 国产精品123| 欧美一区二区福利在线| 亚洲三级在线观看| 国产黄人亚洲片| 欧美一区二区日韩| 亚洲一区二区三区视频在线播放| 国产精品99久久久久| 3d成人h动漫网站入口| 亚洲精品v日韩精品| 成人永久aaa| 久久免费午夜影院| 日韩主播视频在线| 在线观看成人免费视频| 国产精品女主播av| 精品无码三级在线观看视频| 欧美日韩精品福利| 亚洲靠逼com| 成人网在线播放| 久久精品男人的天堂| 精品在线观看视频| 日韩色视频在线观看| 五月婷婷激情综合| 欧美唯美清纯偷拍| 亚洲永久免费av| 亚洲成av人片在线观看无码| 91网站最新网址| 久久夜色精品一区| 免费观看成人av| 欧美精品日韩综合在线| 亚洲精品自拍动漫在线| www.欧美精品一二区| 中文字幕欧美日本乱码一线二线 | 欧美精品乱码久久久久久按摩| 日韩美女啊v在线免费观看| 成人黄色av电影| 国产精品视频一区二区三区不卡| 国产精品一线二线三线精华| 精品少妇一区二区三区日产乱码| 美女脱光内衣内裤视频久久影院| 欧美精品色一区二区三区| 午夜精品视频一区| 日韩视频在线永久播放| 美国av一区二区| 久久精品视频一区二区三区| 国产成人免费视频一区| 日韩欧美视频一区| 尤物视频一区二区| 欧洲精品中文字幕| 亚洲电影视频在线| 538在线一区二区精品国产| 99re6这里只有精品视频在线观看| 久久青草欧美一区二区三区| 国产成人亚洲精品狼色在线| 欧美国产在线观看| 99久久精品免费观看| 亚洲综合另类小说| 日韩三级免费观看| 国产乱码精品一区二区三| 国产精品毛片久久久久久| 91亚洲午夜精品久久久久久| 一区二区三区中文在线| 欧美精品丝袜中出| 国产资源精品在线观看| 国产精品久久久久久久久久久免费看| 97久久精品人人澡人人爽| 亚洲成av人片在线| 国产情人综合久久777777| 色欧美日韩亚洲| 秋霞av亚洲一区二区三| 国产精品美女久久久久久久久久久| 91福利精品第一导航|