2019年8月19-21日,2018-2019第三届全国大学生集成电路创新创业大赛全国总决赛(以下简称“大赛”)在南京江北新区研创园成功举办。作为大赛杯赛单位,Arm中国特设Arm片上系统设计挑战赛赛题。
大赛自开赛以来,共有来自全国七大赛区的197支队伍报名Arm杯赛题,经过企业评审和分赛区初赛,有27支团队晋级全国总决赛。经过8月20日一天的现场演示和评审,Arm杯赛产生了一等奖4名、二等奖7名、三等奖10名、优秀奖5名,此外,一等奖团队中的WNS<0队脱颖而出,获得了Arm杯企业专项奖。
为了让大家更深入的了解同学们优秀的作品,促进同学们之间的交流和学习,鼓励更多的同学参与到竞赛中,以赛促学,Arm中国学堂将把部分获奖团队作品分享给大家。
Arm杯-Arm片上系统设计挑战赛
杯赛题目:Arm 片上系统设计挑战赛
参赛要求:本科生组/无限制组
赛题内容:
利用Arm Cortex-M3 DesignStart处理器在可编程逻辑平台上构建片上系统,实现图像采集,图像处理和人机交互功能,观察并优化系统的性能。
使用ArmCortex-M3 DesignStart Eval提供的处理器IP,在你的可编程逻辑平台上构建简单的Cortex-M3片上系统。
团队介绍
参赛单位:复旦大学
队伍名称:芯生力量
指导老师:陈更生
参赛队员:丁路昶、高朋、王欢
总决赛奖项:一等奖
项目简介
这次Arm赛杯,芯生力量队按照赛杯题目要求,正确的完成了三个子题目,并且额外加入了赛杯没有要求的DMAC以及操作系统移植的内容,对于车牌识别速度和精度方面都做出了很好的成绩。整个SoC除了处理器软核以及特殊IP比如TIMER、GPIO以及AHB2APB以外,其余均是纯RTL设计,并且由此设计出了专门针对赛杯任务的高效SoC架构。
芯生力量队使用模板匹配算法,通过三级移位寄存器自动判断PPT是否切换,通过设计加速器中断,并分配最高优先级快速响应PPT切换动作,MCU软件在中断服务程序中及时将加速器识别结果捕获到DTCM,实现了高效的软硬件协同机制,极大提高了车牌识别速度。此外,通过熟练的RTL设计验证能力并且充分挖掘了模板匹配算法中潜在的并行性,利用FPGA天然的并行计算能力设计了大规模并行架构,使用寄存器堆避免了片上存储器以及片外DDR数据带宽产生性能瓶颈的所谓“存储墙”的问题,将加速器运行时间降低到了50ns左右,并且建立了完备的带有自我判断能力的SystemVerilog验证平台,进行了十几万组随机激励测试,同HLS综合的参考模型对比,均通过测试。最终在极快速度的前提下,达到了极高的准确率。
系统框架
芯生力量队使用rtl设计通用dmac,该dmac可以实现SoC系统任意两地址处的数据突发传输,扩展了Arm Cortex-M3的高效数据传输机制,为了配合总线的突发传输,在原Arm官方给出的外设ip基础上,修改源代码,扩展了总线功能,使能了各种形式的传输模式。值得一提的是,芯生力量队的整个SoC系统全部为手工rtl设计,包括软件驱动以及操作系统,全部为底层代码搭建起来的。为该次任务设计了定制化的SoC系统。
作品展示
技术创新点
No.1
利用模板匹配算法的大规模潜在并行性运算,设计了针对性的大规模硬件并行架构,该设计前半部分使用rtl设计以应对复杂控制流程,后半部分由于主要是数据通道,故使用hls加快开发速度,仿真结果显示,我们的加速器单次运行仅仅用了10个周期左右。
No.2
扩展了ahb总线系统,加入主设备仲裁模块,引入了优先级仲裁算法,扩展了各个外设的ahb从设备接口的功能,使能了官方ip所没有的各类传输模式。
No.3
该设计中包含了大量异步数据传输操作,包括豪威传感器、液晶显示器以及加速器和SoC处理器部分,均属于不同时钟域,我们使用计数器延长单比特脉冲长度,使用握手传输多比特数据,实现了高效异步单、多比特数据传输。
No.4
使用片上寄存器资源存储帧数据,避免片上有限的sram以及片外ddr低数据带宽的问题,可充分发挥fpga并行运算的优势,有效防止数据传输瓶颈,这使得我们的加速器单次运行时间极快。
No.5
从底层结合C语言和Arm汇编语言设计了简易FreeRTOS内核,该内核虽然简单,但是基本上具有完整的多任务优先级调度机制。
No.6
为了验证rtl设计的加速器,往往需要参考模型,我们充分利用了vivado hls工具的快速设计能力,设计了一个功能同rtl加速器完全相同的参考模型,仿照uvm验证思想,使用random-access的随机事务,经过长达一天多的modelsim运行时间,通过了数十万随机激励。
参赛体会
很怀念当初参赛的萌新们加入Arm赛杯群里讨论的日子,我们互相帮助解决那些卡了几天都解决不了的问题,那种一个问题卡好几天的痛苦经历^\_^还在记忆里没有抹去,为了这次比赛,我们的课程成绩很惨,因为有时候忙比赛就不去听课了。师弟在有毕设的压力下还奋斗在一线,队长在两次决赛前通宵熬夜,身体出了些问题,过去的惨痛经历现在回想起来还是可以笑着说出来的。
分赛区决赛前,我们的系统总是在PPT切换到中途就停了,不动了,这可快急死我们了。第二天就要出发去无锡,后天就要演示了,而且中途停掉的概率随着我们测试的进行越来越频繁,这可怎么办,如果演示的时候碰到这种事情,那可就几个月前功尽弃了。于是开始想到底是哪里出了问题,是摄像头过热烧了?是摄像头配置出了问题?还是摄像头那几个引脚悬空的问题呢......时间一点点过去,马上就晚上了,还是没有头绪。最后我们用vivado的ila查看了下传感器的帧数据波形,好吧,帧数据正常的,那就是我设计的rtl出了问题(感谢xilinx强大的工具哈),通过一宿通宵,发现是一个@(posedge clk)中的clk被我马虎写错了,异步传输发生了问题,好吧,毕竟我们的系统都是自己rtl搭起来的,就这样我们带着一宿没睡的困倦去了无锡……
想起了那句“你经历过绝望吗”,在这次比赛中,我们经历过很多这种绝望,不知道哪里出的问题,系统就是不对,传感器就是不按预期工作。但是我们都坚持下来了,在这次比赛中,我们学到了很多知识,hls如何设置位宽,深刻的感受到了软件的灵活性和硬件的并行性,并且为后续使用mcu设计灵活cnn加速器以提高网络的映射覆盖率提供了灵感。感谢竞争对手的优秀让我们有提高自己的动力,感谢Arm中国给我们这次机会。
<作品视频详见附件>
作品内容来源于芯生力量队,非开源,转载请标明出处,基于此作品的合作请联系Arm教育计划:EDUweixin@armchina.com