Vivado高效设计案例分享大赛---4 体验全新高效的分析、综合与实现技术

Vivado套件相比于以往的ISE套件的提升,不仅仅在于表面上看起来更加美观的GUI,更重要的是在于其内部算法的全新设计。例如综合和布局布线技术,需要把我们的设计,例如一个HDL文件,转换为网表,映射为RTL级别的加法器、触发器等,最后布局到FPGA的实际硬件中,变成SLICE中的LUT、MUX等的组合,然后要把这些基本组合连接起来。这就设计到了很复杂的综合和布局算法,需要在看似数不尽的组合中尽量选择出最优化的组合来,最后归结为一个很复杂的极值优化问题,于是我们偶尔会听到的遗传算法、退火算法什么的都出来了。因为7系列和其以后的FPGA/AP SOC都将更加复杂,传统的综合算法不能实现一个综合和布局布线的更优化效果,所以Xilinx建议我们在设计中针对7系列及以后的更新的器件使用Vivado进行开发,因为Vivado使用了更加先进的处理算法。         对于我们使用者来说,能体会到的显著效果就是复杂设计中效率的提升了,再配合上Vivado套件中优化的设计流程,能够让我们更方便的进行开发、调试和分享。下面是一个简单的例子。         首先,把电机控制中常用的SVPWM算法输入进来。不计算注释和空行,有接近700行代码,也不算特别简单的程序了,主要是有一些定点数的加减法、乘法和几次除法;目标板是MicroZed,这段代码全部使用PL部分实现。输入完成并完成仿真验证之后,点击Vivado开发环境设计流程导航中的RTL分析下面的分析网表,如图1所示。[[wysiwyg_imageupload:1010:]]图1 分析RTL          分析得到的结果如图2所示,可以看到网表结构很清晰,对我们进行设计的分析很有帮助。[[wysiwyg_imageupload:1011:]]图2 2 RTL网表         按住Ctrl+鼠标的滚轮,放大看,可以看到每个调用的子模块左上角出现了一个“+”号。如果我们直接双击,则进入下一层,只显示F2这个子模块的RTL,这是传统的RTL分析工具的功能;如果点击+号,则可以在保留显示其它子模块的同时,对F2进行局部放大,如图3所示,这一点对我们弄清楚某些信号的来龙去脉特别方便。[[wysiwyg_imageupload:1012:]]图3 RTL局部放大         此外,得益于Vivado集成化的开发环境,我们也很容易把RTL图中的信号与HDL等代码中的信号直接进行一一对应,非常直观,如图4所示。[[wysiwyg_imageupload:1013:]]图4 集成化开发中模块与代码的对应         观察完RTL之后,进行设计的综合,如图5所示。[[wysiwyg_imageupload:1014:]]图5 设计流程中的综合         先点击Run Synthesis,然后就可以查看综合后的示意图了。整个设计的示意图如图6所示。这里需要注意的是,要选择顶层模块之后再点击图5中的Schematic,显示的才是整个设计的综合结果,否则如果被选中的是一个子模块,则显示子模块的综合结果,一个大方块摆在那里难免一头雾水。那如果不想多点一步却想看到上次设计怎么办?直接在空白处双击一下就好了![[wysiwyg_imageupload:1015:]]图6  综合后的示意图         在Vivado开发环境中直接点击网表中的某个子模块,就能直接定位到综合结果中对应的位置,这也是集成开发环境的高效所在。如图3类似,这里同样有局部放大的功能:“+”。         最后点击设计流程管理器中的设计实现Implementation里面的Run,经过CPU多线程的高效运行,实现过程也很快就完成了。然后我们打开实现的结果,就能看到SLICE、LUT等等这些构成PL部分的基本集合了,如图7所示。曾经为了查看这样的实现结果,我们还得从ISE再打开PlanAhead。。。[[wysiwyg_imageupload:1016:]]图7 实现结果         这里,我们可以再次体验集成化设计思想带来的便利:直接从实现后的LUT中定位到源代码或者综合结果,如图8所示;是不是很神奇?[[wysiwyg_imageupload:1017:]]图8 从实现结果定位代码这里简单的总结了一下Vivado集成开发环境在RTL分析、综合与实现中的高效与容易上手之处。