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

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

?? memtest.vhd

?? 這是一個基于FPGA的CF卡讀寫程序
?? VHD
字號:
library IEEE;					 
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use WORK.common.all;
use WORK.rand.all;


package mem is

	component memTest
	generic(
		DATA_WIDTH: natural := 16;				-- memory data width
		ADDR_WIDTH: natural := 23;				-- memory address width
		BEG_TEST: natural := 0;						-- beginning test range address
		END_TEST: natural := 8_388_607;		-- ending test range address
		STEP_SIZE: natural := 1						-- address increment
	);
	port(
		clk: in std_logic;													-- master clock input
		rst: in std_logic;													-- active-high reset
		done: in std_logic;													-- memory operation complete indicator
		dIn: in unsigned(DATA_WIDTH-1 downto 0);		-- data from memory
		rd: out std_logic;													-- memory read control signal
		wr: out std_logic;													-- memory write control signal
		abort: out std_logic;												-- read/write sector abort
		addr: out unsigned(ADDR_WIDTH-1 downto 0);	-- address to memory
		dOut: out unsigned(DATA_WIDTH-1 downto 0);	-- data to memory
		progress: out std_logic_vector(1 downto 0);	-- memory test progress indicator
		errbits: out unsigned(DATA_WIDTH-1 downto 0);	-- data bits with errors
		err: out std_logic													-- memory error flag
	);
	end component;

end package mem;


library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use WORK.common.all;
use WORK.rand.all;

entity memTest is
	generic(
		DATA_WIDTH: natural := 16;				-- memory data width
		ADDR_WIDTH: natural := 23;				-- memory address width
		BEG_TEST: natural := 0;						-- beginning test range address
		END_TEST: natural := 8_388_607;		-- ending test range address
		STEP_SIZE: natural := 1						-- address increment
	);
	port(
		clk: in std_logic;													-- master clock input
		rst: in std_logic;													-- active-high reset
		done: in std_logic;													-- memory operation complete indicator
		dIn: in unsigned(DATA_WIDTH-1 downto 0);		-- data from memory
		rd: out std_logic;													-- memory read control signal
		wr: out std_logic;													-- memory write control signal
		abort: out std_logic;												-- read/write sector abort
		addr: out unsigned(ADDR_WIDTH-1 downto 0);	-- address to memory
		dOut: out unsigned(DATA_WIDTH-1 downto 0);	-- data to memory
		progress: out std_logic_vector(1 downto 0);	-- memory test progress indicator
		errbits: out unsigned(DATA_WIDTH-1 downto 0);	-- data bits with errors
		err: out std_logic													-- memory error flag
	);
end memTest;

