子卡通电后向主卡发送数据
子卡通电后,通过uart向主卡发送数据,暂时设计的是依次发送8位板卡编号、16位通道数、16位通道位宽、32位最大采样率。
上板测试,将串口调试助手当做主卡来接受信息,设定的板卡编号为1,通道数为32,每个通道位宽为16位,最大采样率为2M。
串口调试助手接收信号如图:

各位数据符合设定的信息,正常。
子卡与主卡之间进行数据传输
上板后发现存在非常非常多bug,基本都是原来代码编写时候留的坑。出现过的bug有:
- 模拟产生的ad信号变化有问题,原设计为512个通道来模拟32个16位通道,各个通道之间均有规律,每次采样后各个通道信号均在上一次采样信号值基础上+1,上板发现所有通道信号的确递增,但不同通道信号之间没有最初的规律;
- 编码解码模块状态机跳转异常,由于某些计数器、判断条件出问题导致发生死锁,卡死在某一个状态,且没有额外的逻辑处理卡死问题进行复位;
- 编解码状态机在修改时把代码复杂化了,逻辑较为混乱,导致跳转本身不符合预期;
- 编码解码模块读使能、写使能信号逻辑存在异常,从fifo读出数据本身就出现问题,比如某一通道的数据读出了两次,后面通道的数据就没被读出来;
- fifo读出数据本身也疑似有丢失,编码解码模块写入的数据大约有25%的数据未读出;
- fifo编码解码模块读写时钟设计存在问题,两边的fifo并不对称,时钟没有对应起来,后面检查ad数据编解码后有没有出问题本身也会遇到困难。
此外,之前仿真测试时调试顺序不规律,测试也并没有与实际情况紧密结合,存在一定出入,导致原有的问题在仿真阶段没有发现。
本文章使用limfx的vscode插件快速发布