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

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

?? i2c_master_top.vhd

?? i2c IP核 i2c.master i2c.mater.v
?? VHD
字號:
---------------------------------------------------------------------
----                                                             ----
----  WISHBONE revB2 compl. I2C Master Core; top level           ----
----                                                             ----
----                                                             ----
----  Author: Richard Herveille                                  ----
----          richard@asics.ws                                   ----
----          www.asics.ws                                       ----
----                                                             ----
----  Downloaded from: http://www.opencores.org/projects/i2c/    ----
----                                                             ----
---------------------------------------------------------------------
----                                                             ----
---- Copyright (C) 2000 Richard Herveille                        ----
----                    richard@asics.ws                         ----
----                                                             ----
---- This source file may be used and distributed without        ----
---- restriction provided that this copyright statement is not   ----
---- removed from the file and that any derivative work contains ----
---- the original copyright notice and the associated disclaimer.----
----                                                             ----
----     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ----
---- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ----
---- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ----
---- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ----
---- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ----
---- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ----
---- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ----
---- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ----
---- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ----
---- LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ----
---- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ----
---- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ----
---- POSSIBILITY OF SUCH DAMAGE.                                 ----
----                                                             ----
---------------------------------------------------------------------

--  CVS Log
--
--  $Id: i2c_master_top.vhd,v 1.1 2004/09/23 07:22:49 acroslan Exp $
--
--  $Date: 2004/09/23 07:22:49 $
--  $Revision: 1.1 $
--  $Author: acroslan $
--  $Locker:  $
--  $State: Exp $
--
-- Change History:
--               $Log: i2c_master_top.vhd,v $
--               Revision 1.1  2004/09/23 07:22:49  acroslan
--               I2C checked in
--
--               Revision 1.2  2001/11/10 10:52:44  rherveille
--               Changed PRER reset value from 0x0000 to 0xffff, conform specs.
--


library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;

entity i2c_master_top is
	generic(
		ARST_LVL : std_logic := '0';                  -- asynchronous reset level

		-- Register timing parameters.
		-- Last parameters in list for
		-- verilog compatibility
		Tcq : time := 1 ns                            -- Clock to output delay
	);
	port (
		-- wishbone signals
		wb_clk_i  : in  std_logic;		                 	-- master clock input
		wb_rst_i  : in  std_logic := '0';	          		-- synchronous active high reset
		arst_i    : in  std_logic := not ARST_LVL;  		-- asynchronous reset
		wb_adr_i  : in  unsigned(2 downto 0);	       	-- lower address bits
		wb_dat_i  : in  std_logic_vector(7 downto 0);	-- Databus input
		wb_dat_o  : out std_logic_vector(7 downto 0);	-- Databus output
		wb_we_i   : in  std_logic;	                			-- Write enable input
		wb_stb_i  : in  std_logic;                				-- Strobe signals / core select signal
		wb_cyc_i  : in  std_logic;	                			-- Valid bus cycle input
		wb_ack_o  : out std_logic;                 			-- Bus cycle acknowledge output
		wb_inta_o : out std_logic;                 			-- interrupt request output signal

		-- i2c lines
		scl_pad_i     : in  std_logic;                -- i2c clock line input
		scl_pad_o     : out std_logic;                -- i2c clock line output
		scl_padoen_o  : out std_logic;                -- i2c clock line output enable, active low
		sda_pad_i     : in  std_logic;                -- i2c data line input
		sda_pad_o     : out std_logic;                -- i2c data line output
		sda_padoen_o  : out std_logic                 -- i2c data line output enable, active low
	);
end entity i2c_master_top;

