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

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

?? i2c_slave_model.v

?? 來自opencore網(wǎng)站的I2C總線模塊
?? V
字號(hào):
/////////////////////////////////////////////////////////////////////////                                                             ////////  WISHBONE rev.B2 compliant synthesizable I2C Slave model    ////////                                                             ////////                                                             ////////  Authors: Richard Herveille (richard@asics.ws) www.asics.ws ////////           John Sheahan (jrsheahan@optushome.com.au)         ////////                                                             ////////  Downloaded from: http://www.opencores.org/projects/i2c/    ////////                                                             /////////////////////////////////////////////////////////////////////////////                                                             //////// Copyright (C) 2001,2002 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_slave_model.v,v 1.7 2006/09/04 09:08:51 rherveille Exp $////  $Date: 2006/09/04 09:08:51 $//  $Revision: 1.7 $//  $Author: rherveille $//  $Locker:  $//  $State: Exp $//// Change History://               $Log: i2c_slave_model.v,v $//               Revision 1.7  2006/09/04 09:08:51  rherveille//               fixed (n)ack generation////               Revision 1.6  2005/02/28 11:33:48  rherveille//               Fixed Tsu:sta timing check.//               Added Thd:sta timing check.////               Revision 1.5  2003/12/05 11:05:19  rherveille//               Fixed slave address MSB='1' bug////               Revision 1.4  2003/09/11 08:25:37  rherveille//               Fixed a bug in the timing section. Changed 'tst_scl' into 'tst_sto'.////               Revision 1.3  2002/10/30 18:11:06  rherveille//               Added timing tests to i2c_model.//               Updated testbench.////               Revision 1.2  2002/03/17 10:26:38  rherveille//               Fixed some race conditions in the i2c-slave model.//               Added debug information.//               Added headers.//`include "timescale.v"module i2c_slave_model (scl, sda);	//	// parameters	//	parameter I2C_ADR = 7'b001_0000;	//	// input && outpus	//	input scl;	inout sda;	//	// Variable declaration	//	wire debug = 1'b1;	reg [7:0] mem [3:0]; // initiate memory	reg [7:0] mem_adr;   // memory address	reg [7:0] mem_do;    // memory data output	reg sta, d_sta;	reg sto, d_sto;	reg [7:0] sr;        // 8bit shift register	reg       rw;        // read/write direction	wire      my_adr;    // my address called ??	wire      i2c_reset; // i2c-statemachine reset	reg [2:0] bit_cnt;   // 3bit downcounter	wire      acc_done;  // 8bits transfered	reg       ld;        // load downcounter	reg       sda_o;     // sda-drive level	wire      sda_dly;   // delayed version of sda	// statemachine declaration	parameter idle        = 3'b000;	parameter slave_ack   = 3'b001;	parameter get_mem_adr = 3'b010;	parameter gma_ack     = 3'b011;	parameter data        = 3'b100;	parameter data_ack    = 3'b101;	reg [2:0] state; // synopsys enum_state	//	// module body	//	initial	begin	   sda_o = 1'b1;	   state = idle;	end	// generate shift register	always @(posedge scl)	  sr <= #1 {sr[6:0],sda};	//detect my_address	assign my_adr = (sr[7:1] == I2C_ADR);	// FIXME: This should not be a generic assign, but rather	// qualified on address transfer phase and probably reset by stop	//generate bit-counter	always @(posedge scl)	  if(ld)	    bit_cnt <= #1 3'b111;	  else	    bit_cnt <= #1 bit_cnt - 3'h1;	//generate access done signal	assign acc_done = !(|bit_cnt);	// generate delayed version of sda	// this model assumes a hold time for sda after the falling edge of scl.	// According to the Phillips i2c spec, there s/b a 0 ns hold time for sda	// with regards to scl. If the data changes coincident with the clock, the	// acknowledge is missed	// Fix by Michael Sosnoski	assign #1 sda_dly = sda;	//detect start condition	always @(negedge sda)	  if(scl)	    begin	        sta   <= #1 1'b1;		d_sta <= #1 1'b0;		sto   <= #1 1'b0;	        if(debug)	          $display("DEBUG i2c_slave; start condition detected at %t", $time);	    end	  else	    sta <= #1 1'b0;	always @(posedge scl)	  d_sta <= #1 sta;	// detect stop condition	always @(posedge sda)	  if(scl)	    begin	       sta <= #1 1'b0;	       sto <= #1 1'b1;	       if(debug)	         $display("DEBUG i2c_slave; stop condition detected at %t", $time);	    end	  else	    sto <= #1 1'b0;	//generate i2c_reset signal	assign i2c_reset = sta || sto;	// generate statemachine	always @(negedge scl or posedge sto)	  if (sto || (sta && !d_sta) )	    begin	        state <= #1 idle; // reset statemachine	        sda_o <= #1 1'b1;	        ld    <= #1 1'b1;	    end	  else	    begin	        // initial settings	        sda_o <= #1 1'b1;	        ld    <= #1 1'b0;	        case(state) // synopsys full_case parallel_case	            idle: // idle state	              if (acc_done && my_adr)	                begin	                    state <= #1 slave_ack;	                    rw <= #1 sr[0];	                    sda_o <= #1 1'b0; // generate i2c_ack	                    #2;	                    if(debug && rw)	                      $display("DEBUG i2c_slave; command byte received (read) at %t", $time);	                    if(debug && !rw)	                      $display("DEBUG i2c_slave; command byte received (write) at %t", $time);	                    if(rw)	                      begin	                          mem_do <= #1 mem[mem_adr];	                          if(debug)	                            begin	                                #2 $display("DEBUG i2c_slave; data block read %x from address %x (1)", mem_do, mem_adr);	                                #2 $display("DEBUG i2c_slave; memcheck [0]=%x, [1]=%x, [2]=%x", mem[4'h0], mem[4'h1], mem[4'h2]);	                            end	                      end	                end	            slave_ack:	              begin	                  if(rw)	                    begin	                        state <= #1 data;	                        sda_o <= #1 mem_do[7];	                    end	                  else	                    state <= #1 get_mem_adr;	                  ld    <= #1 1'b1;	              end	            get_mem_adr: // wait for memory address	              if(acc_done)	                begin	                    state <= #1 gma_ack;	                    mem_adr <= #1 sr; // store memory address	                    sda_o <= #1 !(sr <= 15); // generate i2c_ack, for valid address	                    if(debug)	                      #1 $display("DEBUG i2c_slave; address received. adr=%x, ack=%b", sr, sda_o);	                end	            gma_ack:	              begin	                  state <= #1 data;	                  ld    <= #1 1'b1;	              end	            data: // receive or drive data	              begin	                  if(rw)	                    sda_o <= #1 mem_do[7];	                  if(acc_done)	                    begin	                        state <= #1 data_ack;	                        mem_adr <= #2 mem_adr + 8'h1;	                        sda_o <= #1 (rw && (mem_adr <= 15) ); // send ack on write, receive ack on read	                        if(rw)	                          begin	                              #3 mem_do <= mem[mem_adr];	                              if(debug)	                                #5 $display("DEBUG i2c_slave; data block read %x from address %x (2)", mem_do, mem_adr);	                          end	                        if(!rw)	                          begin	                              mem[ mem_adr[3:0] ] <= #1 sr; // store data in memory	                              if(debug)	                                #2 $display("DEBUG i2c_slave; data block write %x to address %x", sr, mem_adr);	                          end	                    end	              end	            data_ack:	              begin	                  ld <= #1 1'b1;	                  if(rw)	                    if(sr[0]) // read operation && master send NACK	                      begin	                          state <= #1 idle;	                          sda_o <= #1 1'b1;	                      end	                    else	                      begin	                          state <= #1 data;	                          sda_o <= #1 mem_do[7];	                      end	                  else	                    begin	                        state <= #1 data;	                        sda_o <= #1 1'b1;	                    end	              end	        endcase	    end	// read data from memory	always @(posedge scl)	  if(!acc_done && rw)	    mem_do <= #1 {mem_do[6:0], 1'b1}; // insert 1'b1 for host ack generation	// generate tri-states	assign sda = sda_o ? 1'bz : 1'b0;	//	// Timing checks	//	wire tst_sto = sto;	wire tst_sta = sta;	specify	  specparam normal_scl_low  = 4700,	            normal_scl_high = 4000,	            normal_tsu_sta  = 4700,	            normal_thd_sta  = 4000,	            normal_tsu_sto  = 4000,	            normal_tbuf     = 4700,	            fast_scl_low  = 1300,	            fast_scl_high =  600,	            fast_tsu_sta  = 1300,	            fast_thd_sta  =  600,	            fast_tsu_sto  =  600,	            fast_tbuf     = 1300;	  $width(negedge scl, normal_scl_low);  // scl low time	  $width(posedge scl, normal_scl_high); // scl high time	  $setup(posedge scl, negedge sda &&& scl, normal_tsu_sta); // setup start	  $setup(negedge sda &&& scl, negedge scl, normal_thd_sta); // hold start	  $setup(posedge scl, posedge sda &&& scl, normal_tsu_sto); // setup stop	  $setup(posedge tst_sta, posedge tst_sto, normal_tbuf); // stop to start time	endspecifyendmodule

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美精品一区| 亚洲一区二区av在线| 欧美日本国产视频| 成人精品一区二区三区四区 | 日韩一区二区影院| 99re热这里只有精品免费视频| 蜜桃在线一区二区三区| 亚洲精选免费视频| 久久精品免视看| 日韩久久精品一区| 欧美日韩国产欧美日美国产精品| 成人看片黄a免费看在线| 精品一区二区三区在线视频| 亚洲亚洲人成综合网络| 国产精品久久久久永久免费观看| 欧美精品一区二区久久久| 欧美精品tushy高清| 日本韩国一区二区| 色综合天天做天天爱| 国产+成+人+亚洲欧洲自线| 美日韩黄色大片| 天天操天天综合网| 亚洲午夜激情av| 亚洲欧美日韩国产另类专区| 国产精品免费视频观看| 国产色综合一区| 久久看人人爽人人| 久久亚洲二区三区| 欧美成人一区二区三区在线观看| 欧美肥妇free| 91麻豆精品国产91久久久久久 | 精品国产sm最大网站| 制服丝袜中文字幕亚洲| 在线成人小视频| 欧美喷潮久久久xxxxx| 欧美日韩国产片| 欧美日产国产精品| 91精品在线麻豆| 日韩欧美亚洲国产另类| 日韩你懂的电影在线观看| 欧美一区二区福利在线| 日韩免费观看2025年上映的电影| 日韩三级在线观看| 精品福利一区二区三区| 26uuu国产电影一区二区| 日韩精品一区二区在线| 久久久久久97三级| 国产精品福利影院| 亚洲激情校园春色| 日日夜夜免费精品视频| 久久精品国产免费看久久精品| 黑人巨大精品欧美黑白配亚洲| 国产乱子伦视频一区二区三区| 国产经典欧美精品| 97久久精品人人做人人爽50路 | 日本乱人伦一区| 91官网在线观看| 欧美精品免费视频| 日韩欧美国产电影| 国产日产欧美精品一区二区三区| 日本一区二区三区电影| 日韩毛片精品高清免费| 粉嫩av亚洲一区二区图片| 成人性视频免费网站| 色一区在线观看| 欧美一级欧美一级在线播放| 久久亚洲综合色一区二区三区| 国产欧美综合色| 依依成人综合视频| 日本怡春院一区二区| 国产激情一区二区三区四区 | 国产91富婆露脸刺激对白| 91亚洲永久精品| 日韩一区二区三区精品视频| 国产精品免费网站在线观看| 亚洲图片欧美一区| 高清不卡在线观看av| 欧美日韩亚洲综合在线| 国产亚洲va综合人人澡精品| 亚洲男人电影天堂| 免费观看30秒视频久久| 成人黄色小视频| 91精品婷婷国产综合久久性色| 久久久另类综合| 午夜精品在线看| 丁香一区二区三区| 日韩视频免费观看高清完整版在线观看| 亚洲国产精品成人综合| 天天综合日日夜夜精品| 成人黄页在线观看| 精品卡一卡二卡三卡四在线| 亚洲色图另类专区| 国内久久精品视频| 欧美人动与zoxxxx乱| 中文字幕在线一区免费| 激情五月激情综合网| 欧美日韩国产一级片| 中文字幕日本乱码精品影院| 精品在线免费观看| 欧美片在线播放| 一区二区在线观看av| 成人中文字幕在线| 精品国产乱码久久久久久1区2区| 亚洲小少妇裸体bbw| 99视频精品免费视频| 精品国产亚洲一区二区三区在线观看| 亚洲综合色成人| 91色porny| 亚洲国产精品成人综合 | 国产一二精品视频| 91精品国产色综合久久ai换脸| 国产精品传媒视频| 国产成人精品免费在线| 精品日韩在线观看| 麻豆专区一区二区三区四区五区| 欧美在线你懂得| 中文字幕亚洲综合久久菠萝蜜| 国产一区二三区好的| 欧美成人国产一区二区| 青青草视频一区| 欧美日韩不卡在线| 亚洲一线二线三线视频| 99久久久免费精品国产一区二区| 国产午夜亚洲精品不卡| 精品伊人久久久久7777人| 日韩视频在线你懂得| 男人的天堂亚洲一区| 欧美丰满高潮xxxx喷水动漫| 午夜国产不卡在线观看视频| 欧美三级韩国三级日本三斤| 亚洲福中文字幕伊人影院| 欧美在线视频你懂得| 亚洲一区二区三区爽爽爽爽爽 | 久久久99久久| 国产主播一区二区三区| 久久久久久久电影| 高清在线不卡av| 国产精品传媒入口麻豆| 色婷婷综合五月| 亚洲国产视频在线| 91精品国产免费| 久99久精品视频免费观看| 久久久久国产一区二区三区四区| 国产成人自拍在线| 成人免费在线视频| 欧美私模裸体表演在线观看| 亚洲五月六月丁香激情| 欧美一区二区三区四区久久| 美女免费视频一区| 国产色产综合色产在线视频| 成人高清免费观看| 一区二区三区欧美视频| 欧美日韩亚洲综合在线| 精品一区二区三区免费视频| 国产亚洲女人久久久久毛片| aaa国产一区| 亚洲成人第一页| 日韩色在线观看| 成人一区二区视频| 亚洲一区欧美一区| 日韩亚洲欧美一区二区三区| 国产精品一级二级三级| 亚洲欧美经典视频| 91精品久久久久久蜜臀| 国产成人亚洲精品青草天美| 亚洲欧洲精品一区二区三区不卡| 欧美在线一区二区| 国内欧美视频一区二区| 亚洲三级在线看| 欧美一卡二卡三卡| 99精品视频一区| 琪琪久久久久日韩精品| 国产精品护士白丝一区av| 欧美日韩一区二区在线观看视频| 九九视频精品免费| 一区二区视频在线| 精品国一区二区三区| 一本到不卡免费一区二区| 日日摸夜夜添夜夜添亚洲女人| 久久久久久久久久久久电影| 色婷婷综合久久久中文字幕| 久久精品国产澳门| 一区二区久久久| 久久综合久久综合九色| 欧美日韩三级一区二区| 成人永久aaa| 精品一区二区日韩| 亚洲一区二区欧美日韩 | 国产欧美日本一区视频| 欧美日本一区二区| 99re6这里只有精品视频在线观看| 青青草原综合久久大伊人精品| 亚洲精品一二三| 中文字幕精品在线不卡| 精品区一区二区| 欧美唯美清纯偷拍| 99久久综合国产精品| 国产一区二区三区在线观看精品| 亚洲成av人片一区二区三区| 国产精品午夜免费|