进行算法研究的主要工具有MATLAB、Python,以及普通的C/C++开发环境。
数字电路设计分为前端和后端。前端开发工程师负责编写RTL,即对数字电路的抽象描述。后端开发工程师负责将该抽象描述转变为具有具体型号名称的电路元器件,并且将其放置在特定的位置,用线路将它们连接在一起。因此,前端是抽象型电路,后端是具象型电路。
为什么不直接描述为具象型电路,而需要先描述为抽象型电路呢?
在早期的数字设计中,确实是直接描述为具象型电路的,设计中的每个逻辑在设计伊始都带有具体的元器件编号和类型,开发工程师需要查阅元器件手册,了解特定元器件的输入、输出要求,根据要求来构造信号。开发工程师需要熟悉元器件手册上每一种元器件的功能和输入、输出特性,对于目前动辄上亿门的芯片来说,这样的设计显然太慢了。
抽象型设计就是工程师可以不用特别熟悉元器件手册,只凭借抽象的元器件进行设计,这些抽象元器件都可以用可综合的Verilog语法进行简单表述。例如,一个与门在元器件库中会有多种类型,有两输入的,有三输入的,各个元器件还有不同的驱动能力,而用抽象方式表述它们时,只用一个“&”即可。
数字电路最重要的指标——时序,以及时序依赖的物理实体——路径,就定义在两个寄存器之间,因而抽象描述的电路一般称为RTL,说明它是以寄存器为基础的。
数字前端开发的工具主要是Gvim、VCS和Verdi。Gvim是文本编辑器,工程师常用它来编辑RTL代码。VCS是仿真工具,输入RTL和验证平台文件TestBench,就可以进行仿真验证。仿真后生成的波形常用Verdi进行查看。
将抽象型描述变为具象型描述的翻译过程,称为综合(Synthesis),一般由综合工具来完成,最常用的综合工具是Design Compiler(DC)。
具象型描述一般以网表(Netlist)的形式输出,后端工程师需要将其输入到布局布线工具中,寻找合适的元器件位置并进行连线。常用的布局布线工具有ICC2和Innovus。对各阶段生成的电路进行时序检查的工具常用Prime Time(PT)。
在数字流程上还有很多保证设计质量的工具,如进行一致性对照的Formality,检查设计语法和缺陷的Spyglass等,这里不再赘述。