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

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

?? sdr_ctrl.vhd

?? sdram controller in vhdl
?? VHD
?? 第 1 頁 / 共 2 頁
字號:
---------------------------------------------------------------------------------------------------
--
-- Title       : SDR_CTRL
-- Design      : SDR_controller
-- Author      : Michal Krepa
-- Company     : XXX
--
---------------------------------------------------------------------------------------------------
--
-- File        : SDR_CTRL.vhd
-- Generated   : Tue Sep 16 10:07:58 2003
-- From        : interface description file
-- By          : Itf2Vhdl ver. 1.20
--
---------------------------------------------------------------------------------------------------
--
--  Description : Single data rate SDRAM controller
--
---------------------------------------------------------------------------------------------------


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


entity SDR_CTRL is
	generic(
		data_width: positive := 32;		-- host & SDRAM data width
		rows: positive := 2048;				-- number of rows in SDRAM array
		columns: positive := 256;				-- number of columns in SDRAM array
		haddr_width: positive := 21;		-- host-side address width
		saddr_width: positive := 11		-- SDRAM-side address width
	);
	port(	   
		-- host signals
		CLK : in STD_LOGIC;  
		nRST : in std_logic;
		ADDR : in std_logic_vector(haddr_width-1 downto 0);
		DATA_IN : in std_logic_vector(data_width-1 downto 0);
		nDTACK : out std_logic;
		WnR : in std_logic;
		nAS : in std_logic;
		nLBE : in std_logic_vector(data_width/8-1 downto 0);	
		-- sdram signals
		nCS : out STD_LOGIC;
		nRAS : out STD_LOGIC;
		nCAS : out STD_LOGIC;
		nWE : out STD_LOGIC;
		BS : out STD_LOGIC_vector(1 downto 0);
		CKE : out STD_LOGIC;
		DQM : out STD_LOGIC_VECTOR(data_width/8-1 downto 0);	
		DATA_OUT_SDR : out std_logic_vector(data_width-1 downto 0);
		A : out STD_LOGIC_VECTOR(saddr_width-1 downto 0)
		);
end SDR_CTRL;

