ASIC和FPGA其实是两个行业,就像verilog和c是两个不同的语言一样-FPGA常见问题社区-FPGA CPLD-ChipDebug

ASIC和FPGA其实是两个行业,就像verilog和c是两个不同的语言一样

ASICer遇到FPGAer,驴唇不对马嘴。

ASIC还是FPGA,这是个问题。

很多人都觉得同样都是写Verilog的,对于前端设计来说,FPGA和ASIC没什么区别,那么今天我就来告诉你这两个到底有什么不同,甚至从某种程度上来说,我觉得这就是两个行业。

复位不同

因为Xlinx的器件原因,Xilinx推荐高电平复位,在ASIC通常都是低电平复位。没听说过做芯片高电平复位的。

工具流差别大

FPGA开发大多是在Windows环境下开发,一个编辑器,一个Vivado可以走到底,下载bit流到开发板。一个人全流程。

ASIC开发基本都在Linux环境下开发,编译用VCS、debug用Veridi,清lint/CDC/RDC用Splayglass,收覆盖率imc,综合用DC,形式验证formality,后端做PR,DFT一直到GDSII的系列工具。需要一个完整团队,才能做出一颗芯片。

代码质量要求差别

FPGA开发,代码验证完,可以直接应Vivado自带的综合PR下板子验证。基本就没问题。

ASIC代码验证完,需要清除lint。因为很多写法是不可综合的。清完lint,进入综合,但fomal不一定能过,代码和综合后的网表对不上。综合、fomal不过,代码写得再牛逼,再快,验证的再好,也得改,重写。

ASIC的代码可以换成FPGA IP,直接放FPGA上验证,但FPGA的代码想要直接流片,还是有一段很长的路要走。

 验证方法学不同

FPGA验证也因为规模小的原因,很少听说用UVM的。而且FPGA工程师一般是自己设计自己验,然后自己下板调试,trace。一人全流程。FPGA工程师基本做FPGA产品。如果有人把芯片验证认为是测试,正是无知的体现。

ASIC验证方法学UVM已经统一。验证流程也十分完善,testpoint、testcase、testplan,regression,随机,覆盖率,后仿。到系统级别的验证更是设计到软硬件交互验证,加速器验证等,最后才到了上FPGA原型验证。而FPGA基本就是调接口,测软件,基本上很少会发现RTL的bug。

都叫综合/PR,但本质是不同的

FPGA内部的构造大致来说,LUT实现组合逻辑,D触发器实现时序逻辑,再加上一些BRAM,硬核资源,就可以实现任意电路。所以FPGA的综合就是把RTL映射到这些资源上。

ASIC综合是将RTL映射到标准单元库上,mem。有些RTL,语法是支持,但是就是综合不了。LUT就是个大mux,瞎写的代码LUT能映射,但DC不一定过。

FPGA综合和ASIC综合完全不是一个东西。

FPGA在ASIC中的角色

FPGA在ASIC开发流程中的作用,只是用做原型验证。前面复杂的开发流程,与FPGA自成体系的开发流程相比完全不是一个量级。

你用做芯片的方法去做FPGA那是降维打击,用FPGA的方法做芯片,那叫本末倒置。

但做芯片流程复杂,放到做FPGA产品上,会造成资源浪费,杀鸡焉用牛刀。

玩法不一样

FPGA玩的是什么,是灵活性高,需求不明确,量不大,或者需求老变化,FPGA正是派上用场。

ASIC玩的就是要量产,量越大越好。需求明确,市场定位明确,未来几年内都可以不断出货。

功耗

FPGA产品设计很少关注功耗,都是插电使用的板卡。

ASIC低功耗设计又是一套设计方法学,从RTL设计,到power gating,power domain的设计,upf编写。低功耗的验证。同样的电路,FPGA的功耗也会大。

面积

如果一个产品,只是小批量出货,用FPGA实现会减少成本。但如果到了百万级别的产品量还用FPGA,那钱不都让Xilinx赚了。代码规模大,用FPGA实现困难,成本高昂。同样的电路,FPGA的面积会比ASIC大很多

通才和专才

FPGA规模小,而且是直接面向产品,FPGA工程师可以出全栈工程师,软硬件全流程覆盖。直接面向产品更有意思。

ASIC设计流程众多,岗位细分,每个人更多的只能覆盖到自己的那一部分工作。做算法IP设计的,可能不用关注中端实现过程,甚至不知道自己正在做的这个IP会用到哪个产品上。做IP会出专才,专注于协议或算法。而SOC设计又是另一套方法学体系。

FPGA其实和软件类似

想一想,类似于做软件开发,代码开发验证完成出版本,然后上开发板去测。出现问题,回来再继续改代码。产品上市了,发现了一个bug,远程OTA打个补丁,升级一下。

ASIC总不能流片一下,试一下,几千万就叫你试一下?产品到客户手里了,发现bug了,那是非常严重,召回。这一批次都废掉。

可能就是因为这样的原因,做芯片必须步步小心。流片失败,对于很多公司来说,就是倒闭灾难。

最后

以上,种种因素,造成了FPGA和ASIC整套研发流程体系不同,所以我认为严格来说,做FPGA和做ASIC就是两个行业。

 上面讲的大部分我都认同,但是其中像FPGA其实和软件类似这个要修正一下,FPGA的你写出来的东西虽然不是对应实际的与非门,但是你写来的代码出是耗费实际硬件资源的,而且也是会影响性能的,如果按纯软件的方式来搞会浪费很多资源性能也会弱鸡,这也是为什么HLS这种东西搞出来的代码资源会比手写大很多的原因。当然除非你老板不在意性能也不在意钱。

请登录后发表评论