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

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

?? gh_fifo_async_sr_wf.vhd

?? VHDL Library for 8254 timer/counter core
?? VHD
字號:
---------------------------------------------------------------------
--	Filename:	gh_fifo_async_sr_wf.vhd
--
--			
--	Description:
--		an Asynchronous FIFO, 
--		   using "Style #2" gray code address compare
--		   includes quarter, half, and three quarter full flags
--              
--	Copyright (c) 2007, 2008 by George Huber 
--		an OpenCores.org Project
--		free to use, but see documentation for conditions 								 
--
--	Revision	History:
--	Revision	Date      	Author   	Comment
--	--------	----------	---------	-----------
--	1.0     	01/13/07  	h lefevre	Initial revision
--	1.1     	09/20/08  	hlefevre 	add simulation init
--	        	          	          	  (to '0') to ram data 
--	
--------------------------------------------------------

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
USE ieee.std_logic_arith.all;

entity gh_fifo_async_sr_wf is
	GENERIC (add_width: INTEGER :=4; -- min value is 2 (4 memory locations)
	         data_width: INTEGER :=8 ); -- size of data bus
	port (					
		clk_WR  : in STD_LOGIC; -- write clock
		clk_RD  : in STD_LOGIC; -- read clock
		rst     : in STD_LOGIC; -- resets counters
		srst    : in STD_LOGIC:='0'; -- resets counters (sync with clk_WR)
		WR      : in STD_LOGIC; -- write control 
		RD      : in STD_LOGIC; -- read control
		D       : in STD_LOGIC_VECTOR (data_width-1 downto 0);
		Q       : out STD_LOGIC_VECTOR (data_width-1 downto 0);
		empty   : out STD_LOGIC; 
		qfull   : out STD_LOGIC;
		hfull   : out STD_LOGIC;
		qqqfull : out STD_LOGIC;
		full    : out STD_LOGIC);
end entity;

architecture a of gh_fifo_async_sr_wf is

component gh_gray2binary IS
	GENERIC (size: INTEGER := 8);
	PORT(	
		G   : IN STD_LOGIC_VECTOR(size-1 DOWNTO 0);	-- gray code in
		B   : out STD_LOGIC_VECTOR(size-1 DOWNTO 0) -- binary value out
		);
end component;

	type ram_mem_type is array (2**add_width-1 downto 0) 
	        of STD_LOGIC_VECTOR (data_width-1 downto 0);
	signal ram_mem : ram_mem_type := (others => (others => '0')); 
	signal iempty      : STD_LOGIC;
	signal ifull       : STD_LOGIC;
	signal add_WR_CE   : std_logic;
	signal add_WR      : std_logic_vector(add_width downto 0); -- add_width -1 bits are used to address MEM
	signal add_WR_GC   : std_logic_vector(add_width downto 0); -- add_width bits are used to compare
	signal n_add_WR    : std_logic_vector(add_width downto 0); --   for empty, full flags
	signal add_WR_RS   : std_logic_vector(add_width downto 0); -- synced to read clk
	signal add_RD_CE   : std_logic;
	signal add_RD      : std_logic_vector(add_width downto 0);
	signal add_RD_GC   : std_logic_vector(add_width downto 0);
	signal add_RD_GCwc : std_logic_vector(add_width downto 0);
	signal n_add_RD    : std_logic_vector(add_width downto 0);
	signal add_RD_WS   : std_logic_vector(add_width downto 0); -- synced to write clk
	signal srst_w      : STD_LOGIC;
	signal isrst_w     : STD_LOGIC;
	signal srst_r      : STD_LOGIC;
	signal isrst_r     : STD_LOGIC;
	signal c_add_RD      : std_logic_vector(add_width downto 0);
	signal c_add_WR      : std_logic_vector(add_width downto 0);
	signal c_add         : std_logic_vector(add_width downto 0);

begin

--------------------------------------------
------- memory -----------------------------
--------------------------------------------

