数字芯片设计如何入门?

贡献者: 王洋077

FPGA的本质就是个ASIC,主要由一些最简单的逻辑电路单元和连线资源构成,通过更改连线方式便可实现不同的逻辑功能,但是资源是有限的,所以针对不同规模的电路需要选择不同的器件。 数字集成电路设计一般也是针对通用的库来实现,库一般由代工厂提供,其本质也就是基本的逻辑电路单元。至于ASIC中的连线资源,就比FPGA要灵活多了, 一般根据你想做几层金属,就可以走几层的线,这和PCB板布线类似。其资源相对就是无限的,或者说你电路规模多大,你就可以把芯片做多大。 针对以上两点,FPGA设计和ASIC设计有着很大的相似之处,至少在数字电路这一块基本是相同的,当然ASIC要考虑的东西比FPGA就要多得多了。

1第一步,首先是要实现功能,方式一般采用HDL描述,如verilog,VHDL。当然对于小规模电路也可以采用电路图输入的方式。

2第二步,得保证电路功能的正确性,也叫验证,可以通过软件仿真,硬件仿真等方式实现。软件仿真一般比较直观,方便调试,因为每一时刻的状态都可以看到,这好比调试软件程序。硬件仿真一般就是指FPGA验证,就是把电路用FPGA实现,然后去跑,这个的好处就是速度很快,譬如一个视频解码核,解一帧图像出来,软件仿真就算用最好的服务器,也得跑上多少秒,但是在FPGA中实现的话,基本就是多少毫秒了。这对于一个需要大规模验证的电路来说,是必不可少的。 前面两步对于数字IP来说,ASIC和FPGA基本一致,除非一些实现技巧的差别。

3第三步,在你描述的电路正确性得到确保之后,你就要实现它,就是要把你写的那些代码变成实实在在的电路,如寄存器还是与非门,这个过程就叫综合。由于电路规模日益复杂,一般最基本的电路就被做成了cell,如寄存器,与非门,就不会再细化到用三极管怎么去搭的问题了。这一步对于FPGA和ASIC来说就是最小的那个单元不一样。FPGA是做好的电路,一般顾及通用性和效能,基本电路单元就做得比较大,如LUT,就是由寄存器和与非门构成,你可能只用了其中一个与门,但是还会占用这么一个单元。对于ASIC来说,两输入的与非门,就是一个简单的门电路,甚至为了区分驱动能力和时序特性差异,还分了好几个等级,有的面积小,有的驱动能力强。总的来说这一步就是工具把你的描述变成基于库的电路描述。

4第四步,你得到基于库的电路描述之后,就要考虑这些单元怎么摆放的问题,这叫布局布线。FPGA的话连线资源有限,所以需要不断地调整,在保证时序要求的情况下,把你的电路映射到其固定的资源分布图中间。ASIC的话一般是根据周边电路需求,时序要求,把你的电路放到芯片的某个位置。在摆好之后还得考虑连线是否能通,各级延时是否能满足电路的建立和保持时间要求等等。

5第五步,输出。FPGA就是输出一个配置文件,告诉FPGA芯片该怎么样去配置其电路,使其实现预期功能。该文件可以在FPGA上电之后再由PC下载进去,也可以保存在flash里,电路上电之后自动配置。ASIC就是输出一个版图文件,告诉代工厂该怎么去腐蚀硅片,该怎么连金属等等。 当然在这过程中间会有各种各样的辅助步骤。总的来说都是为了确保你设计的电路正确及正确实现你的电路。

6罗罗嗦嗦说了一大堆,回头看似乎有点答不对题,其实你那些问题都不是问题,做过一遍之后就知道了,看别人说一大堆不如自己动手做一遍,具体做的过程有问题再提吧。

1 2 3 4 5