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

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

?? i2c_to_gpio.v

?? I2C to GPIO Port expander的Verilog HDL 程序原碼
?? V
字號:
/************************************************************************************************************I2C to GPIO Port expander. Date: December 21, 2006.************************************************************************************************************/`timescale 1us/10ns/* Top module */module I2C_to_GPIO ( sda, sclk, GPIO_input, GPIO_output);inout sda;                        // Bidirectional SDAinput sclk;                       // Bidirectional SCLKinput [7:0] GPIO_input; output [7:0] GPIO_output;                                         parameter slave_address = 7'h0;   // can be changed as per the protocolparameter n = 8;reg start_stop;        // Indicated if the device has detected a start and is busy in some operationreg start, stop;       // Goes high temperarily when a start or stop is detectdreg some_other_device; // to reset start_stop, when the adress on the bus is different from the device address;reg repeat_start;      // to reset everything if repeat start is detected. reg write_flag;        // to set when write oper beginsreg reset;             // Used to reset the start , stop registers     reg sda_out;           // To force the SDA output Low. Remains tristated for sending High Logic.reg done;              // To Indicate data transfer donereg [3:0]count;                          // Down Counter ( 7 to 0 + ack bit ) reg [n-1:0] GPIO_output;                 // parallel storereg [n-1:0] GPIO_input_reg;              // Stores the Values at the input pins before sending to master.reg data_or_address;                     // high for data, low for addressreg sda_ack, read_oper, add_is_matching; // high for ack; high for master read; high for address matching/********************************************************************************************************?/* Detecting STOP Condition on the SDA Bus */always @ (posedge sda or posedge reset)if (reset) begin    stop <= 0;end else if (sclk) begin    stop <= 1;end/* Detecting START Condition on the SDA Bus */always @ (negedge sda or posedge reset)if (reset) begin    start <= 0;end else if (sclk) begin    start <= 1;end/* Tracking START_STOP related status of the device */always @ (negedge sclk) if (start_stop & start) begin     repeat_start <= 1;      reset <= 1; end else if (start) begin     start_stop <= 1;     reset <= 1;     repeat_start <= 0;  end else if (stop) begin     start_stop <= 0;     reset <= 1;     repeat_start <= 0; end else if (some_other_device) begin     start_stop <= 0;      repeat_start <= 1; end else begin     reset <= 0;     repeat_start <= 0;   end/***********************************************************************************************************/   /* Counting of bits. First eight bits are data and the last one is ack. */ wire sda_is_ack = count[3] & count [2];  // High for ack , count = 1111/* Down Counter, 1111 is ack */always @ (negedge sclk)if (start) begin    count <= 4'h7;               // it would decreae to 7 on the first pos edge of sclk. endelse if (start_stop) begin         if (sda_is_ack) begin   // count is restored to 7            count <= 4'h7;         end else begin         count <= count - 4'h1;  // count is decremented until zero.          endend /***********************************************************************************************************//* Taking the Inputs from SDA line and Comparing with Address */always @(posedge sclk)   if (start_stop) begin      if (~sda_is_ack) begin          sda_ack <= 0;          if (~data_or_address | repeat_start) begin              if (repeat_start) begin              add_is_matching <= 1;               // high means matching              data_or_address <= 0;               // default is address              some_other_device <= 0;             // High means that device address does not match with SDA data               write_flag <= 0;                                  done <= 0;                          // Low means Transfer is pending              end              if (count == 7 & sda != slave_address[6]) add_is_matching <= 0;                if (count == 6 & sda != slave_address[5]) add_is_matching <= 0;                if (count == 5 & sda != slave_address[4]) add_is_matching <= 0;                if (count == 4 & sda != slave_address[3]) add_is_matching <= 0;                if (count == 3 & sda != slave_address[2]) add_is_matching <= 0;                if (count == 2 & sda != slave_address[1]) add_is_matching <= 0;                if (count == 1 & sda != slave_address[0]) add_is_matching <= 0;                if (count == 0 & ~sda )begin              read_oper <= 0;              data_or_address <= 1;               end else if (count == 0) begin               read_oper <= 1;              data_or_address <= 1;                            end                     end else if (~read_oper & ~done) begin                              if (count == 7) GPIO_output[7] <= sda;               if (count == 6) GPIO_output[6] <= sda;               if (count == 5) GPIO_output[5] <= sda;               if (count == 4) GPIO_output[4] <= sda;               if (count == 3) GPIO_output[3] <= sda;               if (count == 2) GPIO_output[2] <= sda;               if (count == 1) GPIO_output[1] <= sda;               if (count == 0) begin                   GPIO_output[0] <= sda;                   done <= 1;                   end          end else begin               if (count == 0) done <= 1;          end          end else begin           if (add_is_matching) begin              sda_ack <= 1;              if (read_oper) write_flag <= 1;             end else begin              data_or_address <= 0;              some_other_device <= 1;          end                    end           end else begin    add_is_matching <= 1;  // high means matching    sda_ack <= 0;          // high means ack sent, drives sda low    data_or_address <= 0;  // default is address    some_other_device <= 0;    write_flag <= 0;    done <= 0;    end /***********************************************************************************************************//* Writing ACK and DATA on the SDA Line*/wire ack_flag = (count[3]|count[2]|count[1]|count[0]); //becomes low when count is 0always@(negedge sclk)    if (start_stop) begin        if (~ack_flag) begin                                          if ( add_is_matching  & ~write_flag)begin sda_out <= 1'b0;             end else begin sda_out <= 1'bz;            end            if (read_oper & ~done) GPIO_input_reg <= GPIO_input;        end else if (read_oper & data_or_address & ~done) begin             if (ack_flag) begin                  if (~GPIO_input_reg[7]) begin                     sda_out <= 1'b0;                 end else begin                      sda_out <= 1'bz;                 end                 GPIO_input_reg <= GPIO_input_reg << 1;                                 end        end else begin             sda_out <= 1'bz;        end    endwire sda;assign sda = sda_out;endmodule

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人资源在线| 日本特黄久久久高潮| 国产福利一区二区三区视频 | 欧美日韩一区精品| 亚洲日本青草视频在线怡红院| 不卡在线观看av| 亚洲美女屁股眼交3| 色老汉av一区二区三区| 亚洲高清免费观看 | 制服丝袜日韩国产| 免费成人在线视频观看| xnxx国产精品| 91色九色蝌蚪| 日韩1区2区日韩1区2区| 久久久美女毛片| 91麻豆免费观看| 日韩国产在线观看| 国产日韩亚洲欧美综合| 91麻豆123| 久久精品国产亚洲a| 国产精品久久久久久久久免费丝袜| 91麻豆免费在线观看| 免费观看久久久4p| 国产精品日韩精品欧美在线| 在线免费av一区| 精品亚洲成a人在线观看| 中文字幕一区二区三区四区 | 久久久久久久久久久黄色| 99精品欧美一区| 日韩精品高清不卡| 国产精品久久久久三级| 91精品国产一区二区人妖| 蜜桃av一区二区三区电影| 国产精品久久久一区麻豆最新章节| 在线一区二区视频| 九九热在线视频观看这里只有精品| 国产精品视频观看| 制服丝袜国产精品| 97精品国产露脸对白| 免费看日韩a级影片| 国产婷婷色一区二区三区四区| 欧美视频一区二区三区四区| 国产精品一区二区在线观看不卡 | 亚洲最快最全在线视频| 欧美精品一区二区三区蜜桃| 欧洲一区在线电影| 丁香亚洲综合激情啪啪综合| 日韩激情一二三区| 一区二区三区资源| 国产欧美日韩激情| 欧美一区欧美二区| 欧美综合一区二区| 成人aa视频在线观看| 狠狠色综合色综合网络| 国产一区二区福利| 亚洲综合精品自拍| 日韩一区在线播放| 久久精品亚洲国产奇米99| 制服丝袜亚洲色图| 欧美色区777第一页| 91丝袜美女网| 成人app网站| 东方aⅴ免费观看久久av| 国产一区二区在线观看视频| 日韩精品欧美成人高清一区二区| 一区二区三区在线不卡| 成人欧美一区二区三区白人| 日本一二三四高清不卡| 2020国产精品久久精品美国| 日韩欧美亚洲国产精品字幕久久久| 欧美综合一区二区三区| 一本大道久久a久久综合婷婷| 成人av小说网| 97久久超碰国产精品电影| 成人aaaa免费全部观看| 成人激情图片网| 成人激情综合网站| 99国产欧美久久久精品| 91首页免费视频| 色悠悠亚洲一区二区| 91国偷自产一区二区开放时间| 色综合欧美在线| 91福利视频在线| 欧美日韩在线免费视频| 欧美美女网站色| 日韩欧美成人午夜| 久久综合五月天婷婷伊人| 久久精品人人做人人综合| 国产女人18毛片水真多成人如厕| 国产日韩视频一区二区三区| 国产精品久久久久久久久免费相片 | 91色porny| 欧美在线综合视频| 欧美日本国产视频| 日韩欧美国产午夜精品| 久久精品欧美一区二区三区麻豆| 亚洲专区一二三| 免费人成精品欧美精品| 国产乱子伦一区二区三区国色天香| 国产乱子伦视频一区二区三区 | 国产精品美女久久福利网站| 亚洲色图.com| 日韩国产精品91| 国产一区二区精品久久91| 成人动漫一区二区在线| 欧美视频中文字幕| 精品日韩欧美在线| 国产精品对白交换视频 | 色欧美乱欧美15图片| 欧美视频中文字幕| 26uuu精品一区二区三区四区在线| 国产色婷婷亚洲99精品小说| 亚洲综合久久久久| 精品无码三级在线观看视频| 99久久国产综合精品色伊| 欧美日韩精品福利| 久久精品人人做人人爽97| 亚洲狠狠爱一区二区三区| 精品在线免费视频| 在线中文字幕一区| 久久精品一区二区三区不卡| 一区二区三区蜜桃| 国产精品乡下勾搭老头1| 色噜噜狠狠成人中文综合| 日韩欧美一级二级| 亚洲一区二区三区四区不卡| 国产乱码精品一品二品| 欧美在线观看视频一区二区三区| 精品久久免费看| 亚洲激情自拍视频| 国产成人亚洲精品青草天美| 欧美日韩一区二区在线观看 | 天天爽夜夜爽夜夜爽精品视频| 国产 欧美在线| 日韩一区二区三区免费看| 亚洲人成网站影音先锋播放| 韩国一区二区视频| 欧美欧美午夜aⅴ在线观看| 国产精品美女久久福利网站| 麻豆精品视频在线观看视频| 欧洲一区二区三区免费视频| 中文欧美字幕免费| 韩日av一区二区| 欧美一区二区在线视频| 极品尤物av久久免费看| 在线视频国内一区二区| 国产精品美女久久久久aⅴ| 韩国成人福利片在线播放| 欧美高清一级片在线| 一区二区三区欧美日| 不卡的av网站| 久久久五月婷婷| 国产综合色精品一区二区三区| 欧美高清性hdvideosex| 亚洲一区二区欧美| 91福利在线播放| 一区二区三区免费网站| 91在线高清观看| 国产精品久久久久久久久搜平片 | 成人高清在线视频| 久久综合网色—综合色88| 精品一区二区三区的国产在线播放 | www.综合网.com| 久久尤物电影视频在线观看| 九九国产精品视频| 精品成a人在线观看| 国产曰批免费观看久久久| 日韩免费在线观看| 九色综合狠狠综合久久| 日韩欧美二区三区| 狠狠色丁香久久婷婷综合_中| 日韩欧美视频一区| 韩国女主播成人在线| 欧美成人性福生活免费看| 久久精品99国产国产精| 欧美不卡在线视频| 国产真实乱子伦精品视频| 久久久国产一区二区三区四区小说| 久久国产精品99久久人人澡| 精品久久久久久最新网址| 极品尤物av久久免费看| 久久久精品黄色| 成人福利电影精品一区二区在线观看| 国产精品不卡在线| 91国偷自产一区二区三区成为亚洲经典| 99视频一区二区| 中文字幕日韩一区| 欧美色精品在线视频| 日韩一区精品视频| 久久久久久亚洲综合| 播五月开心婷婷综合| 亚洲激情av在线| 欧美丰满一区二区免费视频| 精品一区二区影视| 中文子幕无线码一区tr| 欧美亚洲免费在线一区| 久久国产乱子精品免费女| 国产精品日韩成人| 欧美性生活大片视频| 久久er99精品|