I2C控制器的Verilog建模之二】的更多相关文章

前言:接着上一篇的I2C写操作,今天要实现一个I2C的读操作.虽然在ADV7181B配置内部寄存器时没有必要使用到读操作,但是为了进一步确认寄存器是否在I2C写模块下被正确配置,这一步是必不可少的. 设计思路:由于最终的应用里I2C读模块在调试结束后还是要被剔除,因此决定还是另外建一个读的状态机独立于之前的写状态机.读状态机的思路基本和写状态机的思路一样,需要注意的是一次写操作需要两次的START信号和最后一字节传输结束后的NON-ACKNOWLEDGE. 改进和注意点:相比之前的写模块,读模块…
前言:经过几天修改,norflash控制器基本已经完成,通过仿真.完整的norflash包含2个模块:直接操作硬件的norflash_ctrl.v与控制ctrl模块的驱动norflash_driver.v.目前只具备扇区块擦除.单字节写.单字节读. 设计思路: norflash_driver模块:可以根据外部控制脉冲信号(可以是按键.开关.其他模块产生的脉冲信号)控制其在每个脉冲下产生相应的“指令.读写地址.待写数据.norflash请求”4种信号.指令可以预先用一个lut存储.用这种方式操作n…
前言:之前申请了ADI公司的一款ADV7181CBSTZ的视频解码芯片,正好原装DE2板子安的是同系列的ADV7181BBSTZ.虽然都是ADV7181的宗出,但是寄存器配置等等还是有些诧异,引脚也不兼容.而且ADI已经停产了ADV7181B,现在主推C系列的.关于7181不同系列配置和操作问题可以在http://ez.analog.com社区,ADI公司的工程师都会直接帮你回答,我搜索了一部分Q&A,里面的问题基本都能得到不错解决.ps.其实从工程师解答的方式,对比一下自己遇到问题首先该怎么思…
前言:终于到了测试篇,不过悲剧了一下.按照之前<二>里面的思路,在顶层用一个复用器驱动读写独立模块的I2C总线确实失败.虽然综合过去了,不过警告里已经说明:底层的2个原本是inout三态口的数据线在顶层复用时候被综合成wire,这样在默认情况下顶层的inout总是输出有效,失去了三态口的作用.囧,看来为了测试I2C的写还是得把读模块并进去可避免这一尴尬…… 测试:DE2+Questasim10.0c+Q2_9.1: 日期:2013七夕夜 结果:以下2张图为仿真波形图与逻辑分析仪采样的时序波形图…
摘要:今天驱动一款SPANSION公司生产的norflash——S29AL032D70,没有别的参考资料,大致了解一下norflash的内部cmos电路架构以及其用途之后,直接看手册吧. 如何看手册:拿到手册后满满的英文,很多人看了就泄气,那么如何在浩如烟海的英文里找到实际需要的信息,这一点很关键.因为毕竟是用Verilog建模,不像软件描述那么灵活,很多时候受限于硬件描述的瓶颈,因此一开始先给自己起点低一点,建模完成norflash的单块读写功能,至于其他比如CFI里面的其他功能可以以后完善.…
前言:作为经典存储器的三剑客中的flash和sram已经建模测试过了,虽然现在都已经ddr2,ddr3,667MHZ.1333MHZ的天下了,但是接下这周来准备写一下sdram的controller.虽然本科生的时候很早就接触过flash,sram也听过sdram,但是flash和sram一般是作为单片机的一部分集成在内部,因此他们的总线基本被优化成指令,再者sdram的时钟一般100MHZ,用低速的微控制器驱动着实让sdram深受委屈. 这次要驱动的sdram芯片是ISSI的IS42S1640…
前言:sram顾名思义静态随机存储器,分为asram异步型和ssram同步型.这里驱动DE2上一块ISSI公司的512KB的asram. 设计思路:因为实际应用中单字节读写效率不高,所以本设计中仿照sdram的页突发读写,提高sram的效率.因为sram不像sdram需要定期刷新以及行列地址复用,因此省却很多麻烦.拿到手册以后主要关注的就是其最快运行时钟以及数据稳定的建立时间和保持时间,以及控制线的时间参数,这些参数可以由datasheet的时序参数的min time和max time确定,通过…
前言:回校了,辦好手續就著手寫測試篇.初步的norflash控制器已經完成,通過硬件測試.目前的norflash完成扇区块擦除.单字节写.单字节读3个功能.博文最后附上源码. 总结:和之前的博文一样,里面的模块没有做时序分析,这一点会在今后的工程里面改进.另外在测试的过程中,发现写完一个字节后只需经过若干个系统时钟周期即可输出正确的写入内容(设置等待写完成的总线方向为输入,可以看到三态口的数据总线显示之前写入的数值,本人源码写入0xcc,可见stp2抓图).这一点和手册里给的单字节写需要9us的…
前言:因为VGA是一种模拟图像传输数据接口,所要将数字信号用DAC转换成模拟量.本文用的一款ADI公司高精度的视频IC,实则一款高带宽的视频DAC.因为VGA时序较为简单,并且网上的VGA驱动基本大同小异.本文也没有什么特别创新之处. 注意点:(a)行扫描计数器和场扫描计数器需要与每个像素点.消隐数目想对应,这样才能得到正确的行列地址坐标. 参考资料:<VESA_VGA时序标准>.<ADV7123a> 源码1:逐行扫描的VGA控制器 `timescale ns / ps `defi…
"./drivers/i2c/busses/i2c-s3c2410.c"是3.14.0内核中三星SoC的i2c控制器驱动程序, 本文试图通过对这个程序的分析, 剥离繁复的细节, 总结一套编写i2c主机控制器驱动的框架以及一个分析内核驱动的流程. 匹配之前 1287 static int __init i2c_adap_s3c_init(void) 1288 { 1289 return platform_driver_register(&s3c24xx_i2c_driver);…