昨天在群里和一帮朋友讨论了一下硬件工程师到底应该干什么?开发FPGA的工程师算不算硬件工程师?现在趁着有空加上正好有点印象,先在这里记录一下。结论不一定正确,欢迎探讨。
其实之所以出现这样的问题,本质原因是现代电子设计技术不断的向前发展,设计手段在不断的进步。最初的硬件工程师是利用现成的电子元器件来构建电路,这些电子元器件包括了分离的电阻、电容、电感、二三极管以及一些中小规模集成电路。后来出现了很多大规模的专用集成电路,硬件工程师的工作主要就转向了参与设计方案、选择合适的集成电路实现这一方案(器件选型)、绘制电路原理图和PCB。但如果将多个专用集成电路组合起来实现一定的功能并不是简单的画几根线连接一下就完了,而是需要在期间设计相应的电路模块将这些芯片“粘合”在一起。最初在电路功能都比较简单的时候,“粘合”的电路是依靠中小规模集成电路来实现的,比如译码器加上锁存器之类的。后来发现用固定的中小规模集成电路来做这种比较灵活的“粘合”并不适合,于是就有了可编程逻辑这种器件。这种器件的好处就在于可以通过编程的方法改变器件的逻辑功能,灵活的实现各种逻辑电路。硬件工程师就利用这种特殊的器件把其它的专用芯片连接到一起构成具有特定功能的电路。因此,可编程逻辑器件一开始是由硬件工程师开发,在这个阶段还没有诞生专门的逻辑工程师。
而随着可编程逻辑器件的发展,尤其是随着FPGA这一可编程逻辑器件的不断演变成熟,FPGA的规模越来越大。原来很多需要由外部专用集成电路实现的功能都转而由FPGA来实现了。此时的FPGA就不单单是做点译码,做做锁存这种简单的“粘合”功能了。而是通常会实现复杂的数字系统和数字信号处理算法了。这个时候再让负责画电路板的硬件工程师专门去开发如此大规模的逻辑电路已经不现实了,对于某些应用来讲FPGA的功能已经相当于开发一个专用芯片的功能了。这时候就需要有专门的工程师来负责这一块。这个工程师首先应该是对系统比较了解,因为从宏观上来讲FPGA还是作为系统的一个部件来使用的,甚至是承担了系统的大部分功能的。但从另外一个方面来讲,这个工程师又是从事电路级的开发,因为他在设计一套专用的数字电路,只不过这个电路的载体是FPGA。因此这个层面上的设计主要是在数字逻辑这个层次上的(注意和IC设计的区别在于不关注门级、器件级和版图级的设计),所以这些工程师被称为逻辑工程师。
由此可见逻辑工程师是因为可编程逻辑器件规模扩大了以后,从硬件工程师中独立出来专门从事可编程逻辑器件开发的一类工程师。而所谓的硬件工程师,现在回归回去专注电路板的设计,其关注的重点放在了EMC/EMI等如何提高电路板在高速条件下运行的可靠性方面。但并非所有的公司都设有逻辑工程师这一职位,在某些不需要大规模可编程逻辑的公司中,硬件工程师仍然是肩负着开发可编程逻辑电路的使命的。换言之在某些场合硬件工程师可以干逻辑工程师的活,而逻辑工程师干不了硬件工程师的活。