在写一个FPGA的串口通讯问题

来源:互联网 发布:游戏优化差会怎样 编辑:程序博客网 时间:2024/05/17 23:55

最近在弄一个工程用16位串口通讯,结果在2个FPGA板之间测试通讯一切正常,如A板发出100,B板接收后加1 变为101 返回给A A在+1 变为1-2 给B.....模块测试过程一切正常,然后添加到带AD -SDRAM  的整个工程中以后就不在好用了,调试了半天就是数据丢失和不正确,也没发现问题所在波特率用500K~9600效果是一样的,后来用逻辑分析发现输出端在输出一切正常,接收端在接收数据后没有接收到接收到结束尾即数据线拉高,这样在下个数据来时由于电平不在高位就没有起始位或者说起始位不正确了就照成了数据丢失和不正确,但是模块在单独测试时是正确的呀?为什么会这样呢???

后来看代码发现在发送结束时发送模块会产生一个发送结束信号(即停止位数据线拉高以后)但是别的模块在使用这个发送结束时,收到发送结束就立即开始发送新的数据了,这就有个问题了其实最后一位才刚发出(模块工作频率是100M信号)一两个周期 也就是信号是50M~25M的频率但是在串口通讯中使用了其他转换芯片如3232等它的转换频率是最高1M 这样最后停止位以50M高频根本不能通过这个芯片就照成了接收端的没有数据结束尾,其他位正确是因为其他为的频率是500K的一句话最后以为拉高后发送结束的信号给早了应该等200周期(100M的)以后在产生发送结束信号方便系统其他模块使用(即500K频率发送停止位),具体代码明后天在补上吧!