architecture SDR_CTRL of SDR_CTRL is   
	
	function log2(v: in natural) return natural is
		variable n: natural;
		variable logn: natural;
	begin
		n := 1;
		for i in 0 to 128 loop
			logn := i;
			exit when (n>=v);
			n := n * 2;
		end loop;
		return logn;
	end function log2;
	
	constant CLOCK_PERIOD : positive := 30; -- in ns
	-- burst size	   		 
	constant burst : positive := 8;	
	-- enable/disable autoprecharge = 1/0
	constant auto_precharge : std_logic := '0';		  
	-- init refresh cycles
	constant init_ref_cycles : natural := 2;  
	
	constant row_length: natural := log2(rows);	-- number of row address bits
	constant column_length:	natural := log2(columns);	-- number of column address bits
	
	
	-- timing constants in ns:
	--constant tRC  : positive := 65;
	constant tRCD : positive := 20;
	constant tRP  : positive := 20;
	constant tREF : positive := 15000; -- for 1 row (for 4096 you need to divide number by 4096)        
	constant tRFC : positive := 65; 
	constant tWR  : positive := CLOCK_PERIOD + 7; 
	-- sdram initialization time
	-- fo eg.: if 100 us sdram initialization is needed, tSTARTUP_NOP should be 100000 [ns]
	constant tSTARTUP_NOP : positive := 100000;
	
	-- timing constants in cycles
	-- actual cycles will be one cycle longer (every) because of state transition time (1 cycle time)
	--constant tRC_CYCLES  : natural := tRC  / CLOCK_PERIOD;	 -- tRC_time = tRC_CYCLES + 1
	constant tRCD_CYCLES : natural := tRCD / CLOCK_PERIOD;	 --	tRCD_time = tRCD_CYCLES + 1
	constant tRP_CYCLES  : natural := tRP  / CLOCK_PERIOD;	 -- tRP_time = tRP_CYCLES + 1
	constant tMRD_CYCLES : natural := 2; 					 -- tMRD_time = 2 tCK
	constant tREF_CYCLES : natural := tREF / CLOCK_PERIOD;	 --	tREF_time = tREF_CYCLES + 1
	constant tRFC_CYCLES : NATURAL := tRFC / CLOCK_PERIOD;	 -- tRFC_time = tRFC_CYCLES + 1
	constant tWR_CYCLES  : natural := tWR / CLOCK_PERIOD; 	 --	tWR_time = tWR_CYCLES + 1
	constant tSTARTUP_NOP_CYCLES : positive := tSTARTUP_NOP / (2*CLOCK_PERIOD);	 
	
	constant burst_size : std_logic_vector(2 downto 0) := conv_std_logic_vector(log2(burst),3);
	constant CAS_LATENCY : positive := 2; 
	
	-- specified to supress simulation warnings from micron sdram models
	constant hold_time: time:= 2 ns;
	
	type state_type is (
	initialize,
	active, 
	read_data,
	read,
	write,
	set_ModeRegister,
	precharge,
	auto_refresh,
	nop 
	);
	signal state : state_type;
	
	signal refresh_req      : std_logic;  -- Refresh request signals
	signal refresh_done_flg : std_logic; 
	signal refresh_timer : integer range 0 to tREF_CYCLES; 
	signal startup_timer : integer range 0 to tSTARTUP_NOP_CYCLES; 
	
	signal startup_pending : std_logic;	-- '1' - in startup sequence
	signal wait_counter : integer range 0 to 31; -- how many cycles wait until next command can be issued
	signal init_refreshes : integer range 0 to init_ref_cycles; -- autorefresh commands needed in startup sequence
	signal nAS_WAITING	: std_logic; -- if read/write is waiting to be executed
	signal CAS_counter : integer range 0 to 3;
	signal execute_nop : std_logic;
	signal nLBE_s : std_logic_vector(data_width/8-1 downto 0);
	signal aref_enable : std_logic;	-- autorefresh enable
	
	signal bank_numb	 : std_logic_vector(BS'range);
	signal row_addr		 : std_logic_vector(row_length-1 downto 0);
	signal col_addr		 : std_logic_vector(column_length-1 downto 0);
	signal WnR_S		 : std_logic;   
	signal burst_counter : integer range 0 to 7;	
	
begin	
	-- Hold nAS	  
	-- nAS - active low address strobe
	ADS_DETECT: process(nRST, CLK)
	begin
		if nRST = '0' then
			nAS_WAITING <= '0';
			bank_numb <= (others => '0');  
			col_addr <= (others => '0');   
			row_addr <= (others => '0'); 
			DATA_OUT_SDR <= (others => '0'); 
			nLBE_s <= (others => '1');
		elsif rising_edge(CLK) then	 
			-- if address strobe latch address
			if nAS='0' then
				nAS_WAITING <= '1';	 
				bank_numb <= ADDR(BS'length + row_length + column_length - 1 downto row_length + column_length) after hold_time;	 
				row_addr <= ADDR(row_length+column_length-1 downto column_length) after hold_time;	
				col_addr <= ADDR(column_length-1 downto 0) after hold_time;
				DATA_OUT_SDR <= DATA_IN after hold_time;
				nLBE_s <= nLBE;
			elsif state = active then
				nAS_WAITING <= '0';
			end if;
		end if;
	end process;
	
	sdram_ctrl : process(CLK, nRST)
	begin		
		if nRST = '0' then
			CKE <= '0';	
			DQM <= (others => '1');	
			nCS <= '1';
			nRAS <= '1';
			nCAS <= '1'; 
			nWE <= '1';
			BS <= "00";
			A <= (others => '0');		
			state <= initialize; 
			startup_pending <= '1';	
			wait_counter <= 0;	 
			init_refreshes <= 0;
			nDTACK <= '1';	
			CAS_counter <= 0;  
			burst_counter <= 0;
			startup_timer <= 0;
			refresh_done_flg <= '0';
			WnR_S <= '0';  
			execute_nop <= '0';	 
			aref_enable <= '1';	
		elsif rising_edge(CLK) then
			
			case state is		 
				--------------------------
				-- initialization		 
				--------------------------
				when initialize =>
				CKE <= '1';	
				nCS <= '0';
				state <= nop after hold_time;	
				
				-----------------------------
				-- MODE REGISTER SET command
				-----------------------------
				when set_ModeRegister =>
				nCS  <= '0' after hold_time;
				nRAS <= '0' after hold_time;
				nCAS <= '0' after hold_time;
				nWE  <= '0' after hold_time;
				A <= 
				 '0'	-- should be '0' to ensure compability with future devices
				& '1'	 					-- write burst mode: '0' - programmed burst length; '1' - single acces location
				& "00" 						-- operation mode: "00" - standard; others - reserved
				& conv_std_logic_vector(CAS_Latency,3) -- CAS Latency
				& '0'						-- Burst Mode: '0' - sequence; '1' - interleave
				& burst_size; 					-- BURST LENGTH	of 8 
				-- after MRS command issue n nop cycles where n = tMRD_CYCLES 
				if execute_nop = '1' then
					nCS <= '0' after hold_time;
					nRAS <= '1' after hold_time;
					nCAS <= '1' after hold_time;
					nWE <= '1' after hold_time;		
				end if;
				
				-- wait for tMRD_CYCLES before issue
				if wait_counter < tMRD_CYCLES then
					wait_counter <= wait_counter + 1; 
					execute_nop <= '1';
				else			
					-- sdram initialization complete
					wait_counter <= 0;	
					startup_pending <= '0';	
					nDTACK <= '0' after hold_time;
					state <= nop after hold_time;	
					execute_nop <= '0';
				end if;	
				
				--------------------------
				-- NOP command			 
				--------------------------
				when nop =>
				nCS <= '0' after hold_time;
				nRAS <= '1' after hold_time;
				nCAS <= '1' after hold_time;
				nWE <= '1' after hold_time;		 
				DQM <= (others => '0') after hold_time;	
				WnR_S <= WnR after hold_time;  
				
				execute_nop <= '0';	
				nDTACK <= '1' after hold_time;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一个色在线综合| 免费成人美女在线观看.| 4438x亚洲最大成人网| 国产99久久久国产精品| 亚洲福利一区二区| 国产精品久久久久久久岛一牛影视 | 91在线码无精品| 蜜臀久久久久久久| 亚洲精品乱码久久久久久久久 | 久久久精品天堂| 91精品久久久久久久久99蜜臂| 国产很黄免费观看久久| 免费欧美在线视频| 亚洲一区日韩精品中文字幕| 国产欧美精品一区二区三区四区| 欧美年轻男男videosbes| 91在线小视频| 高清不卡一二三区| 久久99日本精品| 首页综合国产亚洲丝袜| 一区二区三区av电影 | 亚洲欧美激情小说另类| 精品盗摄一区二区三区| 欧美一二三在线| 亚洲天堂精品在线观看| 久久综合999| 日韩欧美国产系列| 91麻豆精品国产| 欧美日韩日日骚| 欧美专区日韩专区| 在线视频一区二区三| 91麻豆123| 91丨porny丨国产入口| 成人激情动漫在线观看| 国产成a人亚洲精| 国产一区二区三区免费看| 久草热8精品视频在线观看| 日本视频中文字幕一区二区三区| 日韩精品视频网站| 日韩精品免费专区| 蜜桃av一区二区| 久久69国产一区二区蜜臀| 精品一区免费av| 久久丁香综合五月国产三级网站| 麻豆国产91在线播放| 久久精品免费观看| 久久99久久久久久久久久久| 蜜桃一区二区三区四区| 久久99精品国产麻豆婷婷 | 不卡电影免费在线播放一区| 粉嫩av一区二区三区粉嫩| 成人av先锋影音| 99re66热这里只有精品3直播 | 奇米精品一区二区三区在线观看 | 精品福利一二区| 久久久99精品久久| 欧美国产精品v| 亚洲人成亚洲人成在线观看图片 | 日韩成人午夜精品| 麻豆国产91在线播放| 国产成人在线观看免费网站| 成人av网站免费观看| 色香色香欲天天天影视综合网| 在线观看不卡一区| 制服视频三区第一页精品| 日韩亚洲欧美在线| 国产视频一区在线观看| 国产精品成人免费在线| 亚洲综合色区另类av| 免费观看成人鲁鲁鲁鲁鲁视频| 韩日欧美一区二区三区| 成人av在线影院| 欧美三级韩国三级日本一级| 精品少妇一区二区| 国产精品伦一区二区三级视频| 亚洲午夜视频在线观看| 久久精品国产秦先生| 99在线热播精品免费| 亚洲女人小视频在线观看| 亚洲不卡av一区二区三区| 极品少妇xxxx精品少妇偷拍| www.日韩av| 欧美一级日韩一级| 国产精品国产成人国产三级| 日韩精品视频网| 成人爱爱电影网址| 91精品国产91热久久久做人人| 国产日产欧美一区| 视频一区中文字幕国产| 丁香啪啪综合成人亚洲小说| 欧美日韩国产综合一区二区| 精品日韩99亚洲| 一区二区三区成人| 国产寡妇亲子伦一区二区| 在线观看精品一区| 91网站最新地址| 国产精品初高中害羞小美女文| 美女视频黄频大全不卡视频在线播放| www.欧美日韩| 日韩一区二区在线观看视频| 久久久精品综合| 亚洲欧美日韩系列| 麻豆免费精品视频| 日韩欧美一区二区视频| 亚洲va在线va天堂| 欧美无砖专区一中文字| 久久亚洲影视婷婷| 丁香亚洲综合激情啪啪综合| 欧美精品免费视频| 亚洲综合免费观看高清在线观看| 亚洲网友自拍偷拍| 丁香婷婷综合五月| 亚洲国产精品久久人人爱蜜臀| 粉嫩欧美一区二区三区高清影视| 国产精品久久久久久久久晋中 | 美国十次了思思久久精品导航| 欧美亚一区二区| 秋霞av亚洲一区二区三| 精品久久久久久综合日本欧美 | 亚洲精品乱码久久久久久| 欧美日本一区二区| 紧缚奴在线一区二区三区| 亚洲色图.com| 精品美女被调教视频大全网站| 国产成人在线视频网址| 亚洲高清免费观看高清完整版在线观看 | 国产欧美一区二区精品婷婷| 在线精品视频一区二区三四 | 日韩精品1区2区3区| 久久久久九九视频| 69精品人人人人| 99久久777色| 韩国在线一区二区| 亚洲欧美国产毛片在线| 国产精品色在线| 国产精品久久久久婷婷| 国产成人亚洲综合a∨婷婷图片 | 日韩在线观看一区二区| 日韩三级av在线播放| 91老师片黄在线观看| 国产不卡视频在线播放| 激情久久五月天| 日韩精品欧美成人高清一区二区| 亚洲二区在线视频| 久久国产精品第一页| 高清在线不卡av| a亚洲天堂av| 91传媒视频在线播放| 日韩欧美的一区| 亚洲视频一区二区在线| 性做久久久久久| 蜜桃一区二区三区在线观看| 精品在线免费视频| 在线影视一区二区三区| 国产99一区视频免费| 日韩电影在线观看网站| 亚洲一级二级三级在线免费观看| 欧美成人国产一区二区| 欧美va亚洲va国产综合| 久久久久亚洲蜜桃| 亚洲国产综合在线| 成人在线综合网站| 欧美三区免费完整视频在线观看| 91国偷自产一区二区开放时间| 欧美日韩免费观看一区三区| 91精品欧美一区二区三区综合在| 日韩一区和二区| 国产精品网曝门| 午夜精品福利一区二区三区av | 在线免费观看一区| 国产欧美一区在线| 日韩成人伦理电影在线观看| 91免费看片在线观看| 精品国产伦一区二区三区观看方式 | 亚洲欧美激情视频在线观看一区二区三区| 国产精品久久久久一区| 日韩电影网1区2区| 欧美自拍丝袜亚洲| 亚洲免费观看高清完整版在线观看| 久国产精品韩国三级视频| 欧美一级理论片| 日韩精品1区2区3区| 欧美日韩一卡二卡| 亚洲欧洲www| 色婷婷综合在线| 亚洲精品水蜜桃| a级高清视频欧美日韩| 国产精品久线观看视频| 国产aⅴ综合色| 91精品福利视频| 日本大胆欧美人术艺术动态| 精品国产免费一区二区三区四区| 日韩电影一区二区三区| 国产精品久久久久久久久免费桃花 | 亚洲午夜私人影院| 欧美在线你懂的| 视频一区欧美精品| wwww国产精品欧美| 成人精品一区二区三区中文字幕| 伊人色综合久久天天|