一种SoC芯片在Magma Talus下的物理实现

时间:2010-04-22来源:网络

第二章 时序约束设计

本SoC芯片时序约束设计的关键在于功耗管理控制模块的时序约束。

2.1 功耗管理控制(Power Management Controller, PMC)模块简介

整个设计中首先考虑的是PMC模块的约束。PMC模块是系统用来控制系统功耗的的控制器,可以通过寄存器配置,使SoC芯片在不同工作模式之间进行切换:Slow、Normal、Idle 和Sleep。这些工作模式可以让用户根据芯片不同的应用,通过动态地管理芯片内部各子模块的时钟源供给和系统的工作频率来控制芯片的整体功耗。另外,PMC 还包含了各个子模块的初粒度的时钟门控电路,通过寄存器配置可以集中控制、关闭不必要打开的模块,从而达到降低功耗的目的。模块具有以下性能指标:

内置锁相环、可动态变频;
 支持Slow、Normal、Idle、Sleep等4种工作模式;
 支持模块工作时钟集中控制策略,芯片各模块的时钟可以通过PMC来关闭和打开;
 低功耗sleep模式下支持DRAM/SDRAM 的数据自刷新,使得DRAM 中的数据可以得到保持;
 内部具有完整的reset 解决方案,提供3 种reset 选择:hard reset、soft reset、watchdog reset;
 内部具有完整的唤醒功能。

PMC模块包含了异步时钟动态选择电路、同步时钟动态选择电路、时钟分频电路、时钟门控电路、跨时钟域电路,既存在输入时钟,又存在输出时钟,是一个与时钟高度相关、时序违例集中、时序分析较为复杂的电路。PMC模块的时钟生成电路结构示意图如图4所示:

图4 时钟生成图

系统时钟经过可配置参数的系统PLL和动态选择逻辑后分频(有1:1、1:2、1:3、1:4四种)。选择默认的2分频为CPU 提供时钟,动态选择默认的3分频为高速总线提供时钟,高速总线时钟通过分频后(有1:1、1:2、1:4、1:8四种),动态选择默认的2分频为低速总线提供时钟。

2.2 时序约束的一些策略

一个完整的时序约束文件包含时钟的创建、时钟的约束、输入输出端口的约束及时序违例等。SDC格式的约束可以采用丰富的语法表达出上述内容。而Magma后端工具可以比较容易地识别出该格式的约束。我们采用SDC v1.7格式编写时序约束,这样既能为后端实现工具blast、talus识别,又能被静态时序分析工具PrimeTime识别。

首先根据设计规格要求确定时钟周期,在整个后端设计过程中的不同阶段加以调整和修改。为保守计,我们采取冗余设计,最终设定的周期值比规格要求的值严格。Clock latency和clock skew的设置也要根据实际的时钟树结构不断地进行调整和修改。最终合理的时序约束文件是经过反复地实验不断地修正而得到的。

复杂的时钟,复杂的功能模式,必然带来复杂的时序约束。对其正确、完备的约束施加,是保证后端设计时序分析和优化有效的关键所在。

而PMC模块的主要电路,如时钟门控电路、分频电路,动态选择电路等,采用例化的标准单元以网表的形式直接给出,在用Magma Blast Rtl进行逻辑综合前,将这些以网表形式存在的单元使用force keep命令,保证时序约束施加点的固定。

在Fix Time前设置时序约束时,采用的方法是3分频PLL后的源时钟作为高速总线上的时钟,低速总线时钟与高速总线时钟频率一致,这样在逻辑综合阶段时因为还没有真正的时钟树,而设置的约束又比较保守,使综合结果的时序有较大的冗余,又加快了综合的速度。

在时钟树优化时,采用MMMC来进行。我们仅以功耗模式中Normal模式里的两种在应用时较常用的时钟使用模式来设置MMMC:一种是3分频PLL后的源时钟作为高速总线上的时钟,低速总线时钟是高速总线时钟的2分频;另外一种模式是使用 1分频PLL后的源时钟作为高速总线时钟,低速总线时钟与高速总线时钟频率及PLL后的源时钟频率一致,此时低速总线时钟频率高于前一种模式下的时钟频率,达到低速总线上模块能达到的最高频率。其他模式仅用来分析及优化。这样可以有效加速时钟树创建的时间及分析效率。

在约束设计过程中,不可避免的会涉及到各种模式下时钟间异步关系的设置,我们采用SDC v1.7里面的set_clock_group命令来进行,该命令能有效的表征各个时钟之间的异步关系,避免了set_false_path繁琐的设置,并且能够被Magma Talus软件转换为force timing clockgroups命令。下面是该设计中的两个clock group设置的例子:

set_clock_group -name func_async_ck1 -logically_exclusive
-group [get_clocks "fck2_n"]
-group [get_clocks "hck3_n hck2anu3_n"]
-group [get_clocks "hck2anu4_n"]
set_clock_group -name func_async_ck2 -asynchronous
-group [get_clocks "usb_dev_ck"]
-group [get_clocks "usb_pll_ck"

另外分频时钟与源时钟关系的设置上,我们根据仿真波形来确定分频时钟与源时钟之间的相位关系,从而为create_generated_clock命令在-divide_by,-edges,-invert,-combinational间选择不同的选项,使分频时钟和源时钟之间的source latency关系很容易就能确定下来,简化了时序分析。 下面是该设计中几个分频时钟约束的例子:

create_generated_clock -name usb_dev_ck
-divide_by 4 -invert
-source [get_pins "…/OR2CLK_Inst/Z"]
-master_clock [get_clocks "pllout48m"] -add
[get_pins "…/clk_1x_reg/Q"]
create_generated_clock -name rngck8
-edges "7 15 23"
-source [get_pins "…/OR4CLK_Inst/Z"]
-master_clock [get_clocks "pck_n"] -add
[get_pins "…/CLK_CNT_reg[2]/Q"]
create_generated_clock -name pck8_n
-edges "3 11 19"
-source [get_pins "…/OR4CLK_Inst/Z"]
-master_clock [get_clocks "hck3_n"] -add
[get_pins "…/PCLK_DIV8_reg/Q"]
create_generated_clock -name hck_out
-combinational
-source [get_pins "…/OR2CLK_Inst/Z"]
-master_clock [get_clocks "hck3_n"] -add
[get_ports "hclk"]

2.3非时序逻辑时序弧(data-to-data timing arc)的处理

SoC中使用到的EE模块是一个异步IP,时序模型存在非时序逻辑的时序弧(non-sequential library arc,也即data-to-data timing arc):输入的数据或控制信号与输入pin——CEN、WEN之间有data-to-data 的时序弧存在、其中的控制信号CHER、CHWR、ER_ONLY、WR_ONLY与输出pin——READY之间也存在着data-to-data 的时序弧。综合工具并不区分时序逻辑与非时序逻辑的时序弧,只要设计中有时序弧的单元存在,综合工具就认为应该在相应pin脚设置时钟,因此在综合的过程中会认为在CEN、WEN、READY这几个信号pin应设置时钟。如果不设置,在综合过程中,综合工具的时序分析引擎是报不出任何经过或到CEN、WEN、READY的路径。而一旦设置为时钟,就会产生很多false path。我们最后的做法是不在逻辑综合阶段将其设为时钟,而是将该问题留到时钟树优化时,使用config timing check data_to_data on 将data-to-data check选项打开,并使用force timing check命令约束相应的时序关系。

1 2 3 4 5

关键词: Magma Talus SoC

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

或用微信扫描左侧二维码

相关文章

查看电脑版