没人知道我是谁,也没几个会看,我更不会推荐别人看我所写的内容(亲爱的你除外,嘿嘿),写博客权当写学习日志了。
7月已经过了一半,这半个月就学了一点iic通信协议和DDR3的读写控制,学得实在太慢了。这也不能全怪我自己,实验室经常让干些没用的事,也没人指导,自然就慢了。
一、学习历程
1.IIC协议
IIC协议是参照野火的教程学的,为PDF文件:征途Pro《FPGA Verilog开发实战指南——基于Altera EP4CE10》2021.7.10(下)。学习过程中把教程上的时序图打下来,一个波形一个波形的看。自认为已经掌握IIC的写和读操作,理解后,自己也写完了读写控制代码。教程中完整的实验流程是IIC EEPROM的读写控制,我懒得弄,就写了代码,也没验证。之后,就去学习SDRAM的读写控制。
2.SDRAM读写控制
SDRAM的读写控制一开始也是跟着野火资料学习,一点点学习各种概念,如:突发长度、tRCD、各种控制命令等。学了半天只觉得好难、好复杂,又想到以后更大的项目实验要在Xilinx芯片上做,所以转去学正点原子的教程(用的是正点原子的开发板)。看了之后才发现Xilinx有SDRAM的控制IP核——MIG。看了资料文档、听了讲解视频,总感觉对MIG还是很不清楚,又去看了7系列MIG的用户手册。用户手册实在太长了,全是英文,根本看不下去,最后只看了用户接口部分,参照正点原子的教程,自认为认为搞懂怎么弄了。自己吭哧吭哧画了时序图,吭哧吭哧的又根据时序图、参考例程代码自己写了代码,最后虽然和例程代码有所差别,但感觉我的逻辑也没问题。
写好了当然是测试了,一跑一堆错误。吭哧吭哧改了很久,能跑通了,就上板。LED灯闪个不停,我就知道完球。写tb测试时,意识到MIG给用户的输入,根本就模拟不出来!只能改改读写之外的小逻辑错误。以前一直没学习如何抓取板子的波形,我知道现在是时候学习了。ILA抓取波形过程中,我突然明白到例程MIG核控制代码为么为将中间的状态、计数器输出了,原来是为了探针探取波形。会了探针使用,我又调了很久,都是不对。为了能解决问题,我仔细对得看了教程文件、多设了几个探针终于发现了最大的问题,那就是:app_rdy、app_rd_data_valid会断,拉高后可能会突然变低。我写代码时,认为MIG读写命令接受准备完成后,信号拉高会一直保持。读数据有效信号也一样。这个问题会让我代码中的一些计数器错。如,读写地址在app_rdy由高突然变低依然会继续计数。修改完成后上板测试,LED灯常亮,抓取波形符合设计!
二、总结
(1)概念了解不透测,出现的一些报错完全不知道怎么回事,只能搜索。别人怎么说,我就怎么改,不明所以。比如MMCM报错,根据搜索内容把输入时钟Sourse改成Global buffer就行了,完全不知道为什么。
(2)虽然说MIG让控制DDR3简单很多,我觉得还得好好看看DDR3的读写控制,试着不借助IP核控制DDR3。
(3)学习过程中经常会迷茫,写代码、调试代码花费大量时间,虽说增强了工程能力,但感觉知识的广度和深度很不够,是否应该把时间多花在提升知识的过程中,学习FPGA基本原理,一些时序分析、IC设计等知识。
(4)学会了探针怎么用,也学会了MIG的控制,下个阶段准备学习OV5640,可以将之前的IIC学习加以验证。最终目标是完成实时运动目标检测。