前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【参赛经验分享】第三届复微杯总冠军

【参赛经验分享】第三届复微杯总冠军

作者头像
空白的贝塔
发布2022-05-24 09:20:21
6930
发布2022-05-24 09:20:21
举报
文章被收录于专栏:摸鱼范式

参赛经验分享

“CQ, CQ, CQ. 这里是BH8UEC,Bravo-Hotel-Eight-Uniform-Echo-Charlie. QTH上海同济大学。听到请回答!”

嘻嘻,大家好~\(≧▽≦)/~,我就是第三届“复微杯”数字赛道一等奖和总冠军获奖队伍BH8UEC队的队长兼唯一队员。

作为一个起名困难症十级选手,报名时就偷懒直接用无线电管理部门指配给我的业余无线电台呼号作为队名啦。在每一次和其他业余电台进行通联的时候,都必须像开头那样向对方报出这个呼号,代表了我在无线电波上的身份。我曾用144MHz和440MHz波段和远在60公里外的苏州业余电台进行过通联,接受过来自国际空间站的SSTV图片,也通过卫星中继收听过日本、泰国、俄罗斯的业余无线电爱好者之间的通联。

咳咳,扯远了(手动狗头)。言归正传,今天,我怀着激动的心情,斗胆向参加第四届“复微杯”的小伙伴们分享一点小小的心得,希望能帮助大家取得更好的成绩!

我选择的是数字赛道的第一个命题。为啥选择这个题呢,主要原因还是自己太菜,不会的东西实在太多了。作为一个非微电子专业的学生,我对模拟电路的认识仅仅停留在本科阶段的“模电”和通信电子线路两门专业课的水平,实属一个门外汉,自然就排除了模拟赛道。又因为数字赛道其它两个命题有UVM验证方面的要求,再一次命中了我的知识盲区┐(´-`)┌,所以就只剩命题一相对而言比较有把握了。

这个赛题要求基于复旦微的PSOC平台设计实现一个语音关键词的整体方案,其中既包括算法模型,也包括相应的数字电路,是一个典型的软硬结合的赛题。“复微杯”的命题整体都比较人性化。像数字一这个赛题就属于限定了“做什么”,而“怎么做”则基本是完全自由的。相对于完全开放式的赛题,这种模式既可以帮助我们省去纠结前一个问题的时间,同时易于明确一个相对公平的评判标准,又可以在后一个问题上充分发挥同学们的创造性和技术实力。

算法方面,我沿用了组委会提供的Demo中的做法,也就是将时域音频信号转换为频域的声谱图,这样就和图像识别一样可以用常规的卷积神经网络(CNN)来处理了。和Demo工程所不同的是:

  • ①基于文献中的结论,我省去了MFCC(梅尔倒谱系数)特征提取中最后一级DCT(离散余弦变换),这么做不会显著降低后续CNN分类器的准确率,但可以简化特征提取流水线的硬件设计;
  • ②受到“软硬件协同设计”思想的启发,为了优化整体运行效率,让算法更好地适配硬件结构,我重新设计了CNN网络结构。虽然语音关键词识别也可以用LSTM等循环神经网络,甚至是Transformer结构的模型来实现,但是一方面自己对于CNN比较熟悉,另一方面无论是学术界还是业界,CNN硬件加速器更为成熟,可参考的先例更丰富。

电路部分,我采用的是文献和业界中都比较主流的NPU(神经网络处理器)构架。就像CPU一样,这种结构具有一定的通用性,能够运行自定义的指令。在使用的时候,只需要将神经网络模型“翻译”成为一系列指令,就能够在NPU中自动执行。正所谓方向不对,努力白费。

在早期确定一个比较合理的大方向能够在后期带来很多好处,所以大家在确定选题之后可以大致调研一下文献或者业界的方案,看看主流的做法是怎样的

其实,经过我的赛后复盘发现,采用NPU结构是我最终能够侥幸获奖的最重要的一个决策。

具体来讲,在比赛的初期阶段,PSOC平台的详细信息还是不确定的。所以,我在设计NPU的时候没有把算力堆得很大,确保就算是用ZYNQ7010这样最小规模的芯片,也能足以放得下一个NPU。如果PSOC的逻辑资源比较丰富的话,那就通过堆砌NPU的个数,以“任务级并行”的方式提高总体算力。也就是说,对于这样的大型工程,在时间和能力允许的范围内,尽量让自己的设计是灵活可配置的,预留一些退路,避免把电路结构做得太“死”了。否则,一旦在后期阶段才发现资源消耗过高无法综合,或者需要更改神经网络模型结构,那么就要修改大量RTL代码,并且把仿真、综合等等流程重新走一遍,这其实是非常麻烦的。

顺带一提,如果赛题要求采用复旦微自己的EDA工具来实现,那么我建议尽早去熟悉和使用它。越是到后期,时间和精神就愈发紧张,这时再去切换设计工具,可能要付出更大的代价。另外,从可移植性上来讲,也建议大家用HDL语言自行实现一些底层功能模块,不要依赖现有IP。关于一些基础模块(如RAM, ROM, FIFO, 移位寄存器等)的HDL描述方法,可以参考Xilinx的UG901文档,里面的《Chapter 4: HDL Coding Techniques》给出了许多具体指导及代码示例,可以为我所用。如果乘法器在你的设计中占主导地位,那么可以参考一下UG479文档,复旦微的FPGA/PSOC里的DSP Slice和Xilinx 7系列器件中的DSP48E1使用方法是一致的。

对于一个好的作品,表面功夫和内在功夫都很重要。好的表达,能够让他人更容易领会到设计本身的精妙之处。所以呢,号召同学们一定要重视代码风格的规范和报告的书写表达

对于前者,一定要注意一下这些细节:

  • 1)RTL部分的Verilog代码要使用规范的可综合语法;
  • 2)善用generate语句, 循环次数确定的for语句等使代码变得简洁明了,但也不要为了过分简洁而故弄玄虚地使用生僻语法;
  • 3)信号的名称、模块的命名需要有意义;
  • 4)代码的缩进不要混乱;
  • 5)避免“硬编代码”,常量尽量用parameter, localparam, 宏定义来表示;
  • 6)必要的地方添加注释信息。

对于后者,我建议大家预留出1-2周的时间专门用来书写报告,切忌拖到初赛DDL最后一两天仓促完成。初赛并不要求全部实现全部功能,提交报告之后还有比较充足的时间去收尾和完善。报告书写可以参考以下要点:

  • 1)文章结构要符合逻辑、条理清晰,内容安排上一定要突出自身亮点,也就是作品中独到的、有特色的、有创新的地方,一定要讲清,讲透,重要的语句可以用下划线、加粗等方式醒目标识。
  • 2)复杂的东西可以多加构思,用图表和文字配合把它形象生动地解释清楚,注意图表中的字体、配色等最好做到和谐、统一。例如,我的报告中对于解释数据预处理(特征提取)部分的算法是这样处理的:
  • 3)要注重分析和思考的过程,不要只写结论,应当把“为什么这样做”,“为什么不那样做”的原因和考虑都有理有据地呈现出来。例如,我的报告中关于如何确定软硬件划分这个问题是这样论述的:

好了o(*≧▽≦)ツ,以上就是我参加第三届“复微杯”大赛的一些粗浅的感悟,希望同学们在第四届大赛的陪伴下度过一段充实而愉快的时光,预祝大家都能取得理想的成绩,收获到丰厚奖金的同时也能收获成长。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 摸鱼范式 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档