芯片设计预备役
我去年刚搞完一个类似的项目,也是顶会论文复现,确实论文里很多细节不会写全。我的经验是,先别急着动手写代码,第一步是彻底吃透论文的算法部分。把论文里的数学公式、数据流图、伪代码全部自己推导一遍,用MATLAB或Python写个功能正确的软件模型。这是你的黄金标准(Golden Model),后面所有硬件设计的正确性都要和它对比。
然后,针对论文里模糊的硬件部分,比如它只说了“用了4个并行处理单元”,但没具体说数据怎么在这些单元间流动、怎么解决依赖。这时候就要做设计决策了。我的方法是去搜这个作者组或其他相关工作的后续论文、技术报告,甚至GitHub上有没有开源代码(虽然硬件很少开源)。如果都没有,就基于你对算法和数据流的理解,自己设计几种可能的硬件架构,用高级建模工具(比如用SystemC或甚至Python)快速评估一下面积、延迟和吞吐量的折中,选一个最合理且能在你目标FPGA(比如Zynq或Arria 10)上实现的方案。
定下架构后,我建议用高层次综合(HLS)来快速做原型,尤其是算法复杂的部分。HLS代码比手写RTL更接近论文伪代码,容易修改和验证。先把核心计算流水线调通,确保功能对。然后再根据论文提到的优化点(比如内存带宽优化、数据复用),在HLS里加pragma或者手动优化RTL。
最后,一定要尽早做协同仿真(co-simulation):用你的软件模型生成测试向量,灌进RTL仿真里,对比输出。这样能一步步把模糊点都确认清楚。上板演示的话,先确保在仿真里性能指标(比如加速比)接近论文数据,然后再做板级调试,用ChipScope之类的工具抓信号。记住,学生项目能复现论文核心思想和大体性能就好,不必100%照搬,关键是把方法学走通,能演示出来。
