在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6799|回复: 7

[求助] SPI—slave模式,时序分析问题,急!求助!在线等!(刚发的那帖子貌似图挂了)

[复制链接]
发表于 2013-5-16 20:07:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
最近在弄一个SPI-Slave模块,写的比较简单。但跑仿真send data模式时序没问题,receive data模式问题却很奇怪。下图是receive data模式的代码 %NU45ZE9$_@01}5ZRN{F3JI.jpg ,写的比较简单,用一个2位的移位寄存器存放MOSI,然后在SCK上升沿把MOSI的高位顺次移位给到rx_fifo[7:0]的低位,当1个字节传完,byte_rcved标志位使能,把rx_fifo中数据输出给byte_data_rcved,完成一次receive data操作。
这个是testbench, A32ODM8V1RYGR0`~(]3A38O.jpg
下面的问题就比较蛋疼了,看这张receive dat5a的波形图, 244FJC0UJKMW{2YDL]DE7@L.jpg 。如tb中,MOSI的输入数据 data[7:0] 赋值为35h,但显示到波形就变成了6Ah(也就是data[7:0]左移一位后的数值),反复试验多次都是这个问题(比如输入FF,显示为FE;输入55,显示为AA;输入77,显示为EE)。反复查看过模块代码和tb代码,还是没有头绪,蛋疼!然后MOSI信号线上输出的数据也不对(对的话应该是data[7]的从高位开始顺次输出),rx_fifo和byte_data_rcved的值也是时对时不对。
这是send data的波形图,是对的,各位可以比较 T819IS)G@]3~TKEOZQ]TVGV.jpg (上面一半是rx,是错的;下面一半是tx,是对的)
小弟反复研究还是没有发现关键问题所在,望各位大虾帮忙看看,在线等,急!
发表于 2013-5-16 20:28:49 | 显示全部楼层
这是因为SCK有unknown状态,从unknown到0被仿真器识别成了一个negedge,data被左移了一位
 楼主| 发表于 2013-5-16 20:53:16 | 显示全部楼层




   但MOSI的时候,是在posedge,有关系吗?而且如果像您说的,那MISO岂不也要受到影响?
发表于 2013-5-16 22:35:11 | 显示全部楼层
2楼说的没错,tb中SCK提前翻转一次。
你的代码里面有些写法不合适,可综合模块中,一个寄存器不好在两个always赋值的;
即使是在tb中的always 时序逻辑,也避免用‘=’赋值。
 楼主| 发表于 2013-5-17 19:24:25 | 显示全部楼层
回复 4# barnwell


   谢谢兄弟,确实是这个问题。另外就是$finish语句写在了always里面,所以只移位了一次,重写了一个initial,现在波形对了。
 楼主| 发表于 2013-5-17 19:25:25 | 显示全部楼层
回复 2# vongy


      谢谢兄弟,确实是这个问题。另外就是$finish语句写在了always里面,所以只移位了一次,重写了一个initial,现在波形对了。
发表于 2015-4-13 21:28:38 | 显示全部楼层
最近也在学习SPI slave,是否可以给发一个slave的代码,万分感谢。
827597077@qq.com
发表于 2015-4-28 15:07:06 | 显示全部楼层
楼主 你好!我也是在学习SPI这块,却是一头雾水,不知道该怎么学习,能否把你的经验传授下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 13:34 , Processed in 0.037266 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表