在填坑过程中我发现一个问题,就是如果用修改的方法填坑的话,填了坑也不会被放到首页上面去。所以我决定用另外一种方法填坑。直接发新的文章然后把旧的文章删掉,这样就可以保证填坑后的文章被放到首页啦。而且这样一来还可以把催更的留言都一并删除毁尸灭迹了,简直是一举两得的大好事啊!
闲话少说,我们就开始今天填坑的内容:架构设计入门!
说到这个架构设计啊,很多人会疑惑。不单单是新手疑惑,一些从事工作好多年的老司机也会疑惑:啥架构设计,为什么扯那么玄乎的东西出来呢?还有的疑问就是:软件架构我听过,资料也多。集成电路的架构是啥?或者说硬件的架构是啥玩意?
我一项主张对技术名词,尤其是从国外引进的技术名词需要去追根溯源它的英文词源(如果起源于拉丁文,可能还需要去溯源拉丁文。还好我们这个行业的技术词汇大多都是这几十年由英语国家的人搞出来的。)那么硬件的架构的对于英文词汇叫Hardware Architecture。这次在维基百科上是这样解释的:
In engineering, hardware architecture refers to the identification of a system's physical components and their interrelationships. This description often called a hardware design model, allows hardware designers to understand how their components fit into a system architecture and provide to software component designers important information needed for software development and integration. Clear definition of a hardware architecture allows the various traditional engineering disciplines (e.g., electrical and mechanical engineering) to work more effectively together to develop and manufacture new machines, devices, and components.
具体的我就不翻译了,直接说红色标注的重点:硬件架构实质上是一种模型,一种包含了系统内部所有物理器件以及它们之间互联关系的模型。这种模型对于硬件工程师来说告诉了他们如何把这些物理器件适配(或者叫组装)成一个完整的系统。而对于软件工程师来说,让他们知道软件开发和集成所需要的一些重要信息。
如果说上面的内容还是比较抽象晦涩的话,我可以举个生活中的例子。其实Architecture这个词的词根来源于建筑(architect).大家应该知道建筑设计师和土木工程师的区别。建筑设计师是一个“描绘蓝图”的人,他负责设计了建筑的外观、框架结构以及建筑风格。而土木工程师则是具体的负责指挥怎么去添砖加瓦造出这个房子。其实硬件架构就是这样一个“设计蓝图”。在实现硬件之前我们需要了解到这个硬件由几个部分组成,每个部分都完成怎么样的功能,部件之间的连接关系是怎么样的。
再举一个例子,计算机应该是大家比较熟悉的了。从架构上来分析传统的冯诺依曼式计算机就会分为五大部件:运算器、控制器、储存器、输入设备和输出设备。而这些部件之间又需要定义明确的互联关系。例如早期的计算机架构以运算器为核心,数据传输都要通过运算器中转。而现代的计算机架构以储存器为核心,增加了类似于DMA这样从IO直接传输到储存器的设计等。
从上面的解释可以看出,架构设计师非常重要的。通过架构设计,实质上就是为了整个硬件系统的设计“定了基调”,“指明了路线”,“规划了方案”。但为什么现在很多电子工程师却对于架构设计显得比较陌生呢?其实这主要是因为集成电路的发展使得电子系统单片化的趋势已经成为现实。架构的设计和选择更多的是提现在SoC芯片内部。对于越来越多的电子工程师,架构设计的工作被另外一个词——“芯片选型”所替代。在大多数时候,芯片设计公司甚至推出了各站各样半成品Demo甚至是接近于“即买即用”的解决方案。也就是说,很多电子工程师非但没有干“建筑设计师”的活,甚至也很少干“土木工程师”的话。他们实质上是干上“装修公司”的活。这其中固然有行业发展变化的因素,但也让人唏嘘感慨。
那么如何做好架构设计呢?其实架构设计的秘诀在于两点:理解需求和均衡开销。理解需求的意义在于明白这个硬件最核心的功能、工作环境、限制条件等。这是整个设计的前提,也是开始整个设计的起点。如果不能正确的理解需求,设计开始的时候就会无所适从。均衡开销是指在满足主要的设计指标限制的前提下,尽可能的减少开销或者对其它指标带来的影响。就好像建筑设计师绝对不会因为建筑美观而且牺牲掉建筑的安全性一样的,各项指标都是需要均衡的。
其实架构设计是有套路的。对于数字系统而言,整个系统从宏观上可以分为控制逻辑与数据通路两大部分。首先把系统的数据运算部分分离出来,做好明确的定义。因为设计相关的指标如速度、精度、功耗、硬件资源等主要是由这部分决定的。当定义清楚以后数据运算部分后,再考虑用什么样的物理器件,用怎么样的互联方法。这样就搭建好了数据通路。接下来根据数据通路的具体情况,去“按需生成”一些控制信号。这部分主要靠状态机电路来实现了。
好了,最后来讲一个小例子。大家看到我的寒假作业里面有一个生成斐波拉数列的题目,要求以最少的逻辑资源实现。这个应该怎么实现呢?首先考虑数列需要两个数相加,那么就需要有两个寄存器用以保存当前的这两个数,还需要有一个加法器来实现两个数相加。要求循环生成1000以内的数据,所以需要有一个判断这个数据是不是大于1000的电路。接来来怎么相连呢?由于Fn=Fn-1+Fn-2,两个寄存器首先串起来得形成一个移位寄存器。然后把相加之后的结果反馈到移位寄存器的输入端。接下来输入接判断是不是大于1000的电路。然后呢?大家可以考虑一下控制逻辑怎么设计。