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

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

?? i2c_master_byte_ctrl.vhd

?? I2C總線協議 基于VHDL語言設計 需要可直接下載
?? VHD
字號:
-------------------------------------------------------------------------                                                             --------  WISHBONE revB2 compl. I2C Master Core; byte-controller     --------                                                             --------                                                             --------  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_byte_ctrl.vhd,v 1.5 2004/02/18 11:41:48 rherveille Exp $----  $Date: 2004/02/18 11:41:48 $--  $Revision: 1.5 $--  $Author: rherveille $--  $Locker:  $--  $State: Exp $---- Change History:--               $Log: i2c_master_byte_ctrl.vhd,v $--               Revision 1.5  2004/02/18 11:41:48  rherveille--               Fixed a potential bug in the statemachine. During a 'stop' 2 cmd_ack signals were generated. Possibly canceling a new start command.----               Revision 1.4  2003/08/09 07:01:13  rherveille--               Fixed a bug in the Arbitration Lost generation caused by delay on the (external) sda line.--               Fixed a potential bug in the byte controller's host-acknowledge generation.----               Revision 1.3  2002/12/26 16:05:47  rherveille--               Core is now a Multimaster I2C controller.----               Revision 1.2  2002/11/30 22:24:37  rherveille--               Cleaned up code----               Revision 1.1  2001/11/05 12:02:33  rherveille--               Split i2c_master_core.vhd into separate files for each entity; same layout as verilog version.--               Code updated, is now up-to-date to doc. rev.0.4.--               Added headers.------------------------------------------------ Byte controller section--------------------------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity i2c_master_byte_ctrl is	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; -- command done		ack_out  : out std_logic;		i2c_busy : out std_logic; -- arbitration lost		i2c_al   : out std_logic; -- i2c bus busy		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 entity i2c_master_byte_ctrl;architecture structural of i2c_master_byte_ctrl is	component i2c_master_bit_ctrl is	port (		clk    : in std_logic;		rst    : in std_logic;		nReset : in std_logic;		ena    : in std_logic;				-- core enable signal		clk_cnt : in unsigned(15 downto 0);		-- clock prescale value		cmd     : in std_logic_vector(3 downto 0);		cmd_ack : out std_logic; -- command done		busy    : out std_logic; -- i2c bus busy		al      : out std_logic; -- arbitration lost		din  : in std_logic;		dout : out std_logic;		-- 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_bit_ctrl;	-- commands for bit_controller block	constant I2C_CMD_NOP  	: std_logic_vector(3 downto 0) := "0000";	constant I2C_CMD_START	: std_logic_vector(3 downto 0) := "0001";	constant I2C_CMD_STOP	 : std_logic_vector(3 downto 0) := "0010";	constant I2C_CMD_READ	 : std_logic_vector(3 downto 0) := "0100";	constant I2C_CMD_WRITE	: std_logic_vector(3 downto 0) := "1000";	-- signals for bit_controller	signal core_cmd : std_logic_vector(3 downto 0);	signal core_ack, core_txd, core_rxd : std_logic;	signal al : std_logic;	-- signals for shift register	signal sr : std_logic_vector(7 downto 0); -- 8bit shift register	signal shift, ld : std_logic;	-- signals for state machine	signal go, host_ack : std_logic;	signal dcnt : unsigned(2 downto 0); -- data counter	signal cnt_done : std_logic;begin	-- hookup bit_controller	bit_ctrl: i2c_master_bit_ctrl port map(		clk     => clk,		rst     => rst,		nReset  => nReset,		ena     => ena,		clk_cnt => clk_cnt,		cmd     => core_cmd,		cmd_ack => core_ack,		busy    => i2c_busy,		al      => al,		din     => core_txd,		dout    => core_rxd,		scl_i   => scl_i,		scl_o   => scl_o,		scl_oen => scl_oen,		sda_i   => sda_i,		sda_o   => sda_o,		sda_oen => sda_oen	);	i2c_al <= al;	-- generate host-command-acknowledge	cmd_ack <= host_ack;	-- generate go-signal	go <= (read or write or stop) and not host_ack;	-- assign Dout output to shift-register	dout <= sr;	-- generate shift register	shift_register: process(clk, nReset)	begin	    if (nReset = '0') then	      sr <= (others => '0');	    elsif (clk'event and clk = '1') then	      if (rst = '1') then	        sr <= (others => '0');	      elsif (ld = '1') then	        sr <= din;	      elsif (shift = '1') then	        sr <= (sr(6 downto 0) & core_rxd);	      end if;	    end if;	end process shift_register;	-- generate data-counter	data_cnt: process(clk, nReset)	begin	    if (nReset = '0') then	      dcnt <= (others => '0');	    elsif (clk'event and clk = '1') then	      if (rst = '1') then	        dcnt <= (others => '0');	      elsif (ld = '1') then	        dcnt <= (others => '1');  -- load counter with 7	      elsif (shift = '1') then	        dcnt <= dcnt -1;	      end if;	    end if;	end process data_cnt;	cnt_done <= '1' when (dcnt = 0) else '0';	--	-- state machine	--	statemachine : block	    type states is (st_idle, st_start, st_read, st_write, st_ack, st_stop);	    signal c_state : states;	begin	    --	    -- command interpreter, translate complex commands into simpler I2C commands	    --	    nxt_state_decoder: process(clk, nReset)	    begin	        if (nReset = '0') then	          core_cmd <= I2C_CMD_NOP;	          core_txd <= '0';	          shift    <= '0';	          ld       <= '0';	          host_ack <= '0';	          c_state  <= st_idle;	          ack_out  <= '0';	        elsif (clk'event and clk = '1') then	          if (rst = '1' or al = '1') then	            core_cmd <= I2C_CMD_NOP;	            core_txd <= '0';	            shift    <= '0';	            ld       <= '0';	            host_ack <= '0';	            c_state  <= st_idle;	            ack_out  <= '0';	          else	            -- initialy reset all signal	            core_txd <= sr(7);	            shift    <= '0';	            ld       <= '0';	            host_ack <= '0';	            case c_state is	              when st_idle =>	                 if (go = '1') then	                   if (start = '1') then	                     c_state  <= st_start;	                     core_cmd <= I2C_CMD_START;	                   elsif (read = '1') then	                     c_state  <= st_read;	                     core_cmd <= I2C_CMD_READ;	                   elsif (write = '1') then	                     c_state  <= st_write;	                     core_cmd <= I2C_CMD_WRITE;	                   else -- stop	                     c_state  <= st_stop;	                     core_cmd <= I2C_CMD_STOP;	                   end if;	                   ld <= '1';	                 end if;	              when st_start =>	                 if (core_ack = '1') then	                   if (read = '1') then	                     c_state  <= st_read;	                     core_cmd <= I2C_CMD_READ;	                   else	                     c_state  <= st_write;	                     core_cmd <= I2C_CMD_WRITE;	                   end if;	                   ld <= '1';	                 end if;	              when st_write =>	                 if (core_ack = '1') then	                   if (cnt_done = '1') then	                     c_state  <= st_ack;	                     core_cmd <= I2C_CMD_READ;	                   else	                     c_state  <= st_write;       -- stay in same state	                     core_cmd <= I2C_CMD_WRITE;  -- write next bit	                     shift    <= '1';	                   end if;	                 end if;	              when st_read =>	                 if (core_ack = '1') then	                   if (cnt_done = '1') then	                     c_state  <= st_ack;	                     core_cmd <= I2C_CMD_WRITE;	                   else	                     c_state  <= st_read;      -- stay in same state	                     core_cmd <= I2C_CMD_READ; -- read next bit	                   end if;	                   shift    <= '1';	                   core_txd <= ack_in;	                 end if;	              when st_ack =>	                 if (core_ack = '1') then	                   -- check for stop; Should a STOP command be generated ?	                   if (stop = '1') then	                     c_state  <= st_stop;	                     core_cmd <= I2C_CMD_STOP;	                   else	                     c_state  <= st_idle;	                     core_cmd <= I2C_CMD_NOP;	                     -- generate command acknowledge signal	                     host_ack <= '1';	                   end if;	                   -- assign ack_out output to core_rxd (contains last received bit)	                   ack_out  <= core_rxd;	                   core_txd <= '1';	                 else	                   core_txd <= ack_in;	                 end if;	              when st_stop =>	                 if (core_ack = '1') then	                   c_state  <= st_idle;	                   core_cmd <= I2C_CMD_NOP;	                   -- generate command acknowledge signal	                   host_ack <= '1';	                 end if;	              when others => -- illegal states	                 c_state  <= st_idle;	                 core_cmd <= I2C_CMD_NOP;	                 report ("Byte controller entered illegal state.");	            end case;	          end if;	        end if;	    end process nxt_state_decoder;	end block statemachine;end architecture structural;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产日韩一二三区| 精品一区二区三区久久| 青娱乐精品视频在线| 国产.欧美.日韩| 欧美丰满高潮xxxx喷水动漫| 国产精品乱码人人做人人爱| 日韩成人精品在线| 97久久超碰国产精品| 久久久天堂av| 免费观看日韩电影| 欧美视频一区二区三区四区| 久久综合色一综合色88| 亚洲成人免费在线观看| heyzo一本久久综合| 久久这里只有精品首页| 日韩黄色一级片| 欧美午夜精品一区二区蜜桃| 日韩一区欧美小说| 成人福利视频在线看| 亚洲精品在线观看网站| 日韩激情一二三区| 91 com成人网| 日本美女一区二区三区| 欧美日韩高清在线| 亚洲国产一区二区视频| 欧美综合亚洲图片综合区| 一区二区在线免费观看| 色婷婷综合久久久中文一区二区| 中文天堂在线一区| 成人在线一区二区三区| 国产日韩欧美一区二区三区乱码| 国产精品中文有码| 欧美国产精品劲爆| 不卡av在线免费观看| 国产精品久久久久影视| 成人免费观看视频| 18成人在线视频| 99久久精品国产网站| 亚洲三级在线看| 欧美在线观看你懂的| 天天色天天操综合| 欧美一二三在线| 韩国毛片一区二区三区| 久久久久久久一区| 丁香网亚洲国际| 亚洲私人影院在线观看| 欧美揉bbbbb揉bbbbb| 热久久免费视频| 国产日本欧美一区二区| 99精品视频在线播放观看| 亚洲另类一区二区| 91精品国产入口| 经典一区二区三区| 中文字幕中文字幕在线一区| 欧美性xxxxxxxx| 蜜桃精品在线观看| 国产精品视频在线看| 欧美性一区二区| 韩国精品主播一区二区在线观看| 中文字幕在线观看一区| 欧美日韩一区二区电影| 精品夜夜嗨av一区二区三区| 国产女同性恋一区二区| 欧美优质美女网站| 国产精品影视在线| 午夜不卡在线视频| 日本一区二区免费在线| 欧美亚洲国产bt| 床上的激情91.| 日韩精品乱码av一区二区| 国产精品理伦片| 欧美一级日韩免费不卡| 91首页免费视频| 国产精品一区二区在线播放| 亚洲综合色视频| 国产精品久久久久久久久免费丝袜 | 亚洲午夜久久久久中文字幕久| 日韩欧美在线网站| 色哟哟一区二区在线观看| 精品中文av资源站在线观看| 亚洲人成精品久久久久| 日韩三级在线观看| 91精彩视频在线观看| 久久国产婷婷国产香蕉| 一级女性全黄久久生活片免费| 国产色综合一区| 这里是久久伊人| 日本韩国欧美在线| 国产福利一区在线| 久久精品国产免费| 亚洲成a人在线观看| 日韩理论在线观看| 亚洲国产精品成人综合色在线婷婷 | 久久蜜桃av一区二区天堂| 欧美性淫爽ww久久久久无| 成人国产电影网| 国产suv精品一区二区三区| 日本欧美一区二区三区乱码| 亚洲国产毛片aaaaa无费看| 亚洲视频1区2区| 一区精品在线播放| 中文字幕国产精品一区二区| 欧美xxxxxxxx| 日韩欧美国产综合一区 | 色综合天天视频在线观看 | 欧美激情综合网| 久久免费精品国产久精品久久久久| 555夜色666亚洲国产免| 欧美日韩亚州综合| 欧美性感一区二区三区| 在线观看日韩电影| 欧美日韩一级片在线观看| 欧美伊人久久久久久午夜久久久久| 91免费看片在线观看| 99久久99久久精品免费看蜜桃| 国产99久久久国产精品潘金| 国内精品自线一区二区三区视频| 九九热在线视频观看这里只有精品| 视频在线观看一区| 免费成人在线网站| 久久99国产精品尤物| 激情深爱一区二区| 成人午夜私人影院| 99视频一区二区三区| 色综合咪咪久久| 欧洲一区在线观看| 69堂精品视频| 久久九九全国免费| 日韩一区中文字幕| 亚洲一区二区三区四区的| 午夜免费久久看| 狠狠色2019综合网| 成人国产精品免费观看| 91传媒视频在线播放| 欧美一区二区三区在线观看| 久久在线观看免费| 玉足女爽爽91| 久久成人免费网| 99久久婷婷国产综合精品| 91麻豆精品视频| 宅男在线国产精品| 国产精品青草综合久久久久99| 亚洲人一二三区| 日本不卡123| 成人黄色小视频| 欧美精品日韩一本| 欧美激情一区在线观看| 亚洲福利视频导航| 国产精品538一区二区在线| 91在线无精精品入口| 日韩小视频在线观看专区| 中文字幕免费观看一区| 午夜精品久久久久久久久久| 国产在线视频一区二区| 色综合久久综合网97色综合 | 久久丁香综合五月国产三级网站| 成人永久看片免费视频天堂| 欧美日韩精品高清| 国产精品福利在线播放| 日本网站在线观看一区二区三区| 不卡视频在线观看| 欧美一区二区黄色| 一区二区三区不卡视频| 国内不卡的二区三区中文字幕 | 精品蜜桃在线看| 一区二区三区自拍| 成人午夜大片免费观看| 91精品婷婷国产综合久久竹菊| 亚洲视频一区二区在线观看| 国产制服丝袜一区| 欧美一级国产精品| 夜夜夜精品看看| www.久久精品| 国产三级久久久| 精品制服美女丁香| 亚洲欧洲日韩一区二区三区| 老司机精品视频在线| 欧美在线视频全部完| 中文字幕日韩一区二区| 国产精品伊人色| 精品国产亚洲在线| 日韩国产欧美一区二区三区| 日本久久一区二区| 中文字幕在线播放不卡一区| 国产成人一级电影| wwww国产精品欧美| 精品一区二区日韩| 91麻豆精品国产91久久久久久| 亚洲精品日韩一| 99re6这里只有精品视频在线观看| 欧美电影免费观看完整版| 日韩精品1区2区3区| 欧美疯狂做受xxxx富婆| 亚洲mv大片欧洲mv大片精品| 欧美在线你懂得| 亚洲福利视频导航| 欧美日韩色综合| 亚洲综合激情小说| 色美美综合视频| 亚洲欧美偷拍卡通变态|