process (clk_WR)
begin			  
	if (rising_edge(clk_WR)) then
		if ((WR = '1') and (ifull = '0')) then
			ram_mem(CONV_INTEGER(add_WR(add_width-1 downto 0))) <= D;
		end if;
	end if;		
end process;

	Q <= ram_mem(CONV_INTEGER(add_RD(add_width-1 downto 0)));

-----------------------------------------
----- Write address counter -------------
-----------------------------------------

	add_WR_CE <= '0' when (ifull = '1') else
	             '0' when (WR = '0') else
	             '1';

	n_add_WR <= add_WR + "01";
				 
process (clk_WR,rst)
begin 
	if (rst = '1') then
		add_WR <= (others => '0');
		add_RD_WS(add_width downto add_width-1) <= "11"; 
		add_RD_WS(add_width-2 downto 0) <= (others => '0');
		add_WR_GC <= (others => '0');
	elsif (rising_edge(clk_WR)) then
		add_RD_WS <= add_RD_GCwc;
		if (srst_w = '1') then
			add_WR <= (others => '0');
			add_WR_GC <= (others => '0');
		elsif (add_WR_CE = '1') then
			add_WR <= n_add_WR;
			for i in 0 to add_width-1 loop
				add_WR_GC(i) <= n_add_WR(i) xor n_add_WR(i+1);
			end loop;
			add_WR_GC(add_width) <= n_add_WR(add_width);
		else
			add_WR <= add_WR;
			add_WR_GC <= add_WR_GC;
		end if;
	end if;
end process;
				 
	full <= ifull;

	ifull <= '0' when (iempty = '1') else -- just in case add_RD_WS is reset to all zero's
	         '0' when (add_RD_WS /= add_WR_GC) else ---- instend of "11 zero's" 
	         '1';

U1 : gh_gray2binary
	generic map (size => add_width+1)
	port map(
		G => add_RD_WS,
		B => c_add_RD 
		);

U2 : gh_gray2binary
	generic map (size => add_width+1)
	port map(
		G => add_WR_GC,
		B => c_add_WR 
		); 
		
	c_add <= ((not c_add_WR(add_width)) & c_add_WR(add_width-1 downto 0)) - c_add_RD;
	
	qfull <= '0' when (iempty = '1') else
	         '0' when (c_add(add_width downto add_width-2) = "000") else
	         '1';
	
	hfull <= '0' when (iempty = '1') else
	         '0' when (c_add(add_width downto add_width-1) = "00") else
	         '1'; 
	
	qqqfull <= '0' when (iempty = '1') else
	           '0' when (c_add(add_width downto add_width-2) < "011") else
	           '1'; 

-----------------------------------------
----- Read address counter --------------
-----------------------------------------


	add_RD_CE <= '0' when (iempty = '1') else
	             '0' when (RD = '0') else
	             '1';
				 
	n_add_RD <= add_RD + "01";
				 
process (clk_RD,rst)
begin 
	if (rst = '1') then
		add_RD <= (others => '0');	
		add_WR_RS <= (others => '0');
		add_RD_GC <= (others => '0');
		add_RD_GCwc(add_width downto add_width-1) <= "11";
		add_RD_GCwc(add_width-2 downto 0) <= (others => '0');
	elsif (rising_edge(clk_RD)) then
		add_WR_RS <= add_WR_GC;
		if (srst_r = '1') then
			add_RD <= (others => '0');
			add_RD_GC <= (others => '0');
			add_RD_GCwc(add_width downto add_width-1) <= "11";
			add_RD_GCwc(add_width-2 downto 0) <= (others => '0');
		elsif (add_RD_CE = '1') then
			add_RD <= n_add_RD;
			for j in 0 to add_width-1 loop
				add_RD_GC(j) <= n_add_RD(j) xor n_add_RD(j+1);
			end loop;
			add_RD_GC(add_width) <= n_add_RD(add_width);
			for k in 0 to add_width-2 loop
				add_RD_GCwc(k) <= n_add_RD(k) xor n_add_RD(k+1);
			end loop;
			add_RD_GCwc(add_width-1) <= n_add_RD(add_width-1) xor (not n_add_RD(add_width));
			add_RD_GCwc(add_width) <= (not n_add_RD(add_width));
		else
			add_RD <= add_RD; 
			add_RD_GC <= add_RD_GC;
			add_RD_GCwc <= add_RD_GCwc;
		end if;
	end if;
