ASIC-FPGA敏捷开发

工欲善其事,必先利其器。

如今,在ASIC和FPGA的开发中,主流的是使用Verilog和System Verilog这两种HDL(Hardware Description Language)。

然而如果让几个工程师从头到尾用HDL去描述一个完整的硬件架构,从设计到完成仿真到最后交付,往往要花费数月的时间,本文为大家介绍几种现在在ASIC/FPGA开发中常用的几种敏捷性开发的工具,每种工具有不同的特点因此也适用于不同的场景,如果能结合工具的特性并运用到项目开发中去,将会节约大量时间。

本文简单介绍的几种工具,可以作为项目开发的加速手段,感兴趣的可以搜索资料深入学习,说到底,无论是用哪种方式,心中都要有一个电路的架构。


1、 HDL Coder

HDL Coder是MATLAB提供的一个工具箱,目前人工智能、大数据、图像处理兴起,传统的软件处理算法往往不能提供做够高的速度和效率,因此现在很多算法都在硬件化,鉴于很多算法如fir滤波、fft变换以及图像ISP的Pipeline中涉及处理算法都具有一定的复杂性,从头用HDL描述是一个耗时费力的过程,在这种情况下,接可以考虑使用HDL Coder工具,对于图像处理领域,MATLAB还提供了Vision HDL ToolBox工具,可以方便的使用SIMULINK工具搭建模型进行仿真和验证。

例如,下图是用SIMULINK构建的一个atan2模型,灰色的框是atan2处理单元,Y和X为输入激励

通过logic Analyzer工具可以看到输出:

选中要转换成HDL的模块,右键找到HDL Coder,然后使用HDL Workflow Advisor工具,按照工具流程走下去就可以得到对应模块的HDL,在生成HDL的时候可以方便的选择Verilog或VHDL语言,在生成HDL的同时也可以根据SIMULINK模型选择生成对应的testbench测试平台:

生成的代码可读性还是非常高的,另外HDL Coder也提供了代码优化的方式,例如可以选择优化生成电路的面积或者时许,优化面积时可以选择share factor实现资源(例如乘法器)共享,也可以通过Pipeline的方式优化关键时许路径,这种优化的方法都是HDL Coder自动实现的:

2、 HLS

HLS是Xilinx的一款高层次综合工具,与HDL Coder相同的是,对于复杂设计尤其是算法设计,都提供了一种简单快速的方式,不同的是,HLS使用的是C/C++的模型进行描述,描述语法尤其相关规定,使用者可以使用高级C/C++描述自己的算法模型,然后快捷的使用HLS工具将这种更高层次语言描述的模型转换成硬件语言描述的模型。

关于HLS的官方描述:

Vivado ML 概述 (xilinx.com)

本文不赘述HLS使用方法,Xilinx官方提供里HLS的例子,感兴趣的读者可以参考

https://github.com/Xilinx/HLS-Tiny-Tutorials.git

HLS作为FPGA算法开发还是十分高效的,但生成的代码的时序和面积往往不可控,代码可读性也不高。

3、 Chisel

Chisel是来自UC Berkely的一门硬件构架语言,基于Scala语言,可以继承Scala的丰富特性,使用者可以使用Scala的特性从更高层级上描述硬件架构的行为,然后使用Chisel转换成硬件描述语言,Chisel自诞生以来逐步完善,现在转换成的HDL描述也更加成熟,目前也有很多成功流片的案例。Github上有很多基于Chisel的开源项目,例如BOOM和XIANGSHAN

Chisel官方网站

Chisel/FIRRTL: Home (chisel-lang.org)

4、 Spinal HDL

Spinal HDL也是基于Scala的,更具体的说是一个基于Scala的库,相较于Chisel,一个显著的优点是生成代码的可读性比较高。无论是Spinal HDL还是Chisel语言,由于采用了很多软件以及面向对象的描述方法,对于使用HDL来描述硬件的工作者来说,入门门槛还是比较高的。但是对于FPGA开发者来说,使用起来还是比较容易的,Spinal作者也构建了一个基于RISC-V的CPU——VexRISCV,感兴趣读者可以去Github上获取相关代码,值得注意的一点是,索然Spinal HDL生成的代码可读性比较高,但是只能生成一个文件,也就是即使你用Spinal描述了很多模块,最后生成的只有一个HDL描述文件,这样不利于代码的仿真调试。

Spinal HDL的中文文档:

欢迎来到SpinalHDL中文文档 — SpinalHDL_Chinese 1.0.0 文档 (thucgra.github.io)

5、 Myhdl

如果你是一名ASIC IP设计者,但是又想利用Python语言的特性,那么Myhdl是一个很好的选择,Myhdl是一个Python的库,生成的代码可读性也非常高,编程的时候也可以借助Python语言的很多特性,值得注意的是,Myhdl虽然对ASIC开发比较友好,但也不是说可以不加限制的把Python语句转换成对应的HDL描述感兴趣的读者可以参考MyHDL官方网站,里面又很多例子:

MyHDL

需要注意的是,无论是Verilog还是System Verilog以及VHDL这种硬件描述语言,都是以一种描述性语言,也就是要心中有架构,心中有电路,心中有时序,才能写出对应的HDL描述,归根到底,数字电路设计的核心,是要了解电路的架构和原理,将需求的算法或者功能映射到具体的电路实现,这是一个数字电路设计工程师的核心能力。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值