新闻中心

EEPW首页 > EDA/PCB > 设计应用 > SOC参数自动配置设计方法与功耗优化

SOC参数自动配置设计方法与功耗优化

作者:时间:2012-10-29来源:网络收藏

∥Synchronous FIFO.fifo _depth x fifo _width bit words。

module dma _fifo (clk,rstp,din,writep,readp,dout ,emptyp,fullp);

input clk;

input rstp;

input [15:0] din;

input readp;

input writep;

output [15:0]dout;

output emptyp;

output fullp;

reg emptyp;

reg fullp;

reg [15:0]dout;

reg [ (DEPTH-1):0 ]  tail;

reg [ (DEPTH-1):0 ]  head;

reg [ (DEPTH-1):0 ]  count;

reg [15:0 ] fifomem [0:MAX_COUNT];

……

∥Update FIFO memory。

always @(posedge clk) begin

if ( rstp==1′b0 writep==1′b1 fullp==1′b0)

fifomem [head]= din [15:0];

end

∥Update the head register。

always @(posedge clk) begin

if ( rstp==1′b1)

head[1:0 ]=2′b0;

else

if (writep==1′b1 fullp==1′b0)

head[1:0 ]=head[1:0 ] + 1;

end

……

在上述程序段中, din [15:0 ] 对应fifo_width=16 的情况, 如果在dma_top 模块中用Vperl 语法例化了dma_fifo ( Instance(dmafifo);) ,那么Vperl把din[15:0]连接进dma_top ,并进而生成dma_top.v 代码,即dma_top.v 的信号定义。

Vperl 实际上是接管了模块间的信号连接工作,使得设计师不用担心改变对模块间关系的影响。 另外,Vperl 的另一项优点就是省去了每个HDL 文件中繁琐的信号定义,避免因为信号定义引起的语法错误(比如信号忘记定义、信号名打错等) ,大大加快源代码的编写速度。 当然,使用Vperl 需要遵循一定的语法。

配置机制中,结合Eperl 和Vperl这两种工具就可以由选定的参数组合地配置硬件结构。 对于软件而言,由C 语言编写的应用程序不需要修改,但是编译器需要针对不同的执行单元的配置增加减少指令并进行优化。

参数优化

一个 中包括了P1 , P2 , P3 , ..., Pn 等参数。每个参数的值都可以从一个有限集合中选取。 为了选择最优的参数值,也就是为了达到最优的系统配置,使功耗、性能和面积达到合理的目标,需要进行参数优化。 一种方法是运行一次仿真后,记录下指令序列(trace) ,将不同的参数配置结合指令序列通过纯软件的行为分析器进行分析。 这种方法的优势是速度快。 但是在不同的结构参数下,指令序列差别很大,特别是当指令集都发生改变时,结果的可信度大大降低;而且行为分析器对一些动态参数,比如动态电压,对功耗的影响无法估计,所以可能不得不进行多次仿真来获得较准确的功耗估计。 由于仿真时间一般较长,参数的优化算法对设计周期的影响很大。

参数的属性

设计中的定制概念不再是晶体管级的定制,而是体现在模块级层面上,具体表现为系统的结构参数。 SOC 的系统参数具有一些属性,如大多数系统参数是相互影响的,这些相关性必须在参数配置时予以考虑。 相关性可以区分为数值相关和性能相关。 参数自身也有单调性和层次性。

数值相关

两参数的数值相关意味着一个参数的选择限制了另一个参数的选择范围。 例如对于容量限制为64 ×8 bit s 的直接存储器存取(DMA) 缓冲区,可以缓冲64 个8 位数据,但是当用于缓冲32 位数据时,只能放16 个数据。 在这里数据个数和数据格式是数值相关的。 再如可配置处理器的乘法器(MUL) 单元一般不会和乘累加器(MAC)单元一起出现,因为两者的功能是重叠的。 在进行参数选择时,利用数值相关性可以去除一些不可能的参数值,缩小参数的选择范围。

性能相关

两参数的性能相关意味着一个参数的改变会影响另一个参数的最优选择。性能相关是有方向性的,如果参数B 与A 性能相关, 则参数A 是B 的主动参数,参数B 是A 的随动参数。 在参数选择时,可以先确定A 再确定B 。如寄存器的个数相关与MUL 单元相关意味着MUL 单元是主动参数,而寄存器个数是随动参数。 两个参数也可能互相相关,也就是说参数A 和B 之间形成环路。 这时两个参数必须同时调整才能得到最优的方案。 例如高速缓存的组参数和每个缓存块的容量参数的性能是相关的。 在进行参数选择时,性能不相关的参数可以独立选取最优解。

单调性

很多参数对某一优化目标而言是单调函数。 例如决定UART 缓冲区大小的参数,对功耗这一优化目标,一般是缓冲区越大功耗越大。 参数的方向性也可以缩小参数的选择范围。

层次性

模块参数只影响模块自身,比如Cache 容量、Cache 行大小和关联组个数。 多个模块参数可以形成一个系统参数,比如从系统角度来看,Cache 失配率就是一个系统参数。 利用参数的层次性可以进行局部优化。



评论


相关推荐

技术专区

关闭