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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? i2c_master_bit_ctrl.vhd

?? nios ii sopc關(guān)于ISP1362和DM9000A的工程
?? VHD
字號:
---------------------------------------------------------------------
----                                                             ----
----  WISHBONE revB2 compl. I2C Master Core; bit-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_bit_ctrl.vhd,v 1.1 2004/09/23 07:22:48 acroslan Exp $
--
--  $Date: 2004/09/23 07:22:48 $
--  $Revision: 1.1 $
--  $Author: acroslan $
--  $Locker:  $
--  $State: Exp $
--
-- Change History:
--               $Log: i2c_master_bit_ctrl.vhd,v $
--               Revision 1.1  2004/09/23 07:22:48  acroslan
--               I2C checked in
--
--               Revision 1.3  2002/10/30 18:09:53  rherveille
--               Fixed some reported minor start/stop generation timing issuess.
--
--               Revision 1.2  2002/06/15 07:37:04  rherveille
--               Fixed a small timing bug in the bit controller.\nAdded verilog simulation environment.
--
--               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.
--


--
-------------------------------------
-- Bit controller section
------------------------------------
--
-- Translate simple commands into SCL/SDA transitions
-- Each command has 5 states, A/B/C/D/idle
--
-- start:	SCL	~~~~~~~~~~\____
--	SDA	~~~~~~~~\______
--		 x | A | B | C | D | i
--
-- repstart	SCL	____/~~~~\___
--	SDA	__/~~~\______
--		 x | A | B | C | D | i
--
-- stop	SCL	____/~~~~~~~~
--	SDA	==\____/~~~~~
--		 x | A | B | C | D | i
--
--- write	SCL	____/~~~~\____
--	SDA	==X=========X=
--		 x | A | B | C | D | i
--
--- read	SCL	____/~~~~\____
--	SDA	XXXX=====XXXX
--		 x | A | B | C | D | i
--

-- Timing:      Normal mode     Fast mode
-----------------------------------------------------------------
-- Fscl         100KHz          400KHz
-- Th_scl       4.0us           0.6us   High period of SCL
-- Tl_scl       4.7us           1.3us   Low period of SCL
-- Tsu:sta      4.7us           0.6us   setup time for a repeated start condition
-- Tsu:sto      4.0us           0.6us   setup time for a stop conditon
-- Tbuf         4.7us           1.3us   Bus free time between a stop and start condition
--

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

entity i2c_master_bit_ctrl is
	generic(
		Tcq : time := 1 ns
	);
	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;
		busy    : out std_logic;

		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 entity i2c_master_bit_ctrl;

architecture structural of i2c_master_bit_ctrl is
	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";

	type states is (idle, start_a, start_b, start_c, start_d, start_e, 
	                stop_a, stop_b, stop_c, stop_d, rd_a, rd_b, rd_c, rd_d, wr_a, wr_b, wr_c, wr_d);
	signal c_state : states;

	signal iscl_oen, isda_oen : std_logic;          -- internal I2C lines
	signal sSCL, sSDA         : std_logic;          -- synchronized SCL and SDA inputs
	signal dscl_oen           : std_logic;          -- delayed scl_oen signals

	signal clk_en, slave_wait :std_logic;           -- clock generation signals
--	signal cnt : unsigned(15 downto 0) := clk_cnt;  -- clock divider counter (simulation)
	signal cnt : unsigned(15 downto 0);             -- clock divider counter (synthesis)