architecture structural of i2c_master_top is
	component i2c_master_byte_ctrl is
		generic(
			Tcq : time :=  Tcq
		);
		port (
			clk    : in std_logic;
			rst    : in std_logic; -- synchronous active high reset (WISHBONE compatible)
			nReset : in std_logic;	-- asynchornous active low reset (FPGA compatible)
			ena    : in std_logic; -- core enable signal

			clk_cnt : in unsigned(15 downto 0);	-- 4x SCL 

			-- input signals
			start,
			stop,
			read,
			write,
			ack_in : std_logic;
			din    : in std_logic_vector(7 downto 0);

			-- output signals
			cmd_ack  : out std_logic;
			ack_out  : out std_logic;
			i2c_busy : out std_logic;
			dout     : out std_logic_vector(7 downto 0);

			-- i2c lines
			scl_i   : in std_logic;  -- i2c clock line input
			scl_o   : out std_logic; -- i2c clock line output
			scl_oen : out std_logic; -- i2c clock line output enable, active low
			sda_i   : in std_logic;  -- i2c data line input
			sda_o   : out std_logic; -- i2c data line output
			sda_oen : out std_logic  -- i2c data line output enable, active low
		);
	end component i2c_master_byte_ctrl;

	-- registers
	signal prer : unsigned(15 downto 0);		      	-- clock prescale register
	signal ctr  : std_logic_vector(7 downto 0);	 -- control register
	signal txr  : std_logic_vector(7 downto 0);		-- transmit register
	signal rxr  : std_logic_vector(7 downto 0);		-- receive register
	signal cr   : std_logic_vector(7 downto 0);	 -- command register
	signal sr   : std_logic_vector(7 downto 0);		-- status register

	-- internal reset signal
	signal rst_i : std_logic;

	-- done signal: command completed, clear command register
	signal done : std_logic;

	-- command register signals
	signal sta, sto, rd, wr, ack, iack : std_logic;

	-- core enable signal
	signal core_en : std_logic;
	signal ien : std_logic;

	-- status register signals
	signal irxack, rxack : std_logic; 			-- received aknowledge from slave
	signal tip : std_logic;		         			-- transfer in progress
	signal irq_flag : std_logic;	     			-- interrupt pending flag
	signal i2c_busy : std_logic;		     		-- bus busy (start signal detected)

