Clarification for SMS Wrapper synthesis and STA timing exceptions

1. This section contains the explanation of the timing exceptions for sn6xx000vpnnsmwrp000sa18 SMS Wrapper.

Compared with SMS 5.x, where data exchange between fast and slow clock domains happens, in SMS 6x, due to the clock switching mechanism, communicating components of the system (during data exchange)  are clocked by the same clock signal. The logic that implements clock switching is called glitch free clock switching mechanism and is shown below (Figure 1): 

Figure 1   

As shown in above figure, the clock_out will be either a fast clock, or a slow clock. So there is no need of synchronization between the clocks. 
In  SMS 6.x we have the mentioned exceptions:
set_false_path -from [get_clocks {*clkgrp_mem*}]   -to [get_clocks {*clkgrp_bist*}]
set_false_path -from [get_clocks {*clkgrp_bist*}]  -to [get_clocks {*clkgrp_mem*}]

Taking in to account that the memory is either in BIST mode or in functional mode, so the following paths can be considered as a false paths.

set_false_path -through [get_cells -quiet -hier -f {full_name =~ *dwsms_fp_buf*}]
This path is connected to memory BISTE/TCLKE signal in the SMS design. BISTE signal is toggling only when ME is inactive,so the timing to BISTE/TCLKE is not real.

set_false_path -through [get_cells -quiet -hier -f {full_name =~ *dwsms_slow_buf*}] -to [get_clocks {*clkgrp_bist*}]
set_false_path -from [get_clocks {*clkgrp_bist*}] -through [get_cells -quiet -hier -f {full_name =~ *dwsms_slow_buf*}]

Due to the absence of data exchange between clock domains the mentioned paths are considered as a false paths.

set_multicycle_path 4 -setup -from [get_ports rst_sms]
set_multicycle_path 7 -hold  -from [get_ports rst_sms]

There is a requirement that tclk_sms should be activated after the 2 WRCK cycles when rst_sms is high. Because of the glitch free clock switching mechanism tclk_sms is activated after additional 2 WRCK cycles. This is the reason that setup requirement is 4. The requirement for hold time is 4 plus the additional 3(at least) WRCK cycles for rst_sms to be Low.

 
2. This section contains the explanation of the timing exceptions for vl50x000vpnnsmwrp000sa34p4 SMS Wrapper.
Depending on memory and Wrapper configurations the specific timing exception listed below
(in bold) may or may not be in the SDC file. The intend of this article is just to give an idea
why the specific signal has been constrained this way.

a) set_max_delay  [expr 1 * $T_bist] -from [filter_collection $MBIST_all_seq_cells {full_name =~ *U_wrap_sctrl*half_wrck* }] -to [get_clocks {clkgrp_bist}] 
One clk_sms cycle is considered here in order to be able to relax the budget needed for capturing the data from fast to slow domain(2 clk_sms cycle, refer to constraint (d)). Shown in Figure 2.

b) set_max_delay  [expr 3 * $T_bist] -from [filter_collection $MBIST_all_seq_cells {full_name =~ *U_wrap_sctrl*wr_se_r* }]   -to [get_clocks {clkgrp_bist}]
The pulse that enables wr_se_r signal capturing, takes 3 clk_sms cycles to be formed(because of 3 stage synchronizer). Shown in Figure 2.

c) set_max_delay  [expr 4 * $T_bist] -from [get_clocks {clkgrpslow}]   -to [get_clocks {clkgrp_bist}]
set_false_path -hold -from [get_clocks {clkgrp_bist}]   -to [get_clocks {clkgrpslow}]

Plus extra 1 cycle(4 clk_sms) is needed to form a pulse(status_se...) enabling the mux which should capture the scan input.
Hold does not need to be checked since the WSI data is at least 8 times slower than the status_se pulse and therefore limited by status_se. Meeting the setup time requirement, WSI data will be always static at the time status_se goes low.
Shown in Figure 2.

