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

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

?? recvresp.vhd

?? SD卡讀卡器模塊的VHDL及軟件驅動代碼
?? VHD
字號:
library IEEE;
use IEEE.std_logic_1164.all;
use WORK.pck_CRC7.all;

entity recvresp is
	port
	(
		clk:		in std_logic;	-- sd clk
		areset:		in std_logic;	-- async reset
		recv:		in std_logic;	-- recv response
		longresp:	in std_logic;	-- long response(136) /short(48)
		cmd:		in std_logic;	-- cmd port
		buzy:		out std_logic;	-- buzy receiving
		cmdno:		out std_logic_vector( 5 downto 0 ); -- response cmd number
		content:	out std_logic_vector( 126 downto 0 ); -- response content
---------- for debug ----------------
--		ocnt:		out integer range 0 to 126;
--		ocrc:		out std_logic_vector( 6 downto 0 );
-------------------------------------
		crcerr:		out std_logic	-- response crc error
	);
end recvresp;

architecture RTL of recvresp is
	
	type RR_STAT is
	(
		RR_IDLE,	-- idle, wait for recv signal
		RR_PRERECV,		-- wait for card responsing
		RR_PRERECVCMDNO,	-- pre-recv cmd number, only load counter
		RR_RECVCMDNO,		-- recv cmd number
		RR_PRERECVCONTENT,	-- pre-recv content(load counter and recv first bit)
		RR_RECVCONTENT,		-- recv content
		RR_PRECHECKCRC,		-- pre-check crc7(load counter and check first bit)
		RR_CHECKCRC,		-- check crc7
		RR_WAITFINISH,	-- wait for receiving response finished
		RR_SUCCESS,		-- received a correct response
		RR_WAITRECVEND -- wait for "recv" become low
	);
	
	signal stat:		RR_STAT;
	signal stat_next:	RR_STAT;
	signal cnt_q:		integer range 0 to 126;
	signal cnt_d:		integer range 0 to 126;
	signal contlen:		integer range 0 to 126; -- latch
	signal longresp_r:	std_logic;	-- latch
	signal cmdno_r:		std_logic_vector( 5 downto 0 ); -- latch
	signal content_r:	std_logic_vector( 126 downto 0 ); -- latch
	signal crcerr_r:	std_logic;	-- latch
	signal crc:			std_logic_vector( 6 downto 0 );
	signal crc_next:	std_logic_vector( 6 downto 0 );
	
