芯有所想

精益求精

速度,面积,功耗永远都是折中的吗?

在芯片设计中,大家通常都会注意到几个重要的指标:

  1. 速度:电路可以跑多少MHz的时钟频率,一般来说,速度越快,能处理的数据量就越多,性能越好。
  2. 面积:电路的物理实现需要占用硅片的面积,占用的面积越小,成本越低。
  3. 功耗:电路工作所消耗的能量,功耗越低,芯片越省电,发热量 也越低,能耗低,环保。

书本上说,速度、面积、功耗是互相牵制的,在相同的制造工艺(制程)条件下,一般来说,

  1. 速度越快,晶体管尺寸越大,面积就越大,功耗也越高。
  2. 为了降低功耗,可以降低芯片的工作速度,让时钟的跳变频率变慢。
  3. 为了降低成本,减小芯片面积,可以采用面积比较小(W比较小)的晶体管,由于电流和W成正比,因此面积减小,速度会变慢。(为了即减小面积,同时提高速度,则必须让L变小,也就是提升制程,65nm换成45nm,45nm换成28nm等等)
  4. 为了提高速度,我们需要加大充电电流,加大电流,必然导致功耗增加。(为了不增加电流而提高速度,必须减少电容,或者降低充电电压,这两个动作也是靠工艺水平的提升来实现,比如45nm换成28nm工艺)

请大家注意,上面的速度、面积、功耗的折中和互相牵制是建立在相同制程,相同的IP Vendor,以及相同的电路条件下。我想要提醒的是,如果不满足这3个条件,这3个因素可能不是折中的关系,有可能会出现速度慢,面积大,功耗也高的情况。说明如下:

  • 在相同的工艺制程,相同的IP Vendor(包括相同的标准单元)条件下,同一个功能,不同的电路实现方案,有可能会出现方案A比方案B面积大,速度慢,功耗高。下面用一个6分频电路示例来进行说明:

    • 方案A

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      
      module div6_A(
      	      input 	   clki,
      	      input 	   rst_n,
      	      output logic clko);
        logic [2:0] 		   cnt;
           
        always @(posedge clki or negedge rst_n) begin
          if(!rst_n)
            cnt <= 3'd1;
          else if(cnt == 3'd6)
            cnt <= 3'd1;
          else
            cnt <= cnt + 3'd1;
        end
           
        assign clko = cnt[2];
           
      endmodule
      
    • 方案B

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      
      module div6_B (
      	       input 	    clki,
      	       input 	    rst_n,
      	       output logic clko);
        logic [2:0] 		    cnt;
             
        always @(posedge clki or negedge rst_n) begin
          if(!rst_n)
            cnt <= 0;
          else
            cnt <= {cnt[1:0], ~cnt[2]};
        end
           
        assign clko = cnt[2];
           
      endmodule
      

      上面的电路,功能一模一样,都实现了时钟6分频。方案A的使用了加法, 方案B采用了循环移位。分析如下:

    • 加法比移位的逻辑电路多,方案A的面积比方案B大;

    • 加法需要的逻辑路径长,因此方案A的最快工作频率低于方案B
    • 方案B逻辑少,数据变化产生的节点电压变化少,并且,方案B类似格雷码,触发器的跳变次数也比方案A要少,因此方案B的功耗小。

综上所述,方案A比方案B,面积大,速度慢,功耗高。彻底的完败。

因此,在实际电路设计中,不要仅仅考虑功能实现,需要多想想是否有更好的解决方案,让面积,速度,功耗表现更佳;优秀的工程师和平庸的工程师设计出来的产品会有巨大的差异,竞争力体现在人才的智慧上,聪明的大脑在芯片设计中至关重要。我们每个设计工程师都要力争成为智慧的工程师。

2)同样的数字电路,选择不同的标准单元库,有可能会出现标准单元库A的实现,比标准单元库B的实现面积大,功耗大,速度也慢。可以参考上面的解释,因为不同的标准单元库是不同的人设计出来的,也有聪明和平庸之分。即使同一个Vendor的不同标准单元库,也可能会发现新的改进库比原来的面积,速度,功耗都要优。模拟IP也如此,不同的Vendor有差异。 由于IP 库的差异,对设计工程师提出了更多要求,要求芯片设计者能够甄别比较优秀的IP,从而提升产品的整体竞争力。IP如果选择了比较平庸的,将来产品的竞争力就会大打折扣。