d) set_max_delay  [expr $T_slow - (6 * $T_bist)] -from [get_clocks {clkgrp_bist}]   -to [get_clocks {clkgrpslow}]
set_false_path -hold -from [get_clocks {clkgrp_bist}]   -to [get_clocks {clkgrpslow}]
Assuming that the data  path from slow to fast can be delayed by 4 clk_sms cycles(constraint (c)) and plus 1 extra cycle from half_wrck_r to the synchronyzer first flop (constraint (a)), the budget left to transfer the data from slow to fast have a budget of 2 clk_sms cycles(calculation has done with ratio 8:1, and assuming clocks are asynchron). Hold does not need to be checked since the WSOR data is at least 8 times slower than the status_se pulse and therefore limited by status_se. Meeting the setup time requirement, WSI data will be always static at the time status_se goes low. Shown in Figure 2.


Figure 2

set_false_path -from [get_clocks {clkgrpslow}]   -to [filter_collection $MBIST_all_seq_cells {full_name =~ *_met*f_sel_chain_r*}]
f_sel_chain_r is fast clk_sms clock driven register originated from slow sel_chain_r driven by slow WRCK clock.
sel_chain_r will be changed when the SMS instruction is changed. The f_sel_chain_r signal is used to select the proper registers chain depending on instruction selected. There is a huge number of WRCK clock cycles between loading the instruction register and operation with the data register. This is due to JTAG state machine which needs several clock cycles to activate data registers. It is not realistic to delay the path from sel_chain_r to f_sel_chain_r for such slow clock cycles.

set_false_path -from [get_clocks {clkgrpslow}]   -to [filter_collection $MBIST_all_seq_cells {full_name =~ *dwsms_*_met_signal_r*0* && full_name !~ *dwsms_*ticker*}]
This goes to BISTE/TCLKE signal in the SMS design. BISTE signal is toggling only when ME is inactive, so the timing to BISTE/TCLKE is not real.

set_false_path -from [get_clocks {clkgrpslow}]   -to [get_clocks {clkgrp_mem}]
set_false_path -from [get_clocks {clkgrp_mem}]   -to [get_clocks {clkgrpslow}]

set_false_path -from [get_clocks {clkgrp_mem}]   -to [get_clocks {clkgrp_bist}]
set_false_path -from [get_clocks {clkgrp_bist}]   -to [get_clocks {clkgrp_mem}]

Taking in to account that the memory is either in BIST mode or in functional mode, so the following paths are considered as a false paths.

set_false_path -from [get_ports rst_sms]
When reset_type = 0 or 1 the synchronizers are being added on this path
When reset_type = 2 there are requirement to keep clocks inactive.
Hence this path are considered as a false path.

set_false_path -from [get_ports dm2]
set_false_path -from [get_ports dm1]
set_false_path -from [get_ports dm0]

The dm pins are static during the BIST mode so this paths are considered as a false paths.

set_false_path -from [filter_collection $MBIST_all_seq_cells {full_name =~ *biste*dwsms_*_met_signal_r*2*}] -through $MEM_all_pins
This path is connected to memory BISTE/TCLKE signal in the SMS design. BISTE signal is toggling only when ME is inactive, so the timing to BISTE/TCLKE is not real.

### 关于错误处理的信息 当遇到错误提示 `Error occurred, check logs or contact app author` 时,通常意味着应用程序遇到了无法自行恢复的问题。以下是对此类错误可能采取的措施: #### 日志文件分析 日志文件通常是排查此类问题的第一步。通过查看日志文件中的详细信息,可以定位到具体的错误原因[^1]。大多数应用会在其安装目录或特定路径下生成日志文件。这些文件记录了程序运行期间的关键事件和异常。 #### 联系开发者 如果日志文件未能提供足够的信息来解决问题,则建议联系该应用程序的作者或支持团队。在联系过程中,应尽可能多地提供上下文信息,例如操作系统版本、软件版本以及触发错误的操作描述[^2]。 #### 示例代码:读取常见日志文件 以下是一个简单的 Python 脚本示例,用于读取并显示常见的文本型日志文件内容: ```python def read_log_file(file_path): try: with open(file_path, 'r', encoding='utf-8') as file: log_content = file.read() return log_content except FileNotFoundError: return f"The specified log file {file_path} does not exist." except Exception as e: return f"An error occurred while reading the log file: {str(e)}" log_data = read_log_file("path/to/your/logfile.log") print(log_data) ``` 上述脚本可以帮助快速访问日志数据以便进一步分析。 #### 提交详细的错误报告 为了更有效地获得帮助,在提交错误报告给开发人员时,应该包括但不限于以下几个方面: - 错误发生的具体时间。 - 导致错误的一系列操作步骤。 - 应用环境的相关配置参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值