微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 基于fpga的iic(eeprom)控制器设计

基于fpga的iic(eeprom)控制器设计

时间:10-02 整理:3721RD 点击:
        各位网友好,本人是从事电子研发方面的工程师“小张”。本人先后专职在做过pcb设计、硬件电路设计、fpga逻设计等。工作多年,颇有感受。先将本人在fpga方面的经验分享给各位网友(不足之处望大神予以指教)。和大部分工程师一样,本人在初学fpga的时候,也是从最基本的呼吸灯、独立按键、矩阵按键、自动售货机、计算器、串口、VGA等这样的小项目一步一步的入门的。当然这些小玩意在公司基本是用不上的,但是对于初学者来说这样的小练习如果让自己做到独立思考、独立编码、独立调试、后续完善总结的话,那对自己的基本功和前期的能力锻炼是很有帮助的。至于这些小项目,之前已有网友在本论坛分享过,本人就不再多说了。今天想跟大家分享的是基于fpga的iic控制器设计。所用硬件平台是altera的cylone4开发板,编码语言是Verilog,所用开发环境是quartus、modelsim、signaltab,编码工具用的是UE。不知道各位网友在做一个模块的时候都会怎么想。本人在设计一个模块的时候都是尽量让模块做到最大可重用性,有着和团队交互的开放式接口,就像做到官方的ip核一样。下面上传本人自己写的基于fpga的AT24LC64 eeprom的iic通信设计。其中包括iic_byte,iic_page,iic_uart三个方面,代码已经过modelsim和siganltab仿真验证。网友只需将其中的pin文件修改一下自己板子接口,下板即好使。关于iic方面的介绍网上一抓一大把,这里就不介绍了。下面介绍一下设计思路和调试。

1:设计接口,

模式mode[1:0]

00:byte_wr

01:byte_rd

10:page_wr

11:page_rd

写数据wr_data[7:0],

写使能wren

读数据rd_data[7:0]

读使能rden

输出data_flag,同步读数据

iic俩根线sdc,sda

2设计时序

本设计scl时钟速率为100khz,scl非严格意义时钟,scl有休闲状态

50M/100khz=500,设计计数器为0--499,分别定义四中标识

parameter        SDA_NEG=124,        reg                sda_neg_flag;//sda下降沿标识

                        SCL_NEG        =249,        reg                scl_neg_flag;//scl下降沿标识

                        SDA_POS        =374,        reg                sda_pos_flag;//sda上升沿标识

                        SCL_POS        =499;        reg                scl_pos_flag;//scl上升沿标识

产生读写位个数控制计数器,读写位时序控制计数器。计数器都根据四种标识flag来变化。仿真的时候没必要非得有个eeprom的模型,没有eeprom模型,在写的时候收到的应答在sda线上是高阻显示。前期通过modelsim静态观察时序是否正确,后期通过signaltab来具体验证数据是否正确。最后通过串口和eeprom数据回传实验来观察数据的正确与否。由于本人所用网速实在差劲,上传资料要好久,所以具体资料请加本人好友本人会在2天之内发给各位网友。

各位初学者如有不懂之处请联系本人,QQ:2685664564,加扣扣时备注电子发烧友。

后续本人会有更多精彩分享,而且会贴上调试图片在博客上。


iic接口问题                              

上一篇:分享链接
下一篇:FPGA的配置文件问题

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top