数字电路入门生
我分享点简洁实用的经验。
架构设计上,把握一个原则:能并行的绝不串行,能流水的绝不等待。
关键模块就那几个:多通道同步采集模块、预处理(可能包括直流剔除、加窗、滤波)、FFT模块、互相关计算模块、角度解算模块。每个模块内部尽量流水,模块之间用FIFO连接,形成一条完整流水线。
FFT IP核复用是必须的,不然资源扛不住。可以设计一个仲裁调度器,轮流为多路数据提供FFT服务。但要注意调度策略,保证数据吞吐率满足实时要求。
CORDIC算角度确实省资源,但速度慢。如果对实时性要求极高,可以考虑查表法,预计算好时差到角度的映射表,用RAM存起来,实时直接读取,用资源换速度。
容易踩的坑:
1. 跨时钟域处理。采集时钟、处理时钟、输出时钟可能不同源,CDC处理要做好。
2. 定点量化噪声。尤其是相位信息,对量化很敏感,建议关键路径用高精度定点,比如Q格式的小数部分多留几位。
3. 测试验证。先做单元测试,每个模块单独验,再联调。没有好用的测试方法,调试会非常痛苦。
最后,资源消耗和性能的平衡,没有标准答案。建议前期多做一些设计空间探索,比如用高层次综合工具快速尝试不同配置,找到最适合你们板子的方案。
