新闻中心

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

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

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

引 言

本文引用地址:http://www.eepw.com.cn/article/189803.htm

片上系统( system ON chip ,) 已经成为21世纪全球瞩目的关键核心技术。 具有垂直整合的特性,并注重创新和创意,产品非常个人化、应用差异化、样式多元化。 应用需求的广泛性,以及大部分SOC 应用功能单一、性质确定的特点,决定了SOC 目前大多是针对专门的应用领域进行专门设计来满足高性能、低成本和低功耗的要求。 目前SOC 的发展趋势是: 体系结构需要在新技术与产品、市场和应用需求之间取得平衡;趋向于走专用、定制和化的道路。

一方面由于SOC 的专用化设计要求,另一方面由于IP 提供商的支持, SOC 的集成正向化设计发展。 SOC 的可能影响系统功耗、性能和面积,每个的选择范围是一个有限集合,因此一个SOC 设计可以理解为一组SOC 参数的选择。 在系统结构形成后,SOC 设计问题就转变为参数配置问题。 随着参数的增多,手工对代码进行修改是不可接受的,这不仅效率低,而且会增加错误率。本文对原有的硬件描述语言进行扩展,并建立了参数配置环境,通过分析SOC 参数属性,利用邻域搜索算法针对功耗进行参数优化。

参数自动配置

采用传统的硬件描述语言(HDL) ,参数自动配置的难点在于:首先模块本身的描述随参数配置的改变而变化; 其次当模块被更上层的父模块例化(inSTance) 时,其接口逻辑在不同参数配置下也可能不同。 在进行参数化设计时,只能采用硬件描述语言的宏定义,这种方法不仅不够灵活,而且代码复杂,冗余很多。

参数自动配置环境由一组运行脚本组成,主要通过两个工具Eperl 和Vperl 来进行参数配置,实现了代码的即配置即生成。 Eperl 的作用是定制内部的逻辑,Vperl 的作用是生成模块间的连接关系。 基于Verilog 硬件描述语言的参数自动配置过程如下。

1) 参数首先被送到3.evp 文件,这是同时包括Eperl 语法和Vperl 语法的文件,因为Eperl 和Vperl 电路的语法非常简洁,所以设计师不仅不用担心会在这里陷入困境,反而会大大减少设计强度。

2) 3.evp 文件经过Eperl 处理后生成3.vp 文件,这是只包含Vperl 语法的文件,这时所有的参数都被解析,模块内参数配置都已经完成了。

3) 3.vp 经过Vperl 处理后, 最后生成3.v 文件, 即电路的Verilog 描述。 因此在参数化设计中,与传统设计不同,设计师的描述文件是3.evp 文件,而Verilog 代码只是作为设计的中间代码出现。 参数自动配置环境建立了一系列脚本程序来自动解析相关文件的相互关系,并生成整个系统的硬件描述语言描述。

Eperl 最初用作HTML 页面生成,适合于静态文本相当多,但是又有一部分代码需要动态生成的场合。 因为大多数硬件描述是静态代码,只有一小部分需要可配置,所以Eperl 非常适用于电路的硬件描述。 Eperl 结合了Perl 的解释功能,相当于在原文本结构中插入了一段内嵌代码。 这段内嵌代码最终可以生成想要配置的硬件结构。 Eperl 利用Print 结构来传递所有的内嵌代码。 Eperl 所做的相当于程序员写一个用于生成代码的Perl 脚本。 下面所示程序段是从dma _fifo.evp 文件中提取的一部分代码。

∥Synchronous FIFO.fifo_depth x fifo_width bit words.

moduleBeg ;

Ports ;

Regs ;

WIRes ;

: $width_msb=$fifo_width21 ;

$depth_msb=$fifo_depth21 ;

$ptr_width=log ( $fifo_depth)/log (2) ;

$ptr_msb=$ptr_msb21 ;

: >

Force (mem,fifomem, :=$width_msb : >,0,

:=$depth_msb : >,0) ;

……

∥Update FIFO memory.

always @(posedge clk) begin

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

fullp== 1′b0)

fifomem [ head ] =din [ :=$width_msb :

> :0 ] ;

end

∥Update the head register.

always @(posedge clk) begin

if ( rstp== 1’b1)

head [:=$ptr_msb:>:0]=:=$ptr_width:>′b0 ;

else

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

head [ :=$pt r_msb : > :0 ] =

head [ :=$pt r_msb : > :0 ] + 1 ;

end

..


上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