数字设计(一)之设计选型

万物皆在一定的约束下运行。芯片选型也不例外。在此,不必谈论芯片本身的功能、性能、功耗、接口电平、配置编程方式、封装等等精确的指标。本质上,芯片选型是典型的down-top实现的第一步。芯片的底层设计与FPGA设计在前端有很多相似之处,后端则大不相同。而究其根本,则都是数字电路和系统的设计。永远都是关于模块(数据通路和控制通路)和架构(模块类别和组合方式)。所以,有条件的话,可以从门电路开始选起,然后设计VLSI超大规模集成电路(包括FPGA类),然后设计电路板、编写verilog代码(给FPGA用),然后设计板卡互连(成为机箱设备),然后设计设备互连网络机制(成为计算机系统)。

电子系统的硬件即是电路,芯片也称为“集成电路(IC)”,是在硬件总体设计完成后,从最bottom进行实现的第一步,是最终电路产品的一个个子核心,因为PCB本身真的只有铜线而已,只是具备连接功能,而不具备逻辑功能,而芯片作为一个个的电路孤岛,通过PCB互连(当然现在也有SIP技术,在一个封装内互连)。那么每个芯片的选择,事实上受着总体设计以及互连其他芯片的约束要求。而在设计中,总是先选择了“明星芯片”,才继续为他搭配班底。明星芯片也就是核心芯片,该类芯片可能用10%的体积比例,占了90%的功能实现,比如CPU、FPGA等大规模器件。电板的功能说由这种芯片决定也不为过。所以,其他芯片的选择基本围绕核心芯片并服务于他。核心芯片一般也会确实起到核心作用,提供最完善的设计参考供选用,并具备外围连接方案,让设计用“开卷”的方式快速完成。当然也造成了设计同质化,不同厂家的电板围绕同一个核心芯片基本具备相同功能,剩下的就取决于接口和结构的差异了。

基于FPGA等可编程器件的开发则是另一种境界了。虽然提供了同样的LUT和D触发器,但不同的组合结构造就了截然不同的功能。需要关注的仅仅是,这些资源能够满足最大功能的野心。我们通过一种状态化和程序化的软件开发方式描述我们的需求,通过开发环境转化为了互连电路的配置比特,加载到FPGA芯片后就具备了我们之前软件语言描述的功能。可以说,是通过软件方式开发硬件。反过来看,PCB芯片选型和互连难道不像通过原语直接设计的方式吗?每颗芯片就可以用一个原语在程序中表示。理论上,硬件描述语言和原理图再加布局布线工具可以实现所有类型的硬件设计。剩下的天下则任由各种编程语言在冯诺依曼机器上争芳斗艳。

在软硬件协同设计中,最直接的感受是,硬件的确存在巨大的局限性,也就是来自笛卡尔积,即随着可配参数的增多,状态数量也在剧增,一直到了无法直接用硬件完全实现系统功能的地步。这个时候,软件就来解围了。软件操作的本身,就是在编码大量状态,而只执行功能需要的状态迁移,对于暂时不需要的状态,不会像硬件一样还保留在电路中,而是通过堆栈转存的方式暂存了起来,通过程序指针的不断切换,实现了理论上的图灵机的功能。因此,0到硬件的能力上限,软件则是一骑绝尘,活生生把自己的功能扩展到无穷。软硬件协同才达到了系统整体功能。

本文对硬件进行了实现和功能的粗浅讲解。

verilog设计时序电路时是自然的,直观的,本质就是在设计各种状态机群的控制通路和数据处理通路。并最终将两者结合,形成系统。

总结来看,选型问题存在于各种设计过程中:芯片选型、软硬件分配选择、软件开发语言选择、数据结构选择、算法选择、硬件平台选择、状态机实现方法选择,选型问题就是一个当前条件下最优化的问题。

 

甲方指南:系统需求描述,提出系统功能设想。

乙方论证:通过系统功能设想,得到系统结构设想。一般需要乙方设计进行预验证工作。

乙方设计:

结构方向设计和验证

算法方向设计和验证

硬件方向设计和验证

软件方向设计和验证

乙方制造施工:主要是结构和硬件加工。

形成实际的系统结构,具备实际的系统功能。

甲方乙方,逐步进行迭代改进验收。

 

你可能感兴趣的:(数字设计)