各位网友好,本人是从事电子研发方面的工程师“小张”。本人先后专职在做过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,加扣扣时备注电子发烧友。 后续本人会有更多精彩分享,而且会贴上调试图片在博客上。
|