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

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

?? i2c_slave.v

?? I2c中通信的從機發送和接收信息的Verilog程序測試模塊
?? V
?? 第 1 頁 / 共 2 頁
字號:
//----------------------------------------------------------------------------
// 
//  Name:  i2c_slave.v   
// 
//  Description: I2C slave simulation model for I2C serial controller
// 
//  $Revision: 1.0 $          
//  
//  Copyright 2004 Lattice Semiconductor Corporation.  All rights reserved.
//
//----------------------------------------------------------------------------
// Permission:
//
//   Lattice Semiconductor grants permission to use this code for use
//   in synthesis for any Lattice programmable logic product.  Other
//   use of this code, including the selling or duplication of any
//   portion is strictly prohibited.
//
// Disclaimer:
//
//   This VHDL or Verilog source code is intended as a design reference
//   which illustrates how these types of functions can be implemented.
//   It is the user's responsibility to verify their design for
//   consistency and functionality through the use of formal
//   verification methods.  Lattice Semiconductor provides no warranty
//   regarding the use or functionality of this code.
//----------------------------------------------------------------------------
//
//    Lattice Semiconductor Corporation
//    5555 NE Moore Court
//    Hillsboro, OR 97124
//    U.S.A
//
//    TEL: 1-800-Lattice (USA and Canada)
//    408-826-6000 (other locations)
//
//    web: http://www.latticesemi.com/
//    email: techsupport@latticesemi.com
// 
//----------------------------------------------------------------------------

`timescale  1 ns /  1 ps

/*
This is a generic standard mode slave model for I2C.

*/

module i2c_slave   (     scl,
                         sda);

//-------------------------------------------------------------------
// port list

input   scl;
inout   sda;


//-------------------------------------------------------------------
// wire declarations

wire            scl;
wire            sda;

//-------------------------------------------------------------------
// reg declarations

reg clk, rst_l;
reg [7:0] mem [255:0]; // 2^8 = 256 locations
reg [7:0] word_address; // counts the active byte 
reg start_detect;
reg stop_detect;
reg sda_reg, sda_reg_delayed;
reg scl_reg, scl_reg_delayed;
reg start_pulse, stop_pulse, scl_pulse, scl_neg_pulse;
reg [6:0] address_reg_7;  // All 7 Bits of 7 bit addressing
reg [9:0] temp10;
reg [6:0] address_reg_10_upper; // Upper 2 bits of address
reg [7:0] address_reg_10_lower; // lower 8 bits of address
reg [3:0] current_state, next_state;
reg [7:0] in_reg, out_reg; // registers used to hold the input
                           // and output data to-from the sda line
reg [3:0] bit_counter; // Used to counter what bit is being selected
                       // for the in_reg and out_reg
reg r_w_bit; // used to hold the read write bit;
reg hit_7, hit_10_upper, hit_10_lower; // flags for address hits
reg sda_out;
reg in_reg_enable; // the clock enable for the in_reg registers.
reg out_en; // the output enable
reg word_add_flag, ack_flag;
reg [7:1] temp_add_upper; 
reg [7:0] temp_add_lower; // temp_add_upper & temp_add_lower are
                     // used to hold the first & 
                     // second address bytes of 10 bit
                    // addressing so that during a 10 bit addressing
                    // read the value of the current 10 bit address
                    // can be compared with the last read.
reg read_10_flag; // This flag is set when the temp_add matches the current 
                  // address_reg_10_upper and the r/w is a 1.  This tells
                  // the ack to goto a data read state instead of getting
                  // the second byte of address.

//-------------------------------------------------------------------
// misc variables
integer i;


//-------------------------------------------------------------------
// defines

  // used for address_mode parameter
`define seven_bit 0 
  // used for address_mode parameter
`define ten_bit 1 
  // used in upper 5 bits of address_reg_10_upper 
  // DON'T CHANGE
`define ten_bit_add 5'b11110
 // a 1 turns this on and a 0 off
`define debug 0

//-------------------------------------------------------------------
// parameters 

parameter period = 30;          // using 33 MHz
parameter reset_time = 20;   // hold reset low this long

// DESIGNER SET the following parameter to use 7 or 10 bit addressing
parameter address_mode = `seven_bit; // Use `seven_bit or `ten_bit

