欢迎来到天天文库
浏览记录
ID:32738932
大小:70.26 KB
页数:39页
时间:2019-02-15
《毕业论文-基于fpga的i2c实验verilog源代码说明书.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、`timescale1ns/1psmodulei2c_drive(clk,rst_n,sw1,sw2,scl,sda,dis_data);inputclk;//50MHzinputrst_n;//复位信号,低有效inputsw1,sw2;//按键1、2,(1按下执行写入操作,2按下执行读操作)outputscl;//24C02的时钟端口inoutsda;//24C02的数据端口output[7:0]dis_data;//输出指定单元的数据//--------------------------------------------//按键检测regsw1_r,sw2_r;//键值锁存寄存器,每2
2、0ms检测一次键值reg[19:0]cnt_20ms;//20ms计数寄存器always@(posedgeclkornegedgerst_n)if(!rst_n)cnt_20ms<=20'd0;elsecnt_20ms<=cnt_20ms+1'b1;//不断计数always@(posedgeclkornegedgerst_n)if(!rst_n)beginsw1_r<=1'b1;//键值寄存器复位,没有键盘按下时键值都为1sw2_r<=1'b1;endelseif(cnt_20ms==20'hfffff)beginsw1_r<=sw1;//按键1值锁存sw2_r<=sw2;//按键2值锁存en
3、d//---------------------------------------------//分频部分reg[2:0]cnt;//cnt=0:scl上升沿,cnt=1:scl高电平中间,cnt=2:scl下降沿,cnt=3:scl低电平中间reg[8:0]cnt_delay;//500循环计数,产生iic所需要的时钟39regscl_r;//时钟脉冲寄存器always@(posedgeclkornegedgerst_n)if(!rst_n)cnt_delay<=9'd0;elseif(cnt_delay==9'd499)cnt_delay<=9'd0;//计数到10us为scl的周期,即
4、100KHzelsecnt_delay<=cnt_delay+1'b1;//时钟计数always@(posedgeclkornegedgerst_n)beginif(!rst_n)cnt<=3'd5;elsebegincase(cnt_delay)9'd124:cnt<=3'd1;//cnt=1:scl高电平中间,用于数据采样9'd249:cnt<=3'd2;//cnt=2:scl下降沿9'd374:cnt<=3'd3;//cnt=3:scl低电平中间,用于数据变化9'd499:cnt<=3'd0;//cnt=0:scl上升沿default:cnt<=3'd5;endcaseendend`de
5、fineSCL_POS(cnt==3'd0)//cnt=0:scl上升沿`defineSCL_HIG(cnt==3'd1)//cnt=1:scl高电平中间,用于数据采样`defineSCL_NEG(cnt==3'd2)//cnt=2:scl下降沿`defineSCL_LOW(cnt==3'd3)//cnt=3:scl低电平中间,用于数据变化always@(posedgeclkornegedgerst_n)if(!rst_n)scl_r<=1'b0;elseif(cnt==3'd0)scl_r<=1'b1;//scl信号上升沿elseif(cnt==3'd2)scl_r<=1'b0;//scl信
6、号下降沿assignscl=scl_r;//产生iic所需要的时钟//---------------------------------------------//需要写入24C02的地址和数据39`defineDEVICE_READ8'b1010_0001//被寻址器件地址(读操作)`defineDEVICE_WRITE8'b1010_0000//被寻址器件地址(写操作)`defineWRITE_DATA8'b0000_0111//写入EEPROM的数据`defineBYTE_ADDR8'b0000_0100//写入/读出EEPROM的地址寄存器reg[7:0]db_r;//在IIC上传送的
7、数据寄存器reg[7:0]read_data;//读出EEPROM的数据寄存器//---------------------------------------------//读、写时序parameterIDLE=4'd0;parameterSTART1=4'd1;parameterADD1=4'd2;parameterACK1=4'd3;parameterADD2=4'd4;parameterA
此文档下载收益归作者所有