我有点清楚我和你意见分歧的原因了。说到底是习惯的不同,造成了对ASIC结构理解的不同。
对于ICer来说,所谓ASIC是在一个时钟周期内,完成一次算法操作。得到一个输出。
而对SOFEer来说,习惯于微指令,一个算法可以在多个时钟周期中完成,而得到一个输出。
举个例子来说吧。每一次sha256的计算,就是对W数组的48次循环,和64次主循环。每个W循环约24个CPU指令,主循环大致需要30个CPU指令,再加上一些附加内容总计约3100个CPU指令。因为这些都是最简单的与或非操作,所以用ASIC来实现也就意味着3100个门电路。所以一个核就是这么3100个电路。
但是对我来说,我会设计一个W数组核,一个主循环核,并按3:4配比(当然,稍微浪费一点,用1:1来配比,可以简化不少结构),形成一个小核。在一个时钟周期内,W数组核执行一次,主循环核也只执行一次。
再用16个小核形成一个大核。这样的一个核也是3100个门电路。
原来是在一个时钟周期中产生一个结果,而我的这个流水线核,是在64时钟周期内,产生64个结果。执行的效果与原来的核一样。
由于各个同类型的核之间,没有数据交换,可以认为他们的总线是割裂的。所以造成的最大的好处,就是对带宽的要求降低64倍。
当然,我都称其为流水线核了,设计这个一个核的难度,比原来的要难。
所以,我认为,对内存带宽的要求,会随着流水线长度的增加而减少。不过就是增加设计难度么。
当然,我没有IC经历,我的这些推导,是根据CPU结构而想象的。不知道是否正确。