// depending on the value in address_mode either seven_bit_address or 
// ten_bit_address will be used.

// DESIGNER SET the next parameter with the 7 bit address the slave
// should respond to. MSB->LSB
// example: 7'b1010_000; 
parameter seven_bit_address = 7'b1010_000;

// DESIGNER SET the next parameter with the 10 bit address the slave
// should respond to. MSB->LSB
// example: 10'b10_1100_1010;
parameter ten_bit_address = 10'b10_1100_1010;

// state bits
parameter [4:0] idle = 0, 
                start = 1,
                address = 2,
                ack = 3,
                data = 4,
                data_ack = 5;
                
parameter tdh = 100; // tdh = data out hold time min


//-------------------------------------------------------------------
// internal clock for the model

always #(period/2) clk = ~clk;


//------------------------------------------------------------------
// print some status
always @(posedge scl)
 if (`debug) begin 
   $display($time,"%m: Received Clock Data = %b",sda);
 end


//-------------------------------------------------------------------
// initialize the address registers, mem array, clk and control the reset

initial 
  begin
    
    // initialize the address registers
    if (address_mode == `seven_bit) begin 
      $display("%m Using 7 Bit Addressing");
      address_reg_7 = seven_bit_address;
    end
    else if (address_mode == `ten_bit) begin 
      $display("%m Using 10 Bit Addressing");
      temp10 = ten_bit_address;
      address_reg_10_upper = {`ten_bit_add, temp10[9:8]}; // 2 MSB
      address_reg_10_lower = temp10[7:0];
    end
    else begin 
      $display( "/n ERROR: address_mode parameter is INVALID in %m !! /n");
    end
    
    // initialize the mem array
    for (i = 0; i < 256; i = i + 1) begin 
      mem[i] = i;  
    end
 
    r_w_bit = 1'b0;
    out_reg = 8'b0;
    out_en = 0; // disable output
    bit_counter = 0;
    word_address = 8'b0; // initialize byte #
    word_add_flag = 0;
    ack_flag = 0;
    in_reg_enable = 0;
    temp_add_upper = 0;
    temp_add_lower = 0;
    read_10_flag = 0;
    hit_10_upper = 0;
    hit_10_lower = 0;
    hit_7 = 0;
    clk = 1'b0;  // initalize clock
    next_state = 5'b0;
    rst_l = 1'b0;  // turn on reset signal 
    #reset_time;                           
    rst_l = 1'b1; // turn off reset signal
    
  end             



//-------------------------------------------------------------------------
// sda_out is an internal reg that is assigned a 0 when the output should be
// 0 and it assigns a Z otherwise.

assign sda = (sda_out == 0 && out_en) ? 1'b0 : 1'bZ;


//--------------------------------------------------------------------
// start and stop detect logic

always @ (posedge clk or negedge rst_l)
  begin 
    if (!rst_l) begin 
      sda_reg <= 1; // bus is active low
      sda_reg_delayed <= 1;
    end
    else begin 
      sda_reg <= sda;
      sda_reg_delayed <= sda_reg;
    end  
  end

// detect a high to low while scl is high 
// start_pulse
always @ (posedge clk or negedge rst_l)
  begin 
    
    if (!rst_l) begin 
      start_pulse = 0;
    end
    else if (!sda_reg && sda_reg_delayed && scl) begin 
      start_pulse = 1;
    end
    else begin 
      start_pulse = 0;
    end
  end

// start flag
always @ (posedge clk or negedge rst_l)
  begin 

    if (!rst_l) begin 
      start_detect <= 0;
    end
    else if (start_pulse) begin 
      start_detect <= 1;  
    end
    else if (!scl) begin 
      start_detect <= 0; // clear start bit 
    end
    else begin 
      start_detect <= start_detect;
    end
    
  end

// detect a low to high while scl is high 
// stop_pulse
always @ (posedge clk or negedge rst_l)
  begin 
    
    if (!rst_l) begin 
      stop_pulse = 0;
    end
    else if (sda_reg && !sda_reg_delayed && scl) begin 
      stop_pulse = 1;
    end
    else begin 
      stop_pulse = 0;
    end
  end