begin
	-- synchronize SCL and SDA inputs
	synch_scl_sda: process(clk)
	begin
	    if (clk'event and clk = '1') then
	      sSCL <= scl_i after Tcq;
	      sSDA <= sda_i after Tcq;
	    end if;
	end process synch_SCL_SDA;

	-- delay scl_oen
	process (clk)
	begin
	    if (clk'event and clk = '1') then
	      dscl_oen <= iscl_oen after Tcq;
	    end if;
	end process;

	-- whenever the slave is not ready it can delay the cycle by pulling SCL low
	slave_wait <= dscl_oen and not sSCL;

	-- generate clk enable signal
	gen_clken: process(clk, nReset)
	begin
	    if (nReset = '0') then
	      cnt    <= (others => '0') after Tcq;
	      clk_en <= '1' after Tcq;
	    elsif (clk'event and clk = '1') then
	      if (rst = '1') then
	        cnt    <= (others => '0') after Tcq;
	        clk_en <= '1' after Tcq;
	      else
	        if ( (cnt = 0) or (ena = '0') ) then
	          clk_en <= '1' after Tcq;
	          cnt    <= clk_cnt after Tcq;
	        else
	          if (slave_wait = '0') then
	            cnt <= cnt -1 after Tcq;
	          end if;
	          clk_en <= '0' after Tcq;
	        end if;
	      end if;
	    end if;
	end process gen_clken;


	-- generate bus status controller
	bus_status_ctrl: block
	  signal dSDA : std_logic;
	  signal sta_condition : std_logic;
	  signal sto_condition : std_logic;

	  signal ibusy : std_logic;
	begin
	    -- detect start condition => detect falling edge on SDA while SCL is high
	    -- detect stop condition  => detect rising edge on SDA while SCL is high
	    detect_sta_sto: process(clk)
	    begin
	        if (clk'event and clk = '1') then
	          dSDA <= sSDA; -- generate a delayed version of sSDA

	          sta_condition <= (not sSDA and dSDA) and sSCL;
	          sto_condition <= (sSDA and not dSDA) and sSCL;
	        end if;
	    end process detect_sta_sto;

	    -- generate bus busy signal
	    gen_busy: process(clk, nReset)
	    begin
	        if (nReset = '0') then
	          ibusy <= '0' after Tcq;
	        elsif (clk'event and clk = '1') then
	          if (rst = '1') then
	            ibusy <= '0' after Tcq;
	          else
	            ibusy <= (sta_condition or ibusy) and not sto_condition after Tcq;
	          end if;
	        end if;
	    end process gen_busy;

	    -- assign output
	    busy <= ibusy;
	end block bus_status_ctrl;


	-- generate statemachine
	nxt_state_decoder : process (clk, nReset, c_state, cmd)
	  variable nxt_state : states;
	  variable icmd_ack, store_sda : std_logic;
	begin
	    nxt_state := c_state;

	    icmd_ack := '0'; -- default no acknowledge

	    store_sda := '0';

	    case (c_state) is
	      -- idle
	      when idle =>
	        case cmd is
	          when I2C_CMD_START =>
	            nxt_state := start_a;

	          when I2C_CMD_STOP =>
	            nxt_state := stop_a;

	          when I2C_CMD_WRITE =>
	            nxt_state := wr_a;

	          when I2C_CMD_READ =>
	            nxt_state := rd_a;

	          when others =>  -- NOP command
	            nxt_state := idle;
	        end case;

	      -- start
	      when start_a =>
	        nxt_state := start_b;

	      when start_b =>
	        nxt_state := start_c;

	      when start_c =>
	        nxt_state := start_d;

	      when start_d =>
	        nxt_state := start_e;

	      when start_e =>
	        nxt_state := idle;
	        icmd_ack := '1'; -- command completed

	      -- stop
	      when stop_a =>
	        nxt_state := stop_b;

	      when stop_b =>
	        nxt_state := stop_c;

	      when stop_c =>
	        nxt_state := stop_d;

	      when stop_d =>
	        nxt_state := idle;
	        icmd_ack := '1'; -- command completed

	      -- read
	      when rd_a =>
	        nxt_state := rd_b;

	      when rd_b =>
	        nxt_state := rd_c;

	      when rd_c =>
	        nxt_state := rd_d;
	        store_sda := '1';

	      when rd_d =>
	        nxt_state := idle;
	        icmd_ack := '1'; -- command completed

	      -- write
	      when wr_a =>
	        nxt_state := wr_b;

	      when wr_b =>
	        nxt_state := wr_c;

	      when wr_c =>
	        nxt_state := wr_d;

	      when wr_d =>
	        nxt_state := idle;
	        icmd_ack := '1'; -- command completed

	    end case;

	    -- generate regs
	    if (nReset = '0') then
	      c_state <= idle after Tcq;
	      cmd_ack <= '0' after Tcq;
	      Dout    <= '0' after Tcq;
	    elsif (clk'event and clk = '1') then
	      if (rst = '1') then
	        c_state <= idle after Tcq;
	        cmd_ack <= '0' after Tcq;
	        Dout    <= '0' after Tcq;
	      elsif (clk_en = '1') then
	        c_state <= nxt_state after Tcq;

	        if (store_sda = '1') then
	          dout <= sSDA after Tcq;
	        end if;
	      end if;

	      cmd_ack <= icmd_ack and clk_en;
	    end if;
	end process nxt_state_decoder;

	--
	-- convert states to SCL and SDA signals
	--
	output_decoder: process (clk, nReset, c_state, iscl_oen, isda_oen, din)
	  variable iscl, isda : std_logic;
	begin
	    case (c_state) is
	      -- idle
	      when idle =>
	        iscl := iscl_oen; -- keep SCL in same state
	        isda := isda_oen; -- keep SDA in same state

	      -- start
	      when start_a =>
	        iscl := iscl_oen; -- keep SCL in same state (for repeated start)
	        isda := '1';      -- set SDA high

	      when start_b =>
	        iscl := '1'; -- set SCL high
	        isda := '1'; -- keep SDA high

	      when start_c =>
	        iscl := '1'; -- keep SCL high
	        isda := '0'; -- set SDA low

	      when start_d =>
	        iscl := '1'; -- keep SCL high
	        isda := '0'; -- keep SDA low

	      when start_e =>
	        iscl := '0'; -- set SCL low
	        isda := '0'; -- keep SDA low

	      -- stop
	      when stop_a =>
	        iscl := '0'; -- keep SCL disabled
	        isda := '0'; -- set SDA low

	      when stop_b =>
	         iscl := '1'; -- set SCL high
	         isda := '0'; -- keep SDA low

	      when stop_c =>
	         iscl := '1'; -- keep SCL high
	         isda := '0'; -- keep SDA low

	      when stop_d =>
	        iscl := '1'; -- keep SCL high
	        isda := '1'; -- set SDA high

	      -- write
	      when wr_a =>
	        iscl := '0'; -- keep SCL low
	        isda := din; -- set SDA

	      when wr_b =>
	        iscl := '1'; -- set SCL high
	        isda := din; -- keep SDA

	      when wr_c =>
	        iscl := '1'; -- keep SCL high
	        isda := din; -- keep SDA

	      when wr_d =>
	        iscl := '0'; -- set SCL low
	        isda := din; -- keep SDA

	      -- read
	      when rd_a =>
	        iscl := '0'; -- keep SCL low
	        isda := '1'; -- tri-state SDA

	      when rd_b =>
	        iscl := '1'; -- set SCL high
	        isda := '1'; -- tri-state SDA

	      when rd_c =>
	        iscl := '1'; -- keep SCL high
	        isda := '1'; -- tri-state SDA

	      when rd_d =>
	        iscl := '0'; -- set SCL low
	        isda := '1'; -- tri-state SDA
	    end case;

	    -- generate registers
	    if (nReset = '0') then
	      iscl_oen <= '1' after Tcq;
	      isda_oen <= '1' after Tcq;
	    elsif (clk'event and clk = '1') then
	      if (rst = '1') then
	        iscl_oen <= '1' after Tcq;
	        isda_oen <= '1' after Tcq;
	      elsif (clk_en = '1') then
	        iscl_oen <= iscl after Tcq;
	        isda_oen <= isda after Tcq;
	      end if;
	    end if;
	end process output_decoder;

	-- assign outputs
	scl_o   <= '0';
	scl_oen <= iscl_oen;
	sda_o   <= '0';
	sda_oen <= isda_oen;
end architecture structural;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文成人av在线| 欧美日韩三级在线| 国产亚洲精品aa| 国产91高潮流白浆在线麻豆| 国产欧美日韩在线视频| 成人午夜电影小说| 亚洲欧美日韩国产一区二区三区| 91麻豆国产自产在线观看| 亚洲综合精品自拍| 欧美成人精品高清在线播放| 国产精品一品二品| 亚洲欧美国产毛片在线| 欧美日韩国产a| 国产在线精品一区在线观看麻豆| 中文字幕 久热精品 视频在线| 色婷婷久久久久swag精品| 午夜伊人狠狠久久| 久久综合九色欧美综合狠狠| 91玉足脚交白嫩脚丫在线播放| 亚洲一区二区不卡免费| 精品久久久久久久久久久院品网| 国产v日产∨综合v精品视频| 亚洲精品va在线观看| 日韩欧美一二区| 91小宝寻花一区二区三区| 日本午夜一本久久久综合| 亚洲日本电影在线| 日韩欧美区一区二| 91在线视频免费91| 久久99蜜桃精品| 亚洲天堂免费在线观看视频| 日韩美女一区二区三区四区| 99在线视频精品| 精品影视av免费| 一区二区三区国产精品| 国产亚洲综合av| 在线播放国产精品二区一二区四区| 国产综合色在线| 日本午夜精品视频在线观看| 亚洲国产精品久久不卡毛片| 91麻豆精品国产91久久久久| 粉嫩aⅴ一区二区三区四区| 亚洲成人资源网| 国产精品另类一区| 欧美精品一区二区三| 欧美午夜精品久久久久久超碰 | 色综合一个色综合| 精品一区二区三区久久| 亚洲国产人成综合网站| 国产精品久久久久久久久快鸭| 欧美一区二区精品| 欧美在线观看视频一区二区三区| 高清视频一区二区| 精品一区二区三区免费| 三级亚洲高清视频| 亚洲精品日产精品乱码不卡| 中文乱码免费一区二区 | 久久久久久久免费视频了| 欧美日韩另类一区| 色噜噜狠狠色综合欧洲selulu| 国产高清一区日本| 黄色成人免费在线| 久久97超碰国产精品超碰| 五月综合激情婷婷六月色窝| 亚洲一区电影777| 一区二区视频免费在线观看| 日本一区二区综合亚洲| 久久久久久久免费视频了| 精品处破学生在线二十三| 日韩一区二区三区精品视频| 欧美日韩mp4| 在线成人免费视频| 在线电影一区二区三区| 欧美一区二区精品在线| 日韩午夜在线观看视频| 欧美一卡二卡在线| 日韩欧美中文字幕精品| 日韩欧美你懂的| 久久只精品国产| 26uuu欧美| 亚洲国产成人私人影院tom| 国产欧美中文在线| 国产精品久久久久久久久果冻传媒| 亚洲国产精品高清| 亚洲手机成人高清视频| 亚洲永久免费视频| 亚洲高清不卡在线| 强制捆绑调教一区二区| 蜜桃传媒麻豆第一区在线观看| 麻豆精品久久精品色综合| 激情丁香综合五月| 国产成a人无v码亚洲福利| 成人av电影在线| 91久久国产综合久久| 欧美在线三级电影| 日韩三级中文字幕| 国产色产综合产在线视频| ㊣最新国产の精品bt伙计久久| 亚洲女爱视频在线| 午夜电影一区二区三区| 激情偷乱视频一区二区三区| 粗大黑人巨茎大战欧美成人| 在线观看一区日韩| 日韩一区二区免费高清| 国产日韩欧美在线一区| 一区二区三区中文字幕电影| 免费观看成人鲁鲁鲁鲁鲁视频| 国产精品亚洲专一区二区三区| 91麻豆免费观看| 欧美大肚乱孕交hd孕妇| 中文字幕亚洲一区二区va在线| 亚洲国产成人精品视频| 国产精品影视在线观看| 在线日韩一区二区| 久久综合九色综合欧美98| 一区二区高清在线| 精品在线视频一区| 欧美中文字幕一区二区三区| 精品电影一区二区| 亚洲无人区一区| 国产白丝网站精品污在线入口| 欧美性xxxxxx少妇| 欧美激情在线一区二区三区| 亚洲高清不卡在线观看| 成人午夜电影久久影院| 91精品国产91久久久久久一区二区| 中文在线资源观看网站视频免费不卡| 天天综合日日夜夜精品| aaa欧美色吧激情视频| 精品少妇一区二区三区视频免付费 | 日本久久一区二区三区| 久久综合久久鬼色| 石原莉奈在线亚洲三区| 91免费视频网址| 久久九九99视频| 青青草97国产精品免费观看无弹窗版| 9l国产精品久久久久麻豆| 久久久精品国产免费观看同学| 亚洲成人综合在线| 91伊人久久大香线蕉| 精品播放一区二区| 日韩精品福利网| 欧美日韩中文字幕精品| 亚洲美女在线国产| 国产成人欧美日韩在线电影| 欧美一卡二卡三卡四卡| 亚洲成av人片一区二区三区| 91网上在线视频| 中文字幕欧美一| 成人午夜又粗又硬又大| 久久精品亚洲麻豆av一区二区 | 国产成人免费视频| 久久综合色8888| 蜜乳av一区二区| 欧美精品1区2区3区| 亚洲第一激情av| 在线观看免费亚洲| 洋洋av久久久久久久一区| 91亚洲永久精品| 亚洲欧美福利一区二区| 91在线porny国产在线看| 亚洲欧美视频在线观看视频| 91亚洲大成网污www| 亚洲免费观看高清完整版在线观看熊 | 亚洲精品国久久99热| 97精品超碰一区二区三区| 亚洲视频一区二区在线| 91麻豆.com| 亚洲午夜免费福利视频| 欧美午夜寂寞影院| 午夜精品福利久久久| 欧美精品在线观看播放| 日韩国产在线一| 欧美大片日本大片免费观看| 国产一区二区在线电影| 久久久91精品国产一区二区精品 | 午夜日韩在线电影| 欧美放荡的少妇| 蜜桃精品视频在线观看| 精品99一区二区| 国产大陆亚洲精品国产| 国产精品传媒入口麻豆| 欧美怡红院视频| 日本免费在线视频不卡一不卡二| 日韩女优视频免费观看| 国产福利一区二区三区在线视频| 国产精品久久久久影视| 91极品视觉盛宴| 免费的成人av| 国产日韩成人精品| 日本精品免费观看高清观看| 亚洲一区二区三区国产| 欧美mv日韩mv亚洲| 成a人片国产精品| 亚洲国产一区二区视频| 精品三级在线看| 97国产一区二区| 蜜臀精品一区二区三区在线观看 | 麻豆视频观看网址久久| 亚洲国产精品二十页|