验证成功的iic verilog 代码.docx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
验证成功的iic verilog 代码

`timescale 1ns / 1ps////////////////////////////////////////////////////////////////////////////////// Company: kuayuan electronic and teclonogy// Engineer: xiao;//// Create Date: 2012/11/15// Design Name: cyclone IV // Module Name: iic_top// Project Name: iic_project// Target Device: cyclone IV// Tool versions: Quartus 12.0// Dependencies: verilog// // Revision: V1.0// Revision File Created////////////////////////////////////////////////////////////////////////////////moduleiic_project(clk,rst_n,bu1,bu2,scl,sda,LED);inputclk;// 50MHzinput rst_n;// 复位信号,低有效input bu1,bu2;// 按键1、2,(1按下执行写入操作,2按下执行读操作)output scl;// 24C02的时钟端口inoutsda;// 24C02的数据端口output[7:0] LED;// 数码管显示的数据// 按键检测regsw1_r,sw2_r;// 键值锁存寄存器,每20ms检测一次键值reg[19:0] cnt_20ms;// 20ms计数寄存器always @ (posedgeclk or negedgerst_n)if(!rst_n)cnt_20ms = 20d0;elsecnt_20ms = cnt_20ms+1b1;//不断计数always @ (posedgeclk or negedgerst_n)if(!rst_n) beginsw1_r = 1b1;// 键值寄存器初始化为高电平;sw2_r = 1b1;endelse if(cnt_20ms == 20hfffff)beginsw1_r = bu1;//按键1值锁存sw2_r = bu2;//按键2值锁存end//分频部分reg[2:0] cnt; // cnt=0:scl上升沿,cnt=1:scl高电平中间,cnt=2:scl下降沿,cnt=3:scl低电平中间reg[8:0] cnt_delay; //500循环计数,产生iic所需要的时钟regscl_r; //时钟脉冲寄存器always @ (posedgeclk or negedgerst_n)if(!rst_n) cnt_delay = 9d0;else if(cnt_delay == 9d499)cnt_delay = 9d0;//周期为20us,即100KHzelsecnt_delay = cnt_delay+1b1;//时钟计数;always @ (posedgeclk or negedgerst_n)beginif(!rst_n)cnt = 3d5;elsebegincase (cnt_delay)9d124:cnt = 3d1;//cnt=1:scl高电平中间,用于数据采样9d249:cnt = 3d2;//cnt=2:scl下降沿9d374:cnt = 3d3;//cnt=3:scl低电平中间,用于数据变化9d499:cnt = 3d0;//cnt=0:scl上升沿default: cnt = 3d5;endcaseendend`define SCL_POS(cnt==3d0)//cnt=0:scl上升沿`define SCL_HIG(cnt==3d1)//cnt=1:scl高电平中间,用于数据采样`define SCL_NEG(cnt==3d2)//cnt=2:scl下笛?`define SCL_LOW(cnt==3d3)//cnt=3:scl偷缙街屑?用于数据变化always @ (posedgeclk or negedgerst_n)if(!rst_n)scl_r = 1b0;else if(cnt==3d0)scl_r = 1b1;//scl信号上升沿else if(cnt==3d2) scl_r = 1b0;//scl信号下降沿assign scl = scl_r;//产生iic所需要的时钟//需要写入24C02的地址和数据`defineDEVICE_REA

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档