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

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

?? iic_master.v

?? IIC總線的Master代碼
?? V
字號:
/*I2C_Master.v - Verilog source for I2C moduleFeatures:- I2C Baud of 100Kbps or 400kbps- ACK or NACK during READ is controlled via LSB of in_data- SCL handshake (slave pulls SCL low to suspend master)Limitations:- Only supports master mode- no IRQ support but has a busy bit that can be polled to assure module is not busyThis program is free software: you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation, either version 3 of the License, or(at your option) any later version.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program.  If not, see <http://www.gnu.org/licenses/>.*/`define BAUD400K  25`define BAUD100K  100`define IDLE      0`define START     1`define STOP      2`define READ      3`define WRITE     4module i2c_master(addr, in_data, out_data, sda, scl, cs, rd, wr, clk, iic_busy);output iic_busy;input wire [2:0] addr;input wire [7:0] in_data;output reg [7:0] out_data;inout            sda;inout            scl;input wire       cs;input wire       rd;input wire       wr;input wire       clk;reg out_sda           = 1'b0;reg out_scl           = 1'b0;reg [7:0] in_buffer   = 8'b0;reg [7:0] buffer      = 8'b0;reg ack               = 1'b0;reg speed             = 1'b0;reg i2c_clk           = 1'b0;reg [6:0] clk_count   = 7'b0;reg [2:0] state	    = 3'b0;reg [2:0] nextstate   = 3'b0;reg [5:0] state_count = 6'b0;reg [2:0] bit_count   = 3'b0;

reg [2:0] state_control = 3'b0;////
reg wr_rd_bit = 0;////wire busy;wire held;// I2C Clockalways@(posedge clk)begin	clk_count = clk_count + 1;		if(1)	begin		if(clk_count >= `BAUD400K)		begin			clk_count = 0;		end				// ~50/50 duty cycle		if(clk_count > (`BAUD400K / 2))		begin			i2c_clk <= 1'b0;		end		else		begin			i2c_clk <= 1'b1;		end	end	else	begin		if(clk_count >= `BAUD100K)		begin			clk_count = 0;		end		// ~50/50 duty cycle		if(clk_count > (`BAUD100K / 2))		begin			i2c_clk <= 1'b0;		end		else		begin			i2c_clk <= 1'b1;		end	endend// Output Blockalways@(addr or cs or rd or buffer or speed or ack or held or busy)begin    out_data = 8'bz;        if(cs && rd)    begin        case(addr)         // Data (read)         3'b011:         begin            out_data = buffer;         end	// Status         3'b100:         begin            out_data = {4'b0, speed, ack, held, busy};         end      endcase   endend// Input Blockalways@(posedge clk)begin    nextstate <= nextstate;    case(state)        `IDLE:        begin            if(!busy)/*cs && wr && !busy*/            begin                case(state_control)		                    // Start                    3'b000:                    begin                        nextstate <= `START;
								if(wr_rd_bit) state_control <=3'b010;
								else state_control <=3'b011;                    end                    // Stop                    3'b001:                    begin                        nextstate <= `STOP;                    end			                    // Read                    3'b010:                    begin                        in_buffer = {7'b0, in_data[0]};                        nextstate <= `READ;                    end			                     // Data (write)                    3'b011:                    begin                        in_buffer = 8'b00110011;//in_data;                        nextstate <= `WRITE;
								state_control <=3'b001;                    end			                    // Speed                    3'b100:                    begin                        speed = in_data[0];                        nextstate <= `IDLE;                    end
						  
						  default: nextstate <= `IDLE;
						                  endcase            end        end                `START:        begin            if(state_count >= 6)            begin                nextstate <= `IDLE;            end        end                `STOP:        begin            if(state_count >= 6)            begin                nextstate <= `IDLE;            end        end                `READ:        begin            if(state_count >= 44)            begin                nextstate <= `IDLE;            end        end                `WRITE:        begin            if(state_count >= 44)            begin                nextstate <= `IDLE;            end        end    endcaseend// state_count and bit_countalways@(posedge i2c_clk)begin   state <= nextstate;      case(state)       `START:       begin           if(state_count >= 6)           begin               state_count <= 0;           end           else           begin               state_count <= state_count + 1;           end       end       `STOP:       begin           if(state_count >= 6)           begin               state_count <= 0;           end           else           begin               state_count <= state_count + 1;           end       end       `READ:       begin           if(state_count >= 44)           begin               state_count <= 0;           end           else           begin               if(out_scl == scl)               begin                   state_count <= state_count + 1;               end                          end                      if(bit_count >= 4)           begin               bit_count <= 0;           end           else           begin               if(out_scl == scl)               begin                   bit_count <= bit_count + 1;               end           end       end       `WRITE:       begin           if(state_count >= 44)           begin               state_count <= 0;           end           else           begin               if(out_scl == scl)               begin                   state_count <= state_count + 1;               end           end           if(bit_count >= 4)           begin               bit_count <= 0;           end           else           begin               if(out_scl == scl)               begin                   bit_count <= bit_count + 1;               end           end       end   endcase        end// SDA and SCLalways@(posedge i2c_clk)begin   out_sda = out_sda;   out_scl = out_scl;       case(state)       `START:       begin           case(state_count)               0:               begin                   out_sda = 1'b1;                   out_scl = 1'b1;               end               1:               begin                   out_sda = 1'b1;                   out_scl = 1'b1;               end               2:               begin                   out_sda = 1'b1;                   out_scl = 1'b1;               end                              3:               begin                   out_sda = 1'b0;                   out_scl = 1'b1;               end                              4:               begin                   out_sda = 1'b0;                   out_scl = 1'b1;               end                              5:               begin                   out_sda = 1'b0;                   out_scl = 1'b0;               end                              6:               begin                   out_sda = 1'b0;                   out_scl = 1'b0;               end           endcase       end       `STOP:       begin           case(state_count)               0:               begin                   out_sda = 1'b0;                   out_scl = 1'b0;               end                              1:               begin                   out_sda = 1'b0;                   out_scl = 1'b1;               end                              2:               begin                   out_sda = 1'b0;                   out_scl = 1'b1;               end                              3:               begin                   out_sda = 1'b1;                   out_scl = 1'b1;               end                              4:               begin                   out_sda = 1'b1;                   out_scl = 1'b1;               end                              5:               begin                   out_sda = 1'b1;                   out_scl = 1'b1;               end                              6:               begin                   out_sda = 1'b1;                   out_scl = 1'b1;               end           endcase       end       `READ:       begin           if(state_count >= 40)           begin               case(bit_count)                                      0:                   begin                       out_sda = ~in_buffer[0];                       out_scl = 1'b0;                   end                                      1:                   begin                       out_sda = ~in_buffer[0];                       out_scl = 1'b0;                   end                                      2:                   begin                       out_sda = ~in_buffer[0];                       out_scl = 1'b1;                   end                                      3:                   begin                       out_sda = ~in_buffer[0];                       out_scl = 1'b1;                   end                                      4:                   begin                       out_sda = ~in_buffer[0];                       out_scl = 1'b0;                   end               endcase           end           else           begin               case(bit_count)                                      0:                   begin                       out_sda = 1'b1;                       out_scl = 1'b0;                                              buffer = buffer << 1;                   end                                      1:                   begin                       out_sda = 1'b1;                       out_scl = 1'b0;                   end                                      2:                   begin                       out_sda = 1'b1;                       out_scl = 1'b1;                   end                                      3:                   begin                       out_sda = 1'b1;                       out_scl = 1'b1;                                              buffer[0] = sda;                   end                                      4:                   begin                       out_sda = 1'b1;                       out_scl = 1'b0;                   end                                  endcase           end       end              `WRITE:       begin           if(state_count == 0)           begin               buffer = in_buffer;           end                      if(state_count >= 40)           begin               case(bit_count)                                      0:                   begin                       out_sda = 1'b1;                       out_scl = 1'b0;                   end                                      1:                   begin                       out_sda = 1'b1;                       out_scl = 1'b0;                   end                                      2:                   begin                       out_sda = 1'b1;                       out_scl = 1'b1;                   end                                      3:                   begin                       out_sda = 1'b1;                       out_scl = 1'b1;                                              ack = sda;                   end                                      4:                   begin                       out_sda = 1'b1;                       out_scl = 1'b0;                   end                                  endcase           end           else           begin               case(bit_count)                                      0:                   begin                       out_sda = buffer[7];                       out_scl = 1'b0;                   end                                      1:                   begin                       out_sda = buffer[7];                       out_scl = 1'b0;                   end                                      2:                   begin                       out_sda = buffer[7];                       out_scl = 1'b1;                   end                                      3:                   begin                       out_sda = buffer[7];                       out_scl = 1'b1;                   end                                      4:                   begin                       out_sda = buffer[7];                       out_scl = 1'b0;                                              buffer = buffer << 1;                   end                                  endcase           end       end   endcaseendassign sda = out_sda ? 1'bz : 1'b0;assign scl = out_scl ? 1'bz : 1'b0;assign busy = (state != `IDLE || nextstate != `IDLE) ? 1 : 0;assign iic_busy = (state != `IDLE || nextstate != `IDLE) ? 1 : 0;assign held = out_scl != scl;endmodule

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日韩v精品一区二区| 亚洲男人天堂av网| 91麻豆免费视频| 美女在线视频一区| 一区二区三区资源| 久久久久国产精品厨房| 91精品在线一区二区| av网站一区二区三区| 精品影视av免费| 亚洲成人一区二区在线观看| 亚洲欧洲性图库| 久久麻豆一区二区| 日韩美女视频在线| 欧美美女bb生活片| 日本二三区不卡| 不卡av在线免费观看| 国产乱理伦片在线观看夜一区| 视频一区视频二区中文字幕| 一区二区三区中文在线| 蜜桃av噜噜一区| 国产三级欧美三级日产三级99| 国产99精品国产| 久久精品亚洲精品国产欧美| 成人精品国产福利| 欧美视频一区在线| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美视频一区二区三区| 欧美经典一区二区| 欧美一区二区在线播放| 丁香激情综合五月| 亚洲婷婷国产精品电影人久久| 日韩午夜在线观看| 精品综合久久久久久8888| 欧美亚洲综合色| 最新高清无码专区| 99精品在线免费| 亚洲男人的天堂一区二区| 欧美精品一区二区三区蜜桃| 9191国产精品| 亚洲三级小视频| 一区二区三区精品在线| 国产精品大尺度| 久久亚洲免费视频| 在线一区二区三区四区五区| 日韩国产欧美在线观看| 中文字幕中文字幕在线一区 | 国产精品视频免费| 色www精品视频在线观看| 国产老妇另类xxxxx| 午夜精品123| 亚洲夂夂婷婷色拍ww47| 亚洲天堂成人在线观看| 中日韩av电影| 国产精品视频在线看| 日韩欧美亚洲国产精品字幕久久久| 97精品国产露脸对白| 国产精品亚洲视频| 国产精品资源站在线| 午夜精品一区二区三区三上悠亚| 一个色综合av| 午夜久久久影院| 美女高潮久久久| 欧美日韩黄色一区二区| 欧美国产日韩亚洲一区| 亚洲成a人在线观看| 亚洲第一主播视频| 欧美日韩国产大片| 91久久精品日日躁夜夜躁欧美| 风流少妇一区二区| 欧美三级中文字| 亚洲精品一二三区| 91麻豆精品久久久久蜜臀 | 色88888久久久久久影院按摩| 欧美系列一区二区| 日韩精品一区二区三区老鸭窝| 欧美激情在线一区二区三区| 亚洲精品国产无天堂网2021| 麻豆一区二区99久久久久| 国产曰批免费观看久久久| 91蝌蚪国产九色| 欧美综合色免费| 日韩欧美一级片| 日韩伦理免费电影| 日韩专区中文字幕一区二区| 日韩在线卡一卡二| 日本不卡1234视频| 欧美三级日韩在线| 一区二区三区在线观看动漫| 制服丝袜av成人在线看| 国产寡妇亲子伦一区二区| 亚洲婷婷在线视频| 欧美另类高清zo欧美| 国产乱对白刺激视频不卡| 国产精品美女久久福利网站| 91啪亚洲精品| 在线一区二区三区四区五区 | 亚洲免费av在线| 欧美二区乱c少妇| 国产精品资源站在线| 亚洲欧洲综合另类| 日韩无一区二区| 99热精品国产| 国产综合久久久久久鬼色| 亚洲精品乱码久久久久| 日韩欧美自拍偷拍| 一本到高清视频免费精品| 精品一区二区三区免费观看| 亚洲免费观看在线视频| 久久亚洲精华国产精华液| 精品视频在线免费观看| 成人免费观看av| 精品一区二区免费在线观看| 一区二区三区精品视频在线| 精品sm捆绑视频| 8v天堂国产在线一区二区| 97久久人人超碰| 国产成人精品午夜视频免费| 久久爱www久久做| 日韩1区2区日韩1区2区| 亚洲国产成人av| 一区二区三区丝袜| 久久久99精品久久| 久久爱www久久做| 国产欧美日韩三级| 91麻豆国产精品久久| 中文字幕在线一区二区三区| 99久久婷婷国产综合精品| 国产美女精品人人做人人爽| 欧美tickling网站挠脚心| 成人黄色大片在线观看| www国产亚洲精品久久麻豆| 丝袜美腿亚洲综合| 欧美日韩激情一区二区| 亚洲一区在线观看免费| 欧洲在线/亚洲| 一区二区三区国产精品| 欧美在线999| 午夜精品免费在线观看| 欧美日韩一卡二卡| 日韩黄色一级片| 精品欧美一区二区久久| 极品美女销魂一区二区三区 | 国产三级久久久| 国产1区2区3区精品美女| 国产色爱av资源综合区| 国产风韵犹存在线视精品| 久久精品一区蜜桃臀影院| 国产91丝袜在线播放0| 国产精品午夜在线观看| 色综合天天视频在线观看| 亚洲理论在线观看| 欧美视频在线观看一区| 日本亚洲电影天堂| 欧美mv日韩mv亚洲| 福利电影一区二区| 亚洲精品国产a| 91精品国产91综合久久蜜臀| 久久国产综合精品| 国产精品麻豆99久久久久久| 97精品视频在线观看自产线路二| 一区二区三区不卡视频在线观看| 欧美日本一道本| 国产精品伊人色| 亚洲欧洲一区二区在线播放| 欧美日韩dvd在线观看| 美女脱光内衣内裤视频久久网站| 久久久久久夜精品精品免费| 99天天综合性| 日韩av不卡在线观看| 久久人人爽人人爽| 91久久精品一区二区二区| 蜜桃av一区二区| 亚洲欧美一区二区视频| 欧美二区三区的天堂| 国产精华液一区二区三区| 亚洲猫色日本管| 日韩亚洲欧美在线| 色综合久久天天| 国产一区二区三区香蕉| 亚洲主播在线播放| 久久人人爽爽爽人久久久| 精品视频在线看| 不卡的av电影| 久久精品国产**网站演员| 亚洲丝袜自拍清纯另类| 日韩视频一区二区三区在线播放| aa级大片欧美| 老司机免费视频一区二区三区| 亚洲精品中文字幕在线观看| 26uuu久久天堂性欧美| 在线精品视频一区二区| 国产精品综合一区二区三区| 午夜欧美一区二区三区在线播放| 国产午夜久久久久| 欧美一二三四在线| 91久久精品国产91性色tv| 成人一区二区视频| 毛片不卡一区二区| 午夜视黄欧洲亚洲| 亚洲精品欧美在线|