各位网友好,本人是从事
电子研发方面的工程师“小张”。本人先后专职在做过
PCB设计、硬件
威廉希尔官方网站
设计、
FPGA逻设计等。工作多年,颇有感受。先将本人在fpga方面的经验分享给各位网友(不足之处望大神予以指教)。和大部分工程师一样,本人在初学fpga的时候,也是从最基本的呼吸灯、独立按键、矩阵按键、自动售货机、计算器、串口、VGA等这样的小项目一步一步的入门的。当然这些小玩意在公司基本是用不上的,但是对于初学者来说这样的小练习如果让自己做到独立思考、独立编码、独立调试、后续完善总结的话,那对自己的基本功和前期的能力锻炼是很有帮助的。至于这些小项目,之前已有网友在本
william hill官网
分享过,本人就不再多说了。今天想跟大家分享的是基于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,加扣扣时备注电子发烧友。
后续本人会有更多精彩分享,而且会贴上调试图片在博客上。