architecture arch of memTest is
	
	-- states of the memory tester state machine
	type testState is (
		INIT,			-- init
		LOAD,			-- load memory with pseudo-random data
		COMPARE,	-- compare memory contents with pseudo-random data
		STOP			-- stop and indicate memory status
	);
	signal state_r, state_next: testState;					-- state register and next state

	-- registers
	signal addr_r, addr_next: unsigned(addr'range);	-- address register
	signal err_r, err_next: std_logic;							-- error flag
	signal errcnt_r, errcnt_next: unsigned(addr'high+1 downto 0);	-- error counter
	signal errbits_r, errbits_next: unsigned(errbits'range);	-- records data bits with errors
	signal cnt_r, cnt_next: unsigned(dOut'range);	-- error counter

	-- internal signals
	signal ld: std_logic;								-- load random number gen with seed value
	signal cke: std_logic;							-- clock-enable for random number gen
	signal rand: unsigned(dOut'range);	-- random number from generator
	signal seed: unsigned(dIn'range);		-- random number starting seed
	constant mask: unsigned(dOut'range) := "1111111111111111";	-- comparison mask
	constant errthreshold: integer := 0;	-- error threshold
	constant addr_mask: unsigned(addr'range) := TO_UNSIGNED(16#FF#,addr'length);
	
begin

	seed <= (others=>'1');	-- random number seed is 111...111
--	seed <= TO_UNSIGNED(65535,16);
	
	-- random number generator module
	u0: randGen
	generic map(
		DATA_WIDTH => DATA_WIDTH
	)
	port map(
		clk=>clk,		-- input clock
		cke=>cke,		-- clock-enable to control when new random num is computed
		ld=>ld,			-- load seed control signal
		seed=>seed,	-- random number seed
		rand=>rand	-- random number output from generator
	);

	-- connect internal registers to external busses	
	addr <= addr_r;		-- memory address bus driven by memory address register
--	dOut <= cnt_r;			-- always output the current random number to the memory
	dOut <= rand;			-- always output the current random number to the memory
	err <= err_r;			-- output the current memory error status
	errbits <= errbits_r;
	
	-- memory test controller state machine operations
	combinatorial: process(state_r,err_r,addr_r,dIn,rand,done,errcnt_r,errbits_r,cnt_r)
	begin
	
		-- default operations (do nothing unless explicitly stated in the following case statement)
		rd <= NO;								-- no memory write
		wr <= NO;								-- no memory read
		abort <= NO;
		ld <= NO;								-- don't load the random number generator
		cke <= NO;							-- don't generate a new random number
		addr_next <= addr_r;		-- next address is the same as current address
		errcnt_next <= errcnt_r;
		errbits_next <= errbits_r;
		cnt_next <= cnt_r;
		err_next <= err_r;			-- error flag is unchanged
		state_next <= state_r;	-- no change in memory tester state
		
		-- **** compute the next state and operations ****
		case state_r is

			when INIT =>	-- initialize the memory test controller
				progress <= "00";		-- indicate the current controller state
				ld <= YES;					-- load random number seed
				cke <= YES;					-- enable clocking of rand num gen so seed gets loaded
				cnt_next <= TO_UNSIGNED(0,cnt_next'length);
				addr_next <= TO_UNSIGNED(BEG_TEST,addr_next'length);	-- load starting mem address
				err_next <= NO;			-- clear memory error flag
				errcnt_next <= TO_UNSIGNED(0,errcnt_next'length);
				errbits_next <= (others=>'0');
				state_next <= LOAD;	-- go to LOAD state and write pattern to memory

			when LOAD => 	-- load the memory with data from the random number generator
				progress <= "01";		-- indicate the current controller state
				if done = NO then		-- current write operation is not complete
					wr <= YES;				-- keep write signal active since memory write is not done
				else								-- current write operation is complete
					wr <= NO;					-- release write signal when write op is complete
					if addr_r /= TO_UNSIGNED(END_TEST,addr_r'length) then
						-- not at the end of the memory test range yet
						cnt_next <= cnt_r + 1;
						addr_next <= addr_r + STEP_SIZE;	-- so increment address
						cke <= YES;						-- and enable generator clock to get new random num
					else
						-- else end of the memory test range has been reached
						abort <= YES;
						cke <= YES;	-- enable generator clock and
						ld <= YES;	-- reload the generator with the seed value
						cnt_next <= TO_UNSIGNED(0,cnt_next'length);
						addr_next <= TO_UNSIGNED(BEG_TEST,addr'length);	-- reset to start of test range
						state_next <= COMPARE;	-- go to the COMPARE state and check memory contents
					end if;
				end if;

			when COMPARE =>	-- re-run the generator and compare it to memory contents
				progress <= "10";		-- indicate the current controller state
				if done = NO then		-- current read operation is not complete
					rd <= YES;				-- keep read signal active since memory read is not done
				else								-- current read operation is complete
					rd <= NO;					-- release the read signal when read op is complete
					errbits_next <= errbits_r or ((dIn xor rand) and mask);
--					if (dIn and mask) /= (cnt_r and mask) then	-- compare value from memory to random number
					if (dIn and mask) /= (rand and mask) then	-- compare value from memory to random number
						errcnt_next <= errcnt_r + 1;	-- increment error counter if they don't match
					end if;
					if addr_r = (TO_UNSIGNED(END_TEST-16#FF#,addr_r'length) or addr_mask) then
						abort <= YES;
						state_next <= STOP;	-- go to STOP state once entire range has been checked
					end if;
					cnt_next <= cnt_r + 1;
					addr_next <= addr_r + STEP_SIZE;	-- increment address to check next memory location
					cke <= YES;				-- and enable generator clock to get next random num
				end if;

			when others =>	-- memory test is complete
				if errcnt_r > errthreshold then
					err_next <= YES;
				end if;
				progress <= "11";		-- indicate the current controller state
				
		end case;

	end process;


	-- update the registers of the memory tester controller	
	update: process(clk,rst)
	begin
		if rst = YES then
			-- go to starting state and clear error flag when reset occurs
			state_r <= INIT;
			cnt_r <= TO_UNSIGNED(0,cnt_r'length);
			errcnt_r <= TO_UNSIGNED(0,errcnt_r'length);
			errbits_r <= (others=>'0');
			err_r <= NO;
		elsif	clk'event and clk = '1' then
			-- update error flag, address register, and state
			state_r <= state_next;
			cnt_r <= cnt_next;
			errcnt_r <= errcnt_next;
			errbits_r <= errbits_next;
			err_r <= err_next;
			addr_r <= addr_next;
		end if;
	end process;

end arch;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产超碰在线一区| 91黄视频在线| 欧美亚一区二区| 欧美精品一区二区精品网| 色综合久久久久久久| 粉嫩嫩av羞羞动漫久久久 | 成人av电影在线观看| 欧美剧在线免费观看网站| 国产日产欧美精品一区二区三区| 亚洲国产日韩一级| 91欧美激情一区二区三区成人| 日韩精品一区二区三区视频播放 | 亚洲一二三四在线| 成人午夜视频在线观看| 日韩三级在线免费观看| 亚洲一区二区欧美| 一本久久综合亚洲鲁鲁五月天| 国产精品人人做人人爽人人添 | 美女国产一区二区| 欧美精品一区二区三区在线播放| 国产精品色婷婷久久58| 韩国成人福利片在线播放| 欧美高清视频一二三区| 亚洲大片在线观看| 欧美综合在线视频| 一区二区三区不卡视频在线观看 | 欧美成人综合网站| 日本午夜精品一区二区三区电影| 欧洲中文字幕精品| 亚洲高清免费观看 | 亚洲欧美一区二区三区孕妇| 高清在线成人网| 国产日产欧美一区| 成人免费黄色大片| 中文幕一区二区三区久久蜜桃| 91在线播放网址| 欧美精品一二三四| 亚洲电影一区二区| 欧美日韩精品系列| 婷婷成人激情在线网| 666欧美在线视频| 亚洲动漫第一页| 91精品国产乱| 国内精品国产成人国产三级粉色| 久久综合九色综合97婷婷女人| 91蜜桃免费观看视频| 最新中文字幕一区二区三区| 91视频在线观看| 亚洲在线观看免费| 91麻豆精品91久久久久久清纯| 秋霞电影一区二区| 久久久久一区二区三区四区| 国产成a人亚洲精| 亚洲情趣在线观看| 91精品午夜视频| 丰满亚洲少妇av| 亚洲精品欧美激情| 国产精品护士白丝一区av| 波多野结衣精品在线| 国产精品电影一区二区| 欧美色国产精品| 国内成+人亚洲+欧美+综合在线 | 久久精品国产在热久久| 久久蜜桃一区二区| 色偷偷一区二区三区| 日韩精品91亚洲二区在线观看| 日韩美一区二区三区| 成人h动漫精品| 午夜影视日本亚洲欧洲精品| 久久婷婷久久一区二区三区| 97久久精品人人澡人人爽| 日韩电影免费在线看| 国产日韩欧美精品一区| 欧美做爰猛烈大尺度电影无法无天| 免费看欧美女人艹b| 中文字幕一区在线观看视频| 555www色欧美视频| 波多野结衣欧美| 狠狠色综合日日| 色综合久久天天| 国产一区中文字幕| 中文字幕欧美一| 日韩一区二区三免费高清| 93久久精品日日躁夜夜躁欧美| 首页综合国产亚洲丝袜| 中文字幕av一区二区三区高 | 91精品欧美综合在线观看最新| 风间由美性色一区二区三区| 日日夜夜免费精品| 亚洲免费看黄网站| 欧美激情一区二区三区| 欧美一激情一区二区三区| 在线观看成人小视频| 成人app下载| 国产在线一区二区综合免费视频| 亚洲在线中文字幕| 亚洲欧洲综合另类在线| 久久久精品一品道一区| 日韩欧美中文字幕公布| 欧美日韩国产小视频在线观看| 北条麻妃一区二区三区| 国产乱码精品一区二区三区忘忧草| 偷拍与自拍一区| 亚洲成av人综合在线观看| 亚洲天堂免费看| 国产精品久久久久毛片软件| 久久久99精品免费观看不卡| 日韩免费高清av| 欧美一区二区三区在线视频| 欧美精品aⅴ在线视频| 欧美在线播放高清精品| 欧美在线小视频| 91官网在线观看| 在线观看日韩高清av| 91九色最新地址| 欧美午夜电影网| 欧美日韩成人综合天天影院| 欧美日韩国产综合视频在线观看| 欧美亚洲自拍偷拍| 欧美伊人久久久久久午夜久久久久| 日本电影亚洲天堂一区| 欧美视频自拍偷拍| 欧美日韩亚洲综合一区二区三区| 欧美图区在线视频| 欧美精品亚洲二区| 日韩一区二区三区精品视频| 日韩欧美在线123| 亚洲精品一线二线三线| 国产欧美精品国产国产专区 | 久久午夜免费电影| 亚洲大片一区二区三区| 日韩精品亚洲一区二区三区免费| 亚洲图片有声小说| 麻豆传媒一区二区三区| 国产成人午夜电影网| 成人aaaa免费全部观看| 在线一区二区视频| 91精品国产91久久久久久一区二区| 日韩欧美亚洲国产另类| 中文字幕高清一区| 有坂深雪av一区二区精品| 天天综合网 天天综合色| 美女一区二区久久| 成人黄色片在线观看| 欧美三级电影一区| 精品国产青草久久久久福利| 国产欧美一二三区| 亚洲成人综合网站| 久久国产精品99久久久久久老狼 | 久久久久久久综合色一本| 国产精品理论在线观看| 亚洲一二三区视频在线观看| 激情五月激情综合网| 成人av网址在线观看| 91精品国产91综合久久蜜臀| 日本一区二区免费在线| 一区二区三区在线免费观看| 精品1区2区3区| 91精品婷婷国产综合久久 | 色就色 综合激情| 欧美日韩www| 国产精品久久三| 免费黄网站欧美| www.日韩av| 精品国产123| 天使萌一区二区三区免费观看| 国产美女精品一区二区三区| 欧美日韩午夜影院| 欧美国产精品v| 国产a久久麻豆| 日韩欧美国产成人一区二区| 亚洲欧美国产毛片在线| 国产一区二区三区免费观看| 欧美日韩精品一区二区三区蜜桃 | 这里只有精品免费| 亚洲蜜臀av乱码久久精品| 久久精品国产99国产精品| 亚洲一区二区av电影| 中文字幕日韩一区| 精品一区二区三区在线视频| 色哟哟精品一区| 欧美国产视频在线| 六月丁香婷婷色狠狠久久| 精品视频123区在线观看| 亚洲欧洲性图库| 高清不卡在线观看| 国产午夜精品理论片a级大结局| 日本不卡123| 91麻豆精品国产91久久久| 午夜久久久影院| 欧美最新大片在线看| 亚洲区小说区图片区qvod| av午夜一区麻豆| 国产精品大尺度| 99久久精品国产一区二区三区| 国产人成一区二区三区影院| 国产成人av自拍| 国产精品人妖ts系列视频| 成人福利电影精品一区二区在线观看 | 久久黄色级2电影|