//stop flag
always @ (posedge clk or negedge rst_l)
  begin 

    if (!rst_l) begin 
      stop_detect <= 0;
    end
    else if (stop_pulse) begin 
      stop_detect <= 1;  
    end
  else if (current_state == idle) begin 
      stop_detect <= 0; // clear start bit 
    end
    
  end
  
//--------------------------------------
 

//--------------------------------------
// SCL posedge & nededge detector regs
always @ (posedge clk or negedge rst_l)
  begin 
    
    if (!rst_l) begin 
      scl_reg <= 1;
      scl_reg_delayed <= 1;
    end
    else begin
      scl_reg <= scl;
      scl_reg_delayed <= scl_reg;
    end
    
  end

// SCL posedge detector
always @ (posedge clk or negedge rst_l)
  begin 
    
    if (!rst_l) begin 
      scl_pulse <= 0;    
    end
    else if (scl_reg && !scl_reg_delayed) begin 
      scl_pulse <= 1;
    end
    else begin 
      scl_pulse <= 0; 
    end
  
  end

// SCL negedge detector
always @ (posedge clk or negedge rst_l)
  begin 
    
    if (!rst_l) begin 
      scl_neg_pulse <= 0;
    end
    else if (!scl_reg && scl_reg_delayed) begin 
      scl_neg_pulse <= 1;
    end
    else begin 
      scl_neg_pulse <= 0;
    end
    
  end

//----------------------------------------


//----------------------------------------
// Output Mux

