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

时间:2012-10-29来源:网络

在 :…… : > 中的就是Eperl 代码,以 开始的是Vperl 代码, 如ModuleBeg 表示模块的开始。 在FIFO 中,可配置的参数主要是2 个: FIFO 深度和FIFO 宽度,所以dma_fif.evp 文件对外只有2 个参数可调, 而其他的比如定义信号所需要的FIFO 寄存器的最高位width_msb 、head 指针的宽度ptr_width 等都可以用Eperl 脚本生成。 这与宏定义相比体现了Eperl 的灵活性。再比如可以通用寄存器组gpr.evp 文件利用for 循环来例化每一个寄存器,更充分地体现了使用Eperl 的灵活性。 for 循环的代码如下所示。

for($i = 0;$i$reg _num;$i++) {

printInstance (iu_register,iu_register_$i );n ;

}

: >

……

3.evp 格式的文件经过Eperl 解析后生成

3.vp格式的文件。 dma _fifo.evp 经过Eperl 解析后生成的3.vp 文件如下所示。

∥Synchronous FIFO.fifo_depth x fifo _width bit words。

ModuleBeg ;

Ports ;

Regs ;

Wires ;

Force (mem ,fifomem ,15 ,0 ,3 ,0) ;

……

∥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

……

当然IP 模块的不同配置会造成SOC 系统信号的不同。 如向系统中添加通用异步收发器(UART)模块,SOC 系统就要增加输入输出端口,并且要增加很多内部的连线,比如把IP 总线引入UART.Vperl 程序可以解决这个问题。

Vperl 的工作原理是通过分析模块内使用的信号的属性来确定模块的信号定义。 HDL 具有一定的语法结构,比如Verilog 有2 种信号类型,always 块中的= 操作符左边一定是reg 类型信号,由此取reg 类型的补集就是wire 类型,除非显式地通过Force()声明为其他类型,如在dma_fifo.vp 中的第6 行代码,声明为二维reg 数组类型。 分析模块也可以确定模块的输入输出,如果一个信号在模块中自始至终没有被赋值过,那么这个信号必然是input信号;同理,如果一个信号被赋值但从来没被使用过,就是output 信号; 如果既被赋值过,又被使用过,那么这个信号有很大可能是这个模块的内部信号,不是模块的端口,除非显式地通过Force ( ) 声明为inout类型。 对于模块中例化的子模块(在3.vp 中用Instance() 语句声明) ,Vperl 程序首先分析模块间的从属关系,并先处理最底层的子模块代码,在自动分析子模块接口的输入输出属性后,缺省地把子模块的输入输出信号作为上层模块的接入信号,并在上层模块中自动进行连接,当然Vperl 也提供了Connect () 语句来更改子模块接入上层模块的信号名。 所以用Vperl 的格式书写的文件3.vp不需要在文件头部定义信号名。 如下所示是dma_fifo.vp 文件的示例代码。

1 2 3 4

关键词: SOC 参数 自动 设计方法

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版