实际上要用的输入件是pwl PGV(PieceWise Linear power-grid view library),不过有时候可能无法直接得到memoeyr pwl PGV文件,需要使用memory Avm文件转换得到。
Mem Avm文件
在集成电路设计和验证领域,Memory AVM 文件是一种与内存相关的配置文件,通常用于功率分析和验证工具(如 RedHawk)中。以下是关于 Memory AVM 文件的详细信息:
AVM 文件的用途:Memory AVM 文件是由 Memory Compiler 生成的,用于描述内存单元的电气特性。它类似于标准单元的 APL 文件,用于在功率分析工具中提供更准确的电流和电容信息。AVM 文件通常包含内存单元的泄漏电流、耦合电容等信息,这些信息对于准确模拟内存单元在不同工作条件下的功耗至关重要。
AVM 文件的生成:在使用 Memory Compiler生成内存单元时,会自动生成 AVM 文件。如果没有自动生成,可以通过配置文件(如 avm.conf)手动生成。例如,在 RedHawk 的配置文件中,可以指定 AVM 文件的路径和名称,工具会根据这些配置生成相应的 AVM 文件。
AVM 文件的格式和内容:AVM 文件的格式类似于 APL 文件,包含内存单元的电气参数,如泄漏电流、耦合电容等。这些参数对于功率分析工具(如 RedHawk)在进行动态功耗分析时非常重要。
AVM 文件在功率分析中的作用。在功率分析工具中,AVM 文件提供了内存单元在不同工作条件下的电流和电容信息,使得工具能够更准确地模拟内存单元的功耗。通过使用 AVM 文件,可以提高功率分析的准确性,尤其是在动态功耗分析中。
memory trigger.txt
在集成电路设计和验证领域,trigger.txt 文件通常用于定义触发器(Trigger)的配置信息,特别是在功率分析和验证工具中。这些触发器用于监控电路中的特定事件,如电流或电压的变化,以检测潜在的故障或异常行为。
trigger.txt 文件的用途。功耗分析:监控电路中的电流或电压变化,以检测异常功耗。故障检测:检测电路中的短路、漏电等故障。信号完整性分析:监控信号的完整性,确保信号在传输过程中没有失真或干扰。
trigger.txt 文件的内容。触发器的名称:每个触发器都有一个唯一的名称,用于标识和引用。触发条件:定义触发器触发的条件,如电流或电压的阈值。监控对象:指定触发器监控的电路节点或信号。动作:触发器触发后执行的动作,如记录日志、发出警报等。
以下是一个简单的 trigger.txt文件示例:
# Trigger configuration file
# Trigger name
trigger_name: current_monitor
# Trigger type (current or voltage)
trigger_type: current
# Node to monitor (e.g., power rail)
node: VDD
# Threshold value (e.g., 100 mA)
threshold: 100
# Action to take when trigger is activated
action: log
Memory PWL PGV
PWL(PieceWise Linear)文件是一种用于描述波形的文本文件,通常用于电路仿真工具(如 SPICE)中。PWL 文件可以定义任意波形,这些波形可以用于模拟各种信号,包括电源电压、时钟信号、数据信号等。
在内存仿真中,PWL 文件通常用于定义内存单元的电源电流或地电流波形。这些波形可以用于功率分析工具(如 Voltus IC Power Integrity Solution)中,以更准确地模拟内存单元在不同工作条件下的功耗。
PWL 文件的格式通常包括时间点和对应的电压或电流值。每个时间点和对应的值用逗号分隔,每行表示一个数据点。例如:
1.000000, 34.358040
2.000000, 34.338650
3.000000, 34.365350
4.000000, 34.380930
5.000000, 34.366310
在内存仿真中,PWL 文件可以包含电源电流或地电流的波形数据。例如,在 Voltus 中,PWL 文件可以用于定义内存单元的动态电流。
PWL 文件在内存仿真中的应用。在内存仿真中,PWL 文件可以用于以下场景。动态电流仿真:通过定义内存单元在不同工作条件下的电流波形,PWL 文件可以帮助功率分析工具更准确地模拟内存单元的动态功耗。信号完整性分析:PWL 文件可以用于定义信号的波形,帮助分析信号在传输过程中的完整性。
以下是一个在 Voltus 中使用 PWL 文件的示例:
#Memory cell name
CELL
Name of the memory cell
#Mode and conditional details for trigger
MODE_NAME CONDITIONAL_INPUT
CONDITIONAL_PIN (rise|fall|both)
CONDITIONAL_STIMULUS_FILE
USER_PWL_FILE
在这个示例中,USER_PWL_FILE 指定了一个 PWL 文件,该文件包含了内存单元的电流波形数据。这些数据用于模拟内存单元在特定工作条件下的动态电流。
总结来说,PWL 文件是一种强大的工具,可以用于定义任意波形,广泛应用于电路仿真中,包括内存仿真。通过使用 PWL 文件,可以更准确地模拟内存单元的动态功耗,从而提高功率分析的准确性。
Memory Decap File
在集成电路设计和验证领域,Decap File(去耦电容文件)通常用于描述去耦电容(Decoupling Capacitors)的配置和布局信息。去耦电容用于减少电源线上的电压波动,确保电路的稳定工作。
Decap File 的用途。电源完整性分析:Decap File 用于描述去耦电容的配置,帮助电源完整性分析工具(如 RedHawk)更准确地模拟电源网络的动态行为。优化电源网络:通过合理配置去耦电容,可以减少电源线上的电压降和噪声,提高电路的性能和可靠性。
Decap File 通常包含以下内容。去耦电容的实例名称**:每个去耦电容的唯一标识。电容值:去耦电容的电容值,通常以皮法拉(pF)为单位。布局位置:去耦电容在电路中的布局位置。连接信息:去耦电容连接的电源和地线信息。
Decap File 的格式通常由特定的工具(如 RedHawk)定义。以下是一个简单的 Decap File 示例:
# Format:
decap1 100pF (100, 200) VDD-GND
decap2 200pF (300, 400) VDD-GND
通过memory AVM文件生成memory trigger.txt
脚本flow片段如下。
foreach ram_lib $ram_library(ff_0p125v) {
set avm [lindex [split $ram_lib .] 0].avm
exec grep -v "#" $avm > temp_avm
bash user_low_power/IR/sed_temp_avm.sh
set wf [open temp_avm r]
set wff [split [read $wf] n]
close $wf
set in_file user_low_power/IR/mem_trigger_txt/[lindex [split [lindex [split $ram_lib .] 0] /] [expr [llength [split [lindex [split $ram_lib .] 0] /]] - 1 ]]_trigger.txt
if {[regexp avm_read_desel $wff]} {
#MODE avm_read_desel
echo "CURRENT_CHARACTERIZATION_METHOD DATASHEET" >> $in_file
echo "CELL [lindex [lindex $wff 0] 0]" >> $in_file
echo "MODE READ_DESEL" >> $in_file
grep {state_boolean avm_read_desel} temp_avm > temp_avm1
bash user_low_power/IR/sed_temp_avm1.sh
set wf1 [open temp_avm1 r]
set wff1 [split [read $wf1] n]
close $wf1
echo "CONDITIONAL_INPUT = [lindex [split [lindex $wff1 ] " "] 4]" >> $in_file
echo "CONDITIONAL_PIN = CLK {rise}" >> $in_file
grep {tsu avm_read_desel} temp_avm > temp_avm1
set wf1 [open temp_avm1 r]
set wff1 [split [read $wf1] n]
close $wf1
echo "CONDITIONAL_PIN_REFERENCE_TIME [lindex [lindex $wff1 0] 2]" >> $in_file
grep {ck2q_delay avm_read_desel} temp_avm > temp_avm1
set wf1 [open temp_avm1 r]
set wff1 [split [read $wf1] n]
close $wf1
echo "DATASHEET_DELAY [lindex [lindex $wff1 0] 2]" >> $in_file
for {set i 0} {$i < [llength $wff]} {incr i} {
if {[regexp "Cpd avm_read_desel" [lindex $wff $i]]} {
set p1 [lindex [lindex $wff [expr $i + 1]] 2]
set p3 [lindex [lindex $wff [expr $i + 2]] 2]
echo $i
}
if {[regexp "LEAKAGE_I" [lindex $wff $i]]} {
set p2 [lindex [lindex $wff [expr $i + 1]] 2]
set p4 [lindex [lindex $wff [expr $i + 2]] 2]
echo $i
}
if {[regexp "PEAK_I avm_read_desel" [lindex $wff $i]]} {
set p5 [lindex [lindex $wff [expr $i + 1]] 2]
set p6 [lindex [lindex $wff [expr $i + 2]] 2]
echo $i
}
}
echo "DATASHEET_PARAMETER {{ VDDCE $p1 $p2} { VDDPE $p3 $p4}}" >> $in_file
echo "PEAK_CURRENT { {VDDCE $p5} {VDDPE $p6} }" >> $in_file
echo "END_MODE" >> $in_file
生成memory decap file
参考脚本如下。
set data [exec date +%m%d%H]
source ../scripts/config.tcl
foreach ram_lib $ram_library(ff_0p125v) {
set avm [lindex [split $ram_lib .] 0].avm
exec grep -v "#" $avm > temp_avm
bash user_low_power/IR/sed_temp_avm.sh
set wf [open temp_avm r]
set wff [split [read $wf] n]
close $wf
set in_file user_low_power/IR/mem_trigger_txt/[lindex [split [lindex [split $ram_lib .] 0] /] [expr [llength [split [lindex [split $ram_lib .] 0] /]] - 1 ]].decap_file
echo "CELL [lindex [lindex $wff 0] 0]" >> $in_file
grep {Cload} temp_avm > temp_avm1
set wf1 [open temp_avm1 r]
set wff1 [split [read $wf1] n]
close $wf1
set cap [lindex [lindex $wff1 0] 1]
echo "PIN VDDPE $cap" >> $in_file
echo "PIN VDDCE $cap" >> $in_file
echo "PIN VSSE $cap" >> $in_file
echo "" >> $in_file
}
由memory trigger.txt文件和memory decap file文件生成pwl PGV文件
参考脚本如下。
read_lib -lef ../data/lef/gsclib090_tech.lef
../data/lef/TS1024x86.lef
#Script used for generating macro power-grid library
set_pg_library_mode
-ground_pins VSS
-cell_list_file ../data/voltus/macro.list
-power_pins {VDD 0.9}
-celltype macros
-lef_layermap ../data/voltus/lefdef.layermap
-cell_decap_file ../data/pwl/TS1024x86.decap
-current_distribution "dynamic_simulation ../data/pwl/TS1024x86_trigger.txt"
-temperature 125
-extraction_tech_file ../data/qrc/gpdk090_9l.tch
set_advanced_pg_library_mode
-libgen_command_file ../tcl/libgen_mem_port.cmd
generate_pg_library -output macro_TS1024x86
libgen_mem_port.cmd文件参考内容如下。
setvar skip_switch_net_extraction true
setvar generate_port_dynamic_powerview true
setvar max_itfnode_dist 2
分析IR和上下电时间
核心命令如下。
set_rail_analysis_mode
-method dynamic
-accuracy hd
-power_grid_library ${pgv_files}
-limit_number_of_steps false
-ignore_shorts true
-temperature 125
-enable_scheduler true
-enable_ntx_extraction true
-extraction_tech_file $qrc_tech_ff
-powering_up_rails { VDD_OFF }
-unified_power_switch_flow true
-enable_xp true
-temp_directory_name ./tmp_dynamic
-report_power_in_parallel true
set_advanced_rail_options -voltus_rail_include_file_begin user_low_power/IR/rail.inc
analyze_rail
-type domain
-results_directory ../vt_db/pu_domain_${date}
$deign
如何检查生成的mem avm是否正常
在Votuls中打开波形。
单口(sp)ram波形参考。
双口(2p)ram参考波形。
怎么看报告
浪涌电流和上下电时间关键字:
查看MTCMOS是否全部正常启动关键字:
单个MTCMOS的启动时间和peak current关键字:
参考资料和系列文档已上传至星球。加入星球,谈谈芯事
2772