性能指标是啥?该怎么去定一个设计的架构?相信很多初学者不曾想过这些问题,或者曾经想过却没有太care,毕竟对初学者来说,能够实现功能就已经相当振奋人心了。所以在面试的时候,很经常会遇到一些应届毕业生,连设计的时钟怎么约束都不清楚。但是,随着学习的深入,你会发现在工作中,仅仅是功能实现,已经满足不了需求。评估性能,然后定架构,是每个设计工程师必然会遇到的问题。
本文借助一个具体的例子来跟大家说说,我是怎么根据性能指标去定出自己最终的架构的。其步骤大概分为五步:
- 提出性能需求;
- 根据性能需求画出架构图;
- 画出架构时间线图;
- 调整架构,重新评估;
- 根据设计复杂度,面积和功耗来确认最终方案。
第一步,提出性能需求
工作中,性能需求大部分来源于市场。例如竞品的性能提高了,为了跟它对标,我们必须跟着有所改进,否则只会被残酷的市场淘汰;又例如,配套产品的性能提高了,我们必须要提高性能与其适配等。
下图是市场的一个设计需求,其中DMAC和FC是现成的模块,SECC是需要我们重新设计的。
整个系统的数据流为:
- FC模块将数据以4KB为单位送给SECC模块,数据位宽为64bit;
- SECC模块接收到4KB数据后,就可以启动解码;
- 解码完成后,再把这4K数据发给DMAC,数据位宽为64bit。
已知条件有:
- SECC解一个4KB数据需要花费的时间是2154T;
- DMAC和FC使用的是200M的系统时钟,吞吐率都在500MB/s;
- 系统可用使用有200M和320M两个;
- 为了节省面积,只能使用单口RAM进行缓存。
第二步,根据性能需求画出架构图
首先,最简单也是最容易想到的架构如下:
该架构的数据处理可分成三个步骤:
- 把从FC传过来的4KB数据缓存到RAM中;
- 启动ECC4K_DEC进行解码;
- 解码完成后,将数据从RAM中搬走。
第三步,画出架构时间线图
如下图,根据上面的数据处理步骤画出时间线图。其中wr_ram表示把从FC传过来的4KB数据缓存到RAM中,因为数据位宽为64bit,所以耗时为512T;dec_ram表示ECC4K_DEC在解码,耗时为2154T;而rd_ram表示将4KB数据从RAM中搬走,因为数据位宽为64bit,所以耗时512T。
从上面的分析,可得:处理4KB数据的总耗时为1024T+2154T。在这种架构下,即使使用320M的时钟,SECC的吞吐率也只有401MB/s,比DMAC和FC的500MB/s都低,显然SECC成为了设计瓶颈,需要调整架构。
第四步,调整架构,重新评估
如下图,在上面架构的基础上,加多一片RAM。对两片RAM进行pingpong操作。即在解码的同时,FC可以将下一个4KB数据写到另外一片RAM中,这样能保证解码模块一直在工作,隐藏了数据从FC到写到RAM的时间。
该架构的时间线图如下:
假设写wr_ram和rd_ram用的是clk1,dec_ram用的是clk2。那么总耗时为1024Tclk1+(2154*data_len/4KB)Tclk2。我们以传输的数据长度为128K进行评估:
- clk1和clk2都是200M,吞吐率大概为366MB/s,不能满足要求;
- clk1和clk2都用320M,吞吐率大概为585MB/s,可以满足要求。
第五步,根据设计复杂度,面积和功耗来确认最终方案
如果采用上面的第二种方案,clk1和clk2都为320M,会带来两个问题:
- DMAC和FC都是200M,这样SECC和他们便是不同的时钟域,设计上要做大量的跨时钟处理,增加了设计的复杂度和加大了风险;
- 320M的时钟无疑会带来更大的功耗。
那么我们可以考虑另外一种方案:clk1使用200M,clk2使用320M。这种方案SECC的吞吐率为569MB/s,能够满足要求;且由于wr_ram,dec_ram和rd_ram三者是有严格的先后顺序的,所以我们只需要在dec_ram之前将ram的时钟切到320M,dec_ram之后再切回200M即可。不仅降低了设计复杂度,还降低了功耗。
作者:年哥
原文链接:IC小迷弟
推荐阅读
更多IC设计技术干货请关注IC设计技术专栏。