end process;

	empty <= iempty;
 
	iempty <= '1' when (add_WR_RS = add_RD_GC) else
	          '0';
 
----------------------------------
--- sync rest stuff --------------
--- srst is sync with clk_WR -----
--- srst_r is sync with clk_RD ---
----------------------------------

process (clk_WR,rst)
begin 
	if (rst = '1') then
		srst_w <= '0';	
		isrst_r <= '0';	
	elsif (rising_edge(clk_WR)) then
		isrst_r <= srst_r;
		if (srst = '1') then
			srst_w <= '1';
		elsif (isrst_r = '1') then
			srst_w <= '0';
		end if;
	end if;
end process;

process (clk_RD,rst)
begin 
	if (rst = '1') then
		srst_r <= '0';	
		isrst_w <= '0';	
	elsif (rising_edge(clk_RD)) then
		isrst_w <= srst_w;
		if (isrst_w = '1') then
			srst_r <= '1';
		else
			srst_r <= '0';
		end if;
	end if;
end process;

end architecture;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女视频免费一区| 色婷婷久久久久swag精品| 日本亚洲一区二区| 午夜精品福利一区二区三区av | 91视频免费观看| 国产精品一二三区| 国产露脸91国语对白| 激情丁香综合五月| 极品少妇一区二区| 国产精品一区二区三区99| 国内成人免费视频| 国产91丝袜在线观看| 国产91综合一区在线观看| 成人午夜激情片| 91首页免费视频| 欧美自拍偷拍一区| 欧美精品色综合| 日韩丝袜美女视频| 2023国产一二三区日本精品2022| 久久综合色鬼综合色| 久久久久久免费| 国产精品美女久久久久aⅴ| 国产精品美女一区二区三区| 中文字幕一区日韩精品欧美| 亚洲最新在线观看| 午夜不卡在线视频| 久久成人羞羞网站| 国产成人精品三级| 91免费精品国自产拍在线不卡| 在线国产亚洲欧美| 欧美一区二区三区在线观看| 久久人人爽爽爽人久久久| 另类调教123区| 加勒比av一区二区| 99久久精品一区二区| 91久久精品一区二区二区| 777奇米四色成人影色区| 久久综合久久综合亚洲| 国产精品国产三级国产普通话99 | 亚洲欧美福利一区二区| 亚洲成在人线免费| 久久福利资源站| 99精品国产热久久91蜜凸| 欧美三级资源在线| xvideos.蜜桃一区二区| 亚洲精品乱码久久久久久| 青青草原综合久久大伊人精品优势 | 精品国精品国产| 国产精品第13页| 美女视频网站久久| 一本色道**综合亚洲精品蜜桃冫| 91精品中文字幕一区二区三区| 国产日本一区二区| 亚洲成av人片一区二区三区| 国产成人在线视频免费播放| 欧美日韩一区二区在线观看视频| 久久这里只有精品6| 亚洲一区二区三区四区在线观看 | 国产视频一区不卡| 亚洲天堂久久久久久久| 日本一区中文字幕| 91丨九色丨黑人外教| 26uuu精品一区二区在线观看| 亚洲一区视频在线观看视频| 国产高清久久久久| 这里只有精品视频在线观看| 亚洲欧美日韩中文播放| 狠狠色丁香婷婷综合| 欧美日韩精品是欧美日韩精品| 久久久久久久电影| 日韩中文字幕区一区有砖一区 | 欧美一区日本一区韩国一区| 成人免费一区二区三区视频| 国产精品一二三四区| 91精品欧美综合在线观看最新| 国产精品午夜久久| 久久66热re国产| 欧美乱妇23p| 一区二区三区四区在线免费观看| 国产成a人亚洲精| 91精品欧美久久久久久动漫 | 亚洲一区成人在线| 91视频免费播放| 中文欧美字幕免费| 国产精品系列在线播放| 欧美一区二区视频免费观看| 亚洲国产综合色| 色偷偷88欧美精品久久久| 国产精品视频在线看| 国产一区二区三区免费播放| 亚洲精品一区二区三区精华液| 午夜欧美在线一二页| 色噜噜狠狠一区二区三区果冻| 国产精品国产三级国产专播品爱网| 国产精品一二三区| 国产网站一区二区| 国产福利一区在线| 久久青草国产手机看片福利盒子| 国内久久精品视频| 久久亚洲一区二区三区明星换脸 | 成人国产精品免费| 国产午夜精品理论片a级大结局| 国产在线播放一区二区三区| 精品88久久久久88久久久 | 欧美精品在线视频| 亚洲成人三级小说| 欧美男生操女生| 亚洲v日本v欧美v久久精品| 亚洲日本免费电影| 99综合影院在线| 18成人在线观看| 色视频成人在线观看免| 亚洲一区二区在线观看视频| 在线精品视频小说1| 亚洲国产精品人人做人人爽| 欧美老人xxxx18| 免费观看日韩av| 久久嫩草精品久久久精品| 国产成人在线视频网站| 成人免费在线观看入口| 欧美亚洲综合另类| 日本中文字幕一区二区有限公司| 日韩三级伦理片妻子的秘密按摩| 精品一区二区三区在线视频| 久久久久久久久久久黄色| 成人av电影在线播放| 亚洲免费av高清| 欧美日韩国产成人在线免费| 理论电影国产精品| 国产视频一区在线播放| 色丁香久综合在线久综合在线观看| 亚洲国产视频一区| 日韩午夜精品视频| 国产.精品.日韩.另类.中文.在线.播放| 国产精品欧美久久久久无广告| 色综合久久久久综合体桃花网| 亚洲国产欧美日韩另类综合| 日韩欧美中文字幕精品| 成人黄色av电影| 亚洲.国产.中文慕字在线| www国产亚洲精品久久麻豆| 不卡的电影网站| 亚洲aaa精品| 欧美国产精品v| 欧美视频精品在线观看| 韩国欧美国产1区| 亚洲人精品午夜| 日韩视频免费观看高清在线视频| 成人一道本在线| 午夜精品一区二区三区免费视频| 久久亚洲综合色一区二区三区| 日本久久精品电影| 久久国产免费看| 亚洲精品你懂的| 欧美精品一区二区三区在线播放| 91影院在线观看| 狠狠久久亚洲欧美| 成人免费电影视频| 午夜精品免费在线观看| 久久久久久久精| 在线成人av网站| 成a人片国产精品| 久久99精品网久久| 亚洲激情在线播放| 久久久久久综合| 7777精品久久久大香线蕉| 成人av在线看| 麻豆精品视频在线| 亚洲综合色区另类av| 国产人伦精品一区二区| 在线综合视频播放| 日本韩国一区二区三区视频| 国产一区 二区| 男女激情视频一区| 夜色激情一区二区| 国产精品久久久久久久蜜臀| 精品国产一区二区三区四区四| 欧美视频一区二区在线观看| 99久久99久久综合| 国产精品资源在线| 蜜芽一区二区三区| 一区二区在线看| 国产精品夫妻自拍| 国产日韩欧美在线一区| 日韩欧美国产系列| 欧美日韩国产一级| 色系网站成人免费| 99久久伊人网影院| 风间由美一区二区av101| 蜜桃视频一区二区| 视频一区二区欧美| 亚洲成av人片在线观看| 一二三四社区欧美黄| 中文字幕五月欧美| 日本一区二区三区dvd视频在线| 日韩欧美色综合网站| 91精品国产麻豆国产自产在线| 欧美日韩卡一卡二| 色88888久久久久久影院野外| 成人动漫在线一区|