begin
	-- generate internal reset signal
	rst_i <= arst_i xor ARST_LVL;

	-- generate acknowledge output signal
	wb_ack_o <= wb_cyc_i and wb_stb_i;	  -- because timing is always honored 

	-- assign wb_dat_o
	assign_dato : process(wb_adr_i, prer, ctr, txr, cr, rxr, sr)
	begin
		case wb_adr_i is
			when "000" =>
				wb_dat_o <= std_logic_vector(prer( 7 downto 0));

			when "001" =>
				wb_dat_o <= std_logic_vector(prer(15 downto 8));

			when "010" =>
				wb_dat_o <= ctr;

			when "011" =>
				wb_dat_o <= rxr; -- write is transmit register TxR

			when "100" =>
				wb_dat_o <= sr; -- write is command register CR

			-- Debugging registers:
			-- These registers are not documented.
			-- Functionality could change in future releases

			when "101" =>
				wb_dat_o <= txr;

			when "110" =>
				wb_dat_o <= cr;

			when "111" =>
				wb_dat_o <= (others => '0');

			when others =>
				wb_dat_o <= (others => 'X');	-- for simulation only

		end case;
	end process assign_dato;


	-- registers block
	regs_block: process(rst_i, wb_clk_i)
	begin
		if (rst_i = '0') then
			prer <= (others => '1') after Tcq;
			ctr  <= (others => '0') after Tcq;
			txr  <= (others => '0') after Tcq;
			cr   <= (others => '0') after Tcq;
		elsif (wb_clk_i'event and wb_clk_i = '1') then
			if (wb_rst_i = '1') then
				prer <= (others => '1') after Tcq;
				ctr  <= (others => '0') after Tcq;
				txr  <= (others => '0') after Tcq;
				cr   <= (others => '0') after Tcq;
			else
				if (wb_cyc_i = '1' and wb_stb_i = '1' and wb_we_i = '1') then
					if (wb_adr_i(2) = '0') then
						case wb_adr_i(1 downto 0) is
							when "00" => prer( 7 downto 0) <= unsigned(wb_dat_i) after Tcq;
							when "01" => prer(15 downto 8) <= unsigned(wb_dat_i) after Tcq;
							when "10" => ctr               <= wb_dat_i after Tcq;
							when "11" => txr               <= wb_dat_i after Tcq;

							-- illegal cases, for simulation only
							when others =>
								report ("Illegal write address, setting all registers to unknown.");
								prer <= (others => 'X');
								ctr  <= (others => 'X');
								txr  <= (others => 'X');
						end case;
					elsif ( (core_en = '1') and (wb_adr_i(1 downto 0) = 0) ) then
						-- only take new commands when i2c ore enabled
						-- pending commands are finished
						cr <= wb_dat_i after Tcq;
					end if;
				else				
					-- clear command bits when done
					if (done = '1') then
						cr(7 downto 4) <= (others => '0') after Tcq;
					end if;

					-- reserved bits
					cr(2 downto 1) <= (others => '0') after Tcq;

					-- clear iack when irq_flag cleared
					cr(0) <= cr(0) and irq_flag;
				end if;
			end if;
		end if;
	end process regs_block;
		
	-- decode command register
	sta  <= cr(7);
	sto  <= cr(6);
	rd   <= cr(5);
	wr   <= cr(4);
	ack  <= cr(3);
	iack <= cr(0);

	-- decode control register
	core_en <= ctr(7);
	ien     <= ctr(6);

	-- hookup byte controller block
	u1: i2c_master_byte_ctrl port map (
		clk      => wb_clk_i,
		rst      => wb_rst_i,
		nReset   => rst_i,
		ena      => core_en, 
		clk_cnt  => prer,
		start    => sta,
		stop     => sto,
		read     => rd,
		write    => wr,
		ack_in   => ack,
		i2c_busy => i2c_busy,
		din      => txr,
		cmd_ack  => done,
		ack_out  => irxack,
		dout     => rxr,
		scl_i    => scl_pad_i,
		scl_o    => scl_pad_o,
		scl_oen  => scl_padoen_o,
		sda_i    => sda_pad_i,
		sda_o    => sda_pad_o,
		sda_oen  => sda_padoen_o
	);


	-- status register block + interrupt request signal
	st_irq_block : block
	begin
		-- generate status register bits
		gen_sr_bits: process (wb_clk_i, rst_i)
		begin
			if (rst_i = '0') then
				rxack    <= '0' after Tcq;
				tip      <= '0' after Tcq;
				irq_flag <= '0' after Tcq;
			elsif (wb_clk_i'event and wb_clk_i = '1') then
				if (wb_rst_i = '1') then
					rxack    <= '0' after Tcq;
					tip      <= '0' after Tcq;
					irq_flag <= '0' after Tcq;
				else
					rxack    <= irxack after Tcq;
					tip      <= (rd or wr) after Tcq;

					-- interrupt request flag is always generated
					irq_flag <= (done or irq_flag) and not iack after Tcq;
				end if;
			end if;
		end process gen_sr_bits;

		-- generate interrupt request signals
		gen_irq: process (wb_clk_i, rst_i)
		begin
			if (rst_i = '0') then
				wb_inta_o <= '0' after Tcq;
			elsif (wb_clk_i'event and wb_clk_i = '1') then
				if (wb_rst_i = '1') then
					wb_inta_o <= '0' after Tcq;
				else
					-- interrupt signal is only generated when IEN (interrupt enable bit) is set
					wb_inta_o <= irq_flag and ien after Tcq;
				end if;
			end if;
		end process gen_irq;

		-- assign status register bits
		sr(7)          <= rxack;
		sr(6)          <= i2c_busy;
		sr(5 downto 2) <= (others => '0'); -- reserved
		sr(1)          <= tip;
		sr(0)          <= irq_flag;
	end block;

end architecture structural;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲日韩一区二区三区| 欧美精品日韩一本| 国产一区二区网址| 人人爽香蕉精品| 日韩不卡一区二区三区| 蜜臀av一区二区| 日韩中文字幕91| 免费在线观看成人| 美女网站视频久久| 国产麻豆精品在线| av激情亚洲男人天堂| 成人午夜精品一区二区三区| 不卡一区中文字幕| 色噜噜夜夜夜综合网| 欧美色倩网站大全免费| 欧美电影免费提供在线观看| 久久先锋影音av鲁色资源网| 国产精品亲子伦对白| 亚洲精品国产a| 免费在线一区观看| 国产999精品久久久久久绿帽| 白白色 亚洲乱淫| 欧美视频一区二区三区在线观看 | 亚洲欧洲精品一区二区三区| 亚洲区小说区图片区qvod| 亚洲午夜成aⅴ人片| 裸体一区二区三区| 成人app在线| 678五月天丁香亚洲综合网| 国产性色一区二区| 夜夜夜精品看看| 激情综合色播五月| 91麻豆高清视频| 精品少妇一区二区三区在线视频| 久久九九久精品国产免费直播| 亚洲欧美激情在线| 美女一区二区视频| 在线一区二区三区四区| 日韩三区在线观看| 亚洲视频一二三| 国产一区二区看久久| 日本韩国精品在线| 国产欧美日韩在线视频| 天堂一区二区在线| 99精品国产视频| 久久久午夜精品| 日韩专区一卡二卡| 色综合网色综合| 久久精品在这里| 青青草国产成人av片免费| 色婷婷av一区二区三区gif| 国产视频911| 另类小说色综合网站| 欧美影院精品一区| 一区二区三区中文字幕电影| 国产一区二区三区四区五区美女| 欧美精品一级二级| 成人免费视频在线观看| 丁香啪啪综合成人亚洲小说 | 美腿丝袜亚洲综合| 欧美视频精品在线观看| 亚洲欧美一区二区三区国产精品 | 日本成人中文字幕| 欧美影院午夜播放| 亚洲国产精品久久人人爱蜜臀 | 欧美性一二三区| 国产精品麻豆久久久| 国产一区二区三区免费播放| 欧美精选午夜久久久乱码6080| 亚洲精品久久7777| 色综合天天做天天爱| 亚洲乱码国产乱码精品精小说| 成人深夜福利app| 国产色一区二区| av在线免费不卡| 亚洲少妇30p| 欧美性受xxxx| 亚洲v日本v欧美v久久精品| 欧美日韩一区二区三区免费看| 洋洋成人永久网站入口| 欧洲日韩一区二区三区| 亚洲国产日韩av| 91 com成人网| 青青国产91久久久久久| 精品嫩草影院久久| 国产成人综合网| 中文字幕在线不卡一区| 色狠狠一区二区| 性欧美疯狂xxxxbbbb| 91精品久久久久久蜜臀| 久久99精品久久久久婷婷| 国产视频在线观看一区二区三区| 国产精品一区二区三区乱码| 亚洲国产精品黑人久久久| 99久久精品免费观看| 亚洲成人av免费| 精品国产髙清在线看国产毛片| 国产精品一区在线观看你懂的| 日本一区二区综合亚洲| 色婷婷综合久久久久中文 | 成人欧美一区二区三区小说| 91网上在线视频| 另类小说色综合网站| 国产精品女主播av| 欧美日韩精品电影| 国产乱一区二区| 亚洲免费av观看| 欧美变态tickling挠脚心| 高清免费成人av| 日韩av一区二| 亚洲欧美色一区| 久久久久久久久久久久久女国产乱| 成人午夜精品在线| 人人爽香蕉精品| 亚洲靠逼com| 久久免费的精品国产v∧| 99视频有精品| 国产麻豆精品在线观看| 视频一区免费在线观看| 国产精品乱人伦| 欧美成人午夜电影| 精品视频1区2区3区| 国产91精品精华液一区二区三区| 婷婷中文字幕综合| 亚洲欧美电影院| 亚洲国产经典视频| 精品国产1区二区| 337p亚洲精品色噜噜| 91免费在线视频观看| 国产成人精品亚洲日本在线桃色| 香蕉成人啪国产精品视频综合网| 国产精品青草久久| 国产亚洲人成网站| 精品国产一区二区亚洲人成毛片| 欧美日韩三级在线| 欧美亚洲日本一区| 欧美中文字幕亚洲一区二区va在线| 成人黄色大片在线观看| 激情六月婷婷久久| 国产一区二区在线免费观看| 日本亚洲视频在线| 天天综合日日夜夜精品| 性做久久久久久免费观看欧美| 亚洲色图另类专区| 国产精品美女久久久久高潮| 国产欧美日本一区视频| 久久精品一区四区| 久久综合国产精品| 精品99999| 精品国产一区二区三区久久久蜜月| 91精品国产乱| 欧美一个色资源| 欧美精品一区二区三区视频| 欧美大胆一级视频| 久久这里只有精品6| 精品国产一区二区三区久久影院 | 欧美视频你懂的| 欧美精品在欧美一区二区少妇| 欧美日韩久久久一区| 欧美日韩色综合| 日韩一区二区三区视频| 久久午夜羞羞影院免费观看| 久久网站最新地址| 国产精品久久久久久久浪潮网站 | 激情成人综合网| 亚洲综合色区另类av| 一区二区三区四区不卡视频| 亚洲美女在线国产| 亚洲精品高清在线观看| 一区二区三区四区国产精品| 亚洲精品ww久久久久久p站| 一区二区在线观看免费视频播放| 一区二区三区四区在线免费观看 | 久久日一线二线三线suv| 日韩精品一区二区三区四区视频| 欧美成人一区二区| 国产精品国模大尺度视频| 亚洲欧洲中文日韩久久av乱码| 亚洲夂夂婷婷色拍ww47| 老司机午夜精品| 国产91精品免费| 欧美色爱综合网| 久久精品一区四区| 亚洲一区二区三区小说| 美女视频免费一区| 91麻豆国产福利精品| 日韩欧美国产电影| 综合欧美一区二区三区| 日本成人在线不卡视频| 懂色av噜噜一区二区三区av| 欧美手机在线视频| 国产精品欧美极品| 美女脱光内衣内裤视频久久影院| 成人开心网精品视频| 欧美一区二区三区小说| 亚洲欧洲成人精品av97| 老司机精品视频导航| 欧美亚洲尤物久久| 国产精品美女www爽爽爽| 日本亚洲免费观看|