begin
	
	Reg: process( clk, longresp )
	begin
		if( rising_edge( clk ) ) then
			longresp_r <= longresp;
		end if;
	end process Reg;
	
	Stat_P: process( clk, areset, stat_next )
	begin
		if( areset = '1' ) then
			stat <= RR_IDLE;
		elsif( rising_edge( clk ) ) then
			stat <= stat_next;
		end if;
	end process Stat_P;
	
	Stat_next_P: process( stat, recv, cmd, crc, cnt_q, longresp_r )
	begin
		case stat is
			
			when RR_IDLE =>
				if( recv = '1' ) then
					stat_next <= RR_PRERECV;
				else
					stat_next <= RR_IDLE;
				end if;
			
			when RR_PRERECV =>
				if( cmd = '0' ) then
					stat_next <= RR_PRERECVCMDNO;
				else
					stat_next <= RR_PRERECV;
				end if;
			
			when RR_PRERECVCMDNO =>
				stat_next <= RR_RECVCMDNO;
			
			when RR_RECVCMDNO =>
				if( cnt_q = 0 ) then
					stat_next <= RR_PRERECVCONTENT;
				else
					stat_next <= RR_RECVCMDNO;
				end if;
			
			when RR_PRERECVCONTENT =>
				stat_next <= RR_RECVCONTENT;
			
			when RR_RECVCONTENT =>
				if( cnt_q = 0 ) then
					if( longresp_r = '1' ) then
						stat_next <= RR_SUCCESS;
					else
						stat_next <= RR_PRECHECKCRC;
					end if;
				else
					stat_next <= RR_RECVCONTENT;
				end if;
			
			when RR_PRECHECKCRC =>
				if( crc(6) = cmd ) then
					stat_next <= RR_CHECKCRC;
				else
					stat_next <= RR_WAITFINISH;
				end if;
			
			when RR_CHECKCRC =>
				if( crc(cnt_q) = cmd ) then
					if( cnt_q = 0 ) then
						stat_next <= RR_SUCCESS;
					else
						stat_next <= RR_CHECKCRC;
					end if;
				else
					stat_next <= RR_WAITFINISH;
				end if;
			
			when RR_SUCCESS =>
				if( recv = '1' ) then
					stat_next <= RR_WAITRECVEND;
				else
					stat_next <= RR_IDLE;
				end if;
			
			when RR_WAITFINISH =>
				if( cnt_q = 0 ) then
					if( recv = '1' ) then
						stat_next <= RR_WAITRECVEND;
					else
						stat_next <= RR_IDLE;
					end if;
				else
					stat_next <= RR_WAITFINISH;
				end if;
			
			when RR_WAITRECVEND =>
				if( recv = '1' ) then
					stat_next <= RR_WAITRECVEND;
				else
					stat_next <= RR_IDLE;
				end if;
			
			when others =>
				stat_next <= RR_IDLE;
			
		end case;
	end process Stat_next_P;
	
	Contlen_P: process( clk, recv )
	begin
		if( rising_edge( clk ) ) then
			if( recv = '1' ) then
				if( longresp = '1' ) then
					contlen <= 127 - 1;
				else
					contlen <= 32 - 1;
				end if;
			else
				contlen <= contlen;
			end if;
		end if;
	end process Contlen_P;
	
	Cnt_q_P: process( clk, stat, contlen, cnt_d )
	begin
		if( rising_edge( clk ) ) then
			case stat is
				
				when RR_PRERECVCMDNO =>
					cnt_q <= 5;
				
				when RR_PRERECVCONTENT =>
					cnt_q <= contlen - 1;
				
				when RR_PRECHECKCRC =>
					cnt_q <= 6 - 1;
				
				when others =>
					cnt_q <= cnt_d;
				
			end case;
		end if;
	end process Cnt_q_P;
	
	Cnt_d_P: process( cnt_q )
	begin
		if( cnt_q > 0 ) then
			cnt_d <= cnt_q - 1;
		else
			cnt_d <= 0;
		end if;
	end process Cnt_d_P;
	
	Crc_P: process( clk, crc, crc_next )
	begin
		if( rising_edge( clk ) ) then
			case stat is
				
				when RR_PRERECV =>
					crc <= ( others => '0' );
				
				when RR_PRERECVCMDNO =>
					crc <= crc_next;
				
				when RR_RECVCMDNO =>
					crc <= crc_next;
				
				when RR_PRERECVCONTENT =>
					crc <= crc_next;
				
				when RR_RECVCONTENT =>
					crc <= crc_next;
				
				when others =>
					crc <= crc;
				
			end case;
		end if;
	end process Crc_P;
	
	Crc_next_P: process( crc, cmd )
	begin
		crc_next <= nextCRC7( cmd, crc );
	end process Crc_next_P;
	
	Buzy_P: process( stat )
	begin
		case stat is
			
			when RR_IDLE =>
				buzy <= '0';
			
			when RR_WAITRECVEND =>
				buzy <= '0';
			
			when others =>
				buzy <= '1';
			
		end case;
	end process Buzy_P;
	
	Output: process( clk, stat, cmdno_r, content_r, crcerr_r, cnt_q, cmd, contlen )
	begin
		if( rising_edge( clk ) ) then
			
			cmdno_r <= cmdno_r;
			content_r <= content_r;
			crcerr_r <= crcerr_r;
			
			case stat is
				
				when RR_PRERECV =>
					crcerr_r <= '1';
				
				when RR_RECVCMDNO =>
					cmdno_r( cnt_q ) <= cmd;
				
				when RR_PRERECVCONTENT =>
					content_r( contlen ) <= cmd;
				
				when RR_RECVCONTENT =>
					content_r( cnt_q ) <= cmd;
				
				when RR_SUCCESS =>
					crcerr_r <= '0';
				
				when others =>
				
			end case;
		end if;
	end process Output;
	
	cmdno <= cmdno_r;
	content <= content_r;
	crcerr <= crcerr_r;
	
---------- for debug ----------------
--	ocnt <= cnt_q;
--	ocrc <= crc;
-------------------------------------
	
