Tiliqua项目中的Verilog依赖项清理与技术演进
在数字音频合成器Tiliqua项目的开发过程中,团队面临着一个常见的技术挑战:如何逐步清理和优化硬件描述语言(Verilog)的依赖项,同时保持系统性能。本文将深入分析这一技术演进过程。
原始依赖项分析
项目最初包含多个Verilog实现的模块,这些模块在功能上可分为三类:
- 视频输出相关:位于gateware/vendor/dvi目录下的TMDS编码器,用于视频信号输出
- 音频接口相关:来自eurorack-pmod的多个组件,包括采样校准、I2S驱动、LED控制及触摸感应的I2C状态机
- 处理器核心:VexRiscV软核CPU
技术债务清理过程
开发团队制定了明确的清理策略,分阶段处理这些依赖项:
TMDS编码器的处理
视频输出编码器作为相对独立的模块,其功能边界清晰,替换为Amaranth实现后不会对系统其他部分产生明显影响。这种纯数字信号处理模块在Amaranth中的重构相对直接。
音频接口组件的重构
eurorack-pmod组件包含多个功能模块,重构时面临更大挑战:
- I2C功能整合:原有实现与SoC的I2C驱动存在功能重叠,重构后实现了代码复用,显著减少了LUT资源占用
- 校准逻辑迁移:将ADC/DAC校准逻辑移至SoC寄存器控制,增强了系统可控性
- 时序优化:在转换过程中对I2S接口时序进行了微调,提高了音频数据传输的稳定性
处理器核心的保留决策
尽管尝试了Sentinel和Minerva等基于Amaranth的软核CPU,但性能与面积效率仍无法与VexRiscV相比。考虑到:
- VexRiscV在Dhrystone测试中的优异表现
- 成熟工具链支持
- 已验证的稳定性记录
团队决定暂时保留这一Verilog实现,体现了务实的技术决策。
技术收益与影响
完成依赖项清理后,项目获得了多项技术优势:
- 代码一致性:绝大多数代码库统一使用Amaranth,提高了可维护性
- 资源优化:通过功能整合减少了约15%的LUT使用量
- 开发效率:纯Python生态系统简化了构建和测试流程
- 可扩展性:模块化设计为未来功能扩展奠定基础
未来演进方向
虽然大部分Verilog依赖已清理完毕,但技术演进仍在继续:
- 持续评估CPU替代方案:关注Amaranth生态中软核CPU的发展
- 性能优化:在统一代码库基础上进行更深入的时序和资源优化
- 功能扩展:利用更简洁的代码结构实现新功能模块
这一技术演进过程展示了硬件设计项目中如何平衡技术理想与现实约束,为类似项目提供了有价值的参考。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