always @ (bit_counter or out_reg)
  case (bit_counter)
    4'd0: sda_out = out_reg[7];
    4'd1: sda_out = out_reg[6];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧洲视频一区二区| 日韩欧美中文一区二区| 国产精品影视在线观看| 国产一区二区精品久久91| 免费在线观看视频一区| 美国十次综合导航| 国产成人在线免费| 成人激情免费网站| 日本韩国欧美国产| 精品视频免费看| 日韩午夜激情免费电影| 欧美刺激午夜性久久久久久久| 91麻豆精品国产自产在线| 91精品国产黑色紧身裤美女| 91影视在线播放| 久久久综合激的五月天| 国产日韩欧美精品一区| 久久精品二区亚洲w码| 亚洲人快播电影网| 日韩中文字幕91| 在线欧美一区二区| 国产精品1024| 日本道色综合久久| 91精品国产美女浴室洗澡无遮挡| 日韩午夜精品视频| 中文字幕中文在线不卡住| 亚洲综合偷拍欧美一区色| 美腿丝袜在线亚洲一区| 99久久免费视频.com| 欧美三区在线视频| 国产欧美日韩激情| 一区二区久久久久久| 国产一区二区在线观看免费| 99久久99久久精品国产片果冻 | 欧美视频中文字幕| 欧美视频一区在线观看| 欧美人伦禁忌dvd放荡欲情| 精品久久国产老人久久综合| 日本一区二区三区免费乱视频| 日韩综合在线视频| 国产精品一级二级三级| 欧美久久婷婷综合色| 国产清纯白嫩初高生在线观看91| 亚洲国产中文字幕在线视频综合| 韩国女主播成人在线| 欧美日韩在线播| 中文字幕av一区二区三区| 日本亚洲最大的色成网站www| voyeur盗摄精品| 国产亚洲人成网站| 美腿丝袜亚洲综合| 欧美日韩美少妇| 日韩一区中文字幕| 成人免费黄色大片| 久久综合狠狠综合久久激情 | 欧美日韩成人综合| 中文av字幕一区| 激情五月播播久久久精品| 777xxx欧美| 香蕉成人伊视频在线观看| 91蜜桃在线观看| 1区2区3区精品视频| 国产精品一区二区在线播放| 91精品国产aⅴ一区二区| 一区二区三区av电影| 99精品视频在线观看免费| 国产日产欧产精品推荐色| 国产在线视视频有精品| 欧美成人精品二区三区99精品| 日韩中文字幕一区二区三区| 欧美伊人久久大香线蕉综合69| 亚洲欧美一区二区三区久本道91 | 欧美视频中文一区二区三区在线观看| 国产精品国产三级国产三级人妇| 成人a区在线观看| 国产亚洲午夜高清国产拍精品| 国产精品影视在线| 国产精品另类一区| 不卡一二三区首页| 一区二区三区波多野结衣在线观看| 97久久超碰精品国产| 日韩伦理电影网| 91久久精品日日躁夜夜躁欧美| 亚洲男人的天堂av| 在线成人免费观看| 国内久久精品视频| 国产精品欧美一区二区三区| 99国产精品久久久| 午夜视黄欧洲亚洲| 欧美刺激脚交jootjob| 成人免费毛片高清视频| 亚洲色欲色欲www在线观看| 欧美日韩在线直播| 狠狠久久亚洲欧美| 国产精品久久久久永久免费观看 | 麻豆精品国产91久久久久久| 久久久精品人体av艺术| 色系网站成人免费| 蜜桃视频在线一区| 欧美激情在线看| 欧美午夜精品理论片a级按摩| 琪琪久久久久日韩精品| 2019国产精品| 欧美伊人久久久久久午夜久久久久| 蜜桃视频免费观看一区| 国产精品久久久久影视| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 日韩电影免费在线| 18涩涩午夜精品.www| 日韩欧美中文字幕制服| 99精品在线免费| 久久成人麻豆午夜电影| 亚洲资源中文字幕| 久久久久久久国产精品影院| 在线观看网站黄不卡| 国产激情91久久精品导航 | 欧美一区二区不卡视频| 成人免费看的视频| 蜜桃av一区二区在线观看| 一区二区三区国产| 国产精品人妖ts系列视频| 欧美一区二区免费观在线| 色拍拍在线精品视频8848| 精品影视av免费| 午夜精品影院在线观看| 国产精品国产a| 久久久精品2019中文字幕之3| 欧美精品三级在线观看| 色噜噜夜夜夜综合网| 国产成人综合亚洲91猫咪| 狂野欧美性猛交blacked| 亚洲成人资源网| 日韩毛片视频在线看| 国产视频一区在线播放| 日韩欧美的一区| 欧美夫妻性生活| 欧美吻胸吃奶大尺度电影| 白白色亚洲国产精品| 成人免费黄色在线| 成人免费黄色大片| 成人av网站在线| 国产·精品毛片| 国产91丝袜在线观看| 国产成人激情av| 丁香婷婷综合激情五月色| 国产美女视频91| 国产自产视频一区二区三区 | 国产精品乱码妇女bbbb| 国产午夜精品久久久久久免费视 | 综合久久久久综合| 国产精品不卡在线观看| 国产精品乱码一区二区三区软件 | 欧美大片一区二区三区| 日韩精品一区二区三区视频播放| 欧美一区二区三区免费观看视频 | 中文字幕av不卡| 中文字幕视频一区| 亚洲精品中文在线观看| 亚洲精品免费视频| 亚洲一区二区三区免费视频| 天堂一区二区在线| 久久99精品久久久久久动态图 | 色婷婷综合五月| 欧美系列一区二区| 日韩一级片网站| 欧美激情一区二区三区不卡| 国产精品久久久久久一区二区三区| 国产精品国产三级国产普通话蜜臀 | 国产欧美一区二区在线| 久久久久国产精品麻豆| 亚洲欧洲精品一区二区三区| 亚洲人xxxx| 亚洲成a人v欧美综合天堂| 老司机午夜精品99久久| 国产精品白丝av| 色天使色偷偷av一区二区| 91精品国产综合久久精品麻豆| 欧美成人vps| 国产精品大尺度| 偷拍日韩校园综合在线| 国产在线国偷精品产拍免费yy | 免费黄网站欧美| 国产黄人亚洲片| 色拍拍在线精品视频8848| 精品日韩一区二区三区| 亚洲视频一区二区在线| 久久精品999| 色菇凉天天综合网| 欧美不卡一区二区三区四区| 欧美激情艳妇裸体舞| 日韩高清在线不卡| 99久久99久久精品免费观看| 日韩欧美亚洲国产精品字幕久久久| 国产精品女人毛片| 精品综合久久久久久8888| 91精品办公室少妇高潮对白| 精品精品国产高清a毛片牛牛 | 男女男精品网站| 日本精品一区二区三区高清| 国产夜色精品一区二区av|