end RTL;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜精品网| 亚洲电影你懂得| 欧美丝袜第三区| 一区二区三区**美女毛片| 蜜芽一区二区三区| 亚洲综合色丁香婷婷六月图片| 中文av字幕一区| 国产免费成人在线视频| 国产日韩成人精品| 亚洲欧洲日韩一区二区三区| 国产精品毛片a∨一区二区三区| 国产欧美日韩三级| 中文字幕亚洲不卡| 亚洲女人****多毛耸耸8| 一区二区三区91| 日韩在线一二三区| 国内精品国产成人国产三级粉色| 极品美女销魂一区二区三区| 国产一区二区三区四区在线观看| 国产成人精品亚洲777人妖 | 26uuu成人网一区二区三区| 日韩亚洲欧美一区| www欧美成人18+| 亚洲欧洲韩国日本视频| 亚洲综合999| 美女网站色91| 91在线精品秘密一区二区| 欧美综合天天夜夜久久| 在线综合视频播放| 欧美激情一区二区三区蜜桃视频| 日韩美女视频一区二区| 日日摸夜夜添夜夜添国产精品| 看片的网站亚洲| 97久久精品人人爽人人爽蜜臀| 欧美三区在线视频| 精品奇米国产一区二区三区| 国产精品私房写真福利视频| 亚洲午夜激情网站| 国产盗摄精品一区二区三区在线| 99v久久综合狠狠综合久久| 9191久久久久久久久久久| 久久综合久久综合九色| 一区二区三区四区精品在线视频| 久久国产精品第一页| 99久久er热在这里只有精品66| 在线91免费看| 伊人开心综合网| 国产精品888| 91精品国产色综合久久久蜜香臀| 国产精品福利影院| 激情综合五月婷婷| 欧美群妇大交群的观看方式| 国产精品嫩草久久久久| 久久99精品一区二区三区| 在线观看一区二区精品视频| 日本一二三四高清不卡| 精品午夜久久福利影院| 欧美亚洲图片小说| 亚洲婷婷在线视频| 国产69精品久久久久777| 日韩三级在线免费观看| 亚洲国产成人va在线观看天堂| 成人高清免费观看| 国产色91在线| 韩国成人福利片在线播放| 717成人午夜免费福利电影| 亚洲精选视频免费看| 成人激情电影免费在线观看| 久久九九久久九九| 久久99热狠狠色一区二区| 欧美另类videos死尸| 亚洲一区二区不卡免费| gogo大胆日本视频一区| 中文字幕乱码一区二区免费| 国产一区二区三区四区五区美女| 日韩三级中文字幕| 久久99热这里只有精品| 日韩欧美中文一区| 日韩av电影一区| 欧美一区二区三区四区五区| 首页欧美精品中文字幕| 欧美理论片在线| 毛片av一区二区| 日韩欧美成人一区| 国产一区91精品张津瑜| 久久精品亚洲国产奇米99| 国产精品综合一区二区三区| 日韩视频123| 国产精品丝袜91| 亚洲女女做受ⅹxx高潮| 亚洲超碰精品一区二区| 成人永久免费视频| 日韩视频永久免费| 一区二区三区波多野结衣在线观看| 美女在线视频一区| 欧美在线不卡一区| 亚洲欧洲制服丝袜| 欧美视频自拍偷拍| 欧美精品一卡两卡| 精品成a人在线观看| 久久青草国产手机看片福利盒子 | 亚洲综合色区另类av| 91麻豆精品国产91久久久久久久久 | 成av人片一区二区| 亚洲精品一卡二卡| 91精品国产入口| 丁香啪啪综合成人亚洲小说| 亚洲欧美激情小说另类| 欧美精品日韩精品| 国产精品一区在线观看乱码| 亚洲视频一二三| 欧美另类久久久品| 成人h版在线观看| 婷婷激情综合网| 欧美激情一区二区三区| 在线电影院国产精品| 国产成人高清在线| 亚洲va韩国va欧美va| 久久久国产精品麻豆| 91国偷自产一区二区开放时间 | 久久综合九色综合欧美就去吻| 国精产品一区一区三区mba桃花| 国产香蕉久久精品综合网| 色8久久人人97超碰香蕉987| 激情都市一区二区| 亚洲综合偷拍欧美一区色| 精品国产污网站| 欧美一区二区三区免费大片 | 国产亚洲成av人在线观看导航| 91麻豆免费观看| 国产老妇另类xxxxx| 亚洲高清免费在线| 亚洲欧美影音先锋| 国产日韩影视精品| 欧美电影精品一区二区| 在线观看欧美黄色| 懂色av一区二区三区免费看| 韩国中文字幕2020精品| 亚洲国产精品成人久久综合一区| 欧美疯狂性受xxxxx喷水图片| 亚洲国产精品久久一线不卡| 国产视频911| 精品久久久久99| 日韩一区二区三区精品视频| 欧美视频一区在线| 91小视频在线免费看| 国产老妇另类xxxxx| 韩国av一区二区三区| 另类小说图片综合网| 日韩av中文字幕一区二区| 亚洲一区二区影院| 亚洲精品视频免费看| 成人免费一区二区三区在线观看| 国产欧美日韩激情| 国产精品网站一区| 欧美国产日产图区| 国产精品网友自拍| 亚洲色图第一区| 亚洲人精品午夜| 亚洲综合999| 丝瓜av网站精品一区二区| 日韩福利电影在线观看| 免费成人在线影院| 婷婷久久综合九色综合绿巨人 | 久久精品一区四区| 久久亚洲综合色一区二区三区| 精品三级av在线| 久久综合九色综合欧美亚洲| 久久久国产精品午夜一区ai换脸| 久久久久国色av免费看影院| 国产精品三级电影| 亚洲欧美日韩系列| 视频一区欧美精品| 国内精品第一页| av在线不卡电影| 在线观看av一区二区| 欧美无人高清视频在线观看| 欧美精品第1页| 久久日一线二线三线suv| 国产免费成人在线视频| 亚洲精品伦理在线| 免费观看日韩电影| 99国产精品视频免费观看| 欧美视频三区在线播放| 日韩精品一区二区三区在线| 国产精品婷婷午夜在线观看| 亚洲一区二区综合| 日本vs亚洲vs韩国一区三区二区| 国产a区久久久| 欧洲一区二区av| 久久精品视频在线免费观看| 亚洲麻豆国产自偷在线| 免费在线视频一区| 99久久婷婷国产综合精品| 欧美一级片在线观看| 国产精品久久久久久久久果冻传媒| 午夜精品久久久久久久| 成人小视频免费观看| 91精品国产一区二区三区蜜臀| 国产日韩精品一区二区三区 |