时间:2024-08-10 来源:网络搜集 关于我们 0
早期的时候电路设计上是非常走极端的,到处呈现出极简主义的特点。例如:
1、在芯片里大规模使用latch而不是寄存器以节省面积。众所周知,latch锁存器比寄存器的面积要小得多,在一些以电路规模堆砌算力的处理器芯片里,存在大量使用latch代替寄存器来存储静态配置性数据的情况。这种设计在今天已经被抛弃了,主要是对后端实现上提出了更高的要求,特别是时序分析上。另一方面是难以在FPGA上进行原型验证,因为FPGA基本上是没有latch的。
2、在非运算功能的组合电路中大量使用伪随机数生成器取代加法器或减法器,比如典型的counter电路,由于本质上我们只关心counter的计数周期以及下溢出判断,而counter是不是从1数到16其实无所谓,于是就有了用伪随机数生成器代替counter来计数的办法,只要保证数字不重复地数一圈,数到0就下溢出即可,电路上只需要N个寄存器加一个同或门就够了,比加法器确实简单很多,只是用起来很折腾,配置初值要查表,比如你希望counter数个5,正常counter写个4的初值进去每时钟减1就可以了,而这种伪随机数生成电路你要先查表,看一下数5次以后变成0的那个初值应该是多少。
3、最不能忍的就是早期电路规模很小,所以对于地址空间的压缩简直令人发指。那时候系统的地址文档是把读写功能分开的,大部分地址的读含义和写含义是完全不同的,也就是说地址利用率几乎是达到了极致,每个地址都被用上了,只读寄存器所在的地址一定也可以写,只是写功能分配给了另外一个只写寄存器。一般来说,那时候每个功能的读写特性也是高度压缩的,如果一个功能只需要能写入就可以生效,那么它就一定是不可读的,几乎很少有同时可写又可读的功能,当时的软件是没办法把一个值写入一个寄存器地址后又读出来确认是否正确的,因为如果每个寄存器都可以读写的话地址就不够用啦!地址段的划分也是粒度特别小的,分给某个模块的地址空间基本都是能用完的。
4、在硬件描述语言出现之前,电路是用门搭的。所以很多历史悠久的产品都曾经经历过把电路翻译成硬件描述语言的过程(甚至有的一开始入错VHDL的坑,等到Verilog出现后又重新翻译一次),当时的自动综合工具还是新鲜事物,功能也比较弱,主要还是靠工程师对电路和时序的准确把握来确保代码和综合结果的一致性。但是因为这个时期的工程师对电路的理解还是更加透彻的,所以经常可以见到一些非常规的电路被使用奇怪的表达方式设计出来。