今天接着玩Tang Mega 138K开发板。由于昨天怎么也调不出来片内逻辑分析仪, 我今天决定用前天调好的千兆以太网MAC, 把出错的内存地址和错误的数据通过网口输出出来。经过数次尝试, 我发现前14次写入的数据都正常, 但是第15次实际写入的数据变成了我第16次要写入的数据。考虑到我的写入命令是一个接一个的, 只要内存控制器速度跟得上, 我的状态机中间不会产生气泡, 于是, 我怀疑是不是写入数据通道有个大小为16的FIFO, 然后由于什么原因丢了一拍数据。经过查看示例代码, 我发现它传给DDR3内存控制器IP核的握手信号的valid (cmd_en、wr_data_en)信号是与(&)过IP核输出的ready (cmd_ready、wr_data_rdy)信号的, 这十分怪异, 难以理解。根据我的记忆, valid信号应当是主动产生的, 而ready信号才允许依赖于valid信号。总之, 在我把valid信号也与上ready信号之后, 所有测试都通过了。
此外, 我这几天所使用的测试代码已经公开在了https://github.com/twd2/tang-mega-138k-pro-tests, 欢迎品尝。
发表评论