SDHC控制器代码移植日记一(SD_CRC_7)
0赞题记:opencores是个不可多得的开源好网站,虽然很多时候并不是download下来的代码就直接能用,但是能够多参考前人的努力成果,并且消化后转化为自己的东西能很大程度上加速工程项目的开发。从他人的代码里也能够学到很多设计的精髓,也很有助于自身水平的提高,并且这个提高是立竿见影的。特权同学最近在移植一个SDHC卡控制器,解读他人代码的过程是很痛苦的,但是从这几天解读的过程中感觉收获颇丰,能够在这个过程中提升自己,就凭这一点就足以让我鼓起勇气坚持下去。
未来一段时间的博文里会慢慢的来分析这些代码,可能不会上传整理过的源码(大家可以到opencores下载源码),但是会从整体功能、接口时序等方面入手来分析这份代码。感兴趣的朋友可以从今天这篇最简单的SD_CRC_7模块解读开始,和特权同学一起进入SDHC控制器的代码移植之旅。
2.SD_CRC_7模块
2.1 功能原理图
图1
2.2 接口定义与说明:
//系统信号,时钟和复位
input CLK; //输入时钟信号
input RST; //CRC7模块复位信号,高有效
//功能实现信号
input BITVAL; //CRC7下一个输入bit
input Enable; //CRC7校验功能使能信号
output reg [6:0] CRC; //输出的校验结果
2.3 接口功能描述
BITVAL为图2的data_in信号,CRC为图2的data_out信号。当Enable信号有效(高电平)后,每个时钟的上升沿锁存一次BITVAL数据,40个时钟周期后,Enable信号撤销(低电平),此时的CRC[6:0]值即40bit数据对应的CRC7校验值。