DFT mode下hard phy STA Nopath

hard Phy boundary No Path

1. shift mode;

shift cornor出現No Path的;
PHY SI SO在shift mode必須有timing的path; 展示為No constrained path;

check step:

report_timing -though

NO constrained path

set timing_report_unconstrained true

report again

在這里插入圖片描述

you will get a potential path;

get the clock of startpiont

在這里插入圖片描述

now the no path reason would be two case:

  1. start point & end point is in two difference clock group;
  2. Lib is no include the timing arc of this pin;

check the lib:
在這里插入圖片描述

發現在shift mode吧 bypass func的lib也讀入了; 通過remove lib 確認最終讀如的lib:
在這里插入圖片描述

重新讀入lib, shift path 出現;

2.dc capture mode

同樣發現 hard phy SI SO的出現 no path;

  1. 在DC capture mode 本身是不會經過SI D path; 所以SI Q path不存在本身也是合理的;(結論是否正確)
  2. 存在的Path 為bypass 的pass ,是因為同屬一個clock group ,DFT未插lock up latch導致; Path 為 true path, 需要后端修;
    在這里插入圖片描述

其他非SI SO pin的no path;

優先查看Lib中在此mode是否存在 timing arc;

附加處理lib的腳本;

import re
def read_pinlist(pinlist_file):"""Read pinlist from a text file, where each line contains one pin_name.Parameters:pinlist_file (str): Path to the pinlist file.Returns:list: A list of pin_names."""try:with open(pinlist_file, 'r') as f:# Read lines, strip whitespace, and skip empty linespinlist = [line.strip() for line in f.readlines() if line.strip()]return pinlistexcept FileNotFoundError:print(f"Error: File {pinlist_file} not found")return []
def parse_lib(lib_content):"""Parse the lib file content and return a dictionary with pin_name as keys and their corresponding timing block modes as values.Parameters:lib_content (str): The text content of the lib file.Returns:dict: A dictionary containing pin_name and its timing block modes."""pin_dict = {}# Regular expression to match pin blockspin_pattern = r'pin\((.*?)\)\s*{([^{}]*)}'pin_matches = re.findall(pin_pattern, lib_content, re.DOTALL)for pin_match in pin_matches:# Extract pin_name and remove leading/trailing spaces and quotespin_name = pin_match[0].strip().strip('"')pin_content = pin_match[1]# Match timing blockstiming_pattern = r'timing\(\)\s*{([^{}]*)}'timing_matches = re.findall(timing_pattern, pin_content, re.DOTALL)modes = []for timing_match in timing_matches:timing_content = timing_match# Match mode fieldmode_pattern = r'mode\(etm_mode\s*,\s*"([^"]*)"\s*\);'mode_match = re.search(mode_pattern, timing_content)if mode_match:mode_name = mode_match.group(1).strip()  # Remove leading/trailing spaces from mode_namemodes.append(mode_name)pin_dict[pin_name] = modesreturn pin_dictdef check_pins(pinlist, pin_dict):"""Check the status of each pin_name in pinlist based on the lib file and print the results.Parameters:pinlist (list): A list of pin_names to check.pin_dict (dict): A dictionary parsed from the lib file containing pin information."""for pin_name in pinlist:if pin_name not in pin_dict:print(f"{pin_name}: NO pin_name")else:modes = pin_dict[pin_name]if not modes:print(f"{pin_name}: NO timing arc")elif "stuckat_cap" not in modes:print(f"{pin_name}: NO stuckat_cap mode")else:print(f"{pin_name}: Exist stuckat_cap mode")def main():# Example lib file path (modify according to actual path)lib_file_path = "lib.txt"try:with open(lib_file_path, "r") as f:lib_content = f.read()except FileNotFoundError:print(f"Error: File {lib_file_path} not found")return# Parse the lib filepin_dict = parse_lib(lib_content)# Example pinlist (modify according to actual needs)pinlist = ["pin1", "pin2", "pin3", "pin4"]# Check and print resultscheck_pins(pinlist, pin_dict)if __name__ == "__main__":main()import redef parse_lib(lib_content):"""Parse the lib file content and return a dictionary with pin_name as keys and their corresponding pin content as values."""pins = {}lines = lib_content.split('\n')current_pin = Nonepin_content = []brace_level = 0collecting = Falsefor line in lines:stripped = line.strip()if not collecting and stripped.startswith('pin('):# Extract pin namepin_start = stripped.find('(') + 1pin_end = stripped.find(')')if pin_end == -1:continue  # Skip if format is incorrectcurrent_pin = stripped[pin_start:pin_end].strip()brace_start = stripped.find('{', pin_end)if brace_start != -1:brace_level = 1collecting = True# Add the first line content (if any)rest = stripped[brace_start+1:].strip()if rest:pin_content.append(rest)elif collecting:# Calculate brace levelbrace_level += line.count('{')brace_level -= line.count('}')if brace_level > 0:pin_content.append(line)else:collecting = Falsepins[current_pin] = '\n'.join(pin_content)current_pin = Nonepin_content = []return pinsdef analyze_pin(pin_content):"""Analyze the content of a single pin and return its status."""# Check if there are timing blockstiming_blocks = []in_timing = Falsecurrent_block = []brace_level = 0for line in pin_content.split('\n'):stripped = line.strip()if not in_timing and stripped.startswith('timing('):in_timing = Truebrace_level = 0current_block = []if in_timing:current_block.append(line)brace_level += line.count('{')brace_level -= line.count('}')if brace_level <= 0:in_timing = Falsetiming_blocks.append('\n'.join(current_block))if not timing_blocks:return "NO timing arc"# Check if any timing block contains stuckat_cap modepattern = re.compile(r'mode\s*\(\s*etm_mode\s*,\s*"\s*stuckat_cap\s*"\s*\)')for block in timing_blocks:if pattern.search(block):return "OK"return "NO stuckat_cp mode"def main(pinlist_file, lib_file):with open(lib_file, 'r') as f:content = f.read()pins = parse_lib(content)pinlist= read_pinlist(pinlist_file);if not pinlist:print("Pinlist is empty or file not exist");returnfor pin_name in pinlist:if pin_name not in pins:print(f"{pin_name}: Not found")continuestatus = analyze_pin(pins[pin_name])print(f"{pin_name}: {status}")# Example usage
if __name__ == "__main__":pinlist_file = "./file_name"# Replace with actual pin listlib_file = "your_lib.lib"           # Replace with actual lib file pathmain(pinlist, lib_file)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/74004.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74004.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/74004.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【工作記錄】F12查看接口信息及postman中使用

可參考 詳細教程&#xff1a;如何從前端查看調用接口、傳參及返回結果&#xff08;附帶圖片案例&#xff09;_f12查看接口及參數-CSDN博客 1、接口信息 接口基礎知識2&#xff1a;http通信的組成_接口請求信息包括-CSDN博客 HTTP類型接口之請求&響應詳解 - 三叔測試筆記…

《自然》:陸地蒸散量研究的統計失誤被撤回-空間加權平均的計算方法

文章目錄 前言一、空間加權平均的計算方法二、代碼1.Python 實現2.MATLAB代碼 前言 In this article, we calculated global land evapotranspiration for 2003 to 2019 using a mass-balance approach. To do this, we calculated evapotranspiration as the residual of the…

開源軟件許可證沖突的原因和解決方法

1、什么是開源許可證以及許可證沖突產生的問題 開源軟件許可證是一種法律文件&#xff0c;它規定了軟件用戶、分發者和修改者使用、復制、修改和分發開源軟件的權利和義務。開源許可證是由軟件的版權所有者&#xff08;通常是開發者或開發團隊&#xff09;發布的&#xff0c;它…

【el-upload】el-upload組件 - list-type=“picture“ 時,文件預覽展示優化

目錄 問題圖el-upload預覽組件 PicturePreview效果展示 問題圖 el-upload <el-uploadref"upload"multipledragaction"#":auto-upload"false":file-list"fileList"name"files":accept".png,.jpg,.jpeg,.JGP,.JPEG,.…

微前端 qiankun vite vue3

文章目錄 簡介主應用 qiankun-main vue3 vite子應用 qiankun-app-vue2 webpack5子應用 qiankun-react webpack5子應用 quankun-vue3 vite遇到的問題 簡介 主要介紹以qiankun框架為基礎&#xff0c;vite 搭建vue3 項目為主應用&#xff0c;wepack vue2 和 webpack react 搭建的…

C#從入門到精通(1)

目錄 第一章 C#與VS介紹 第二章 第一個C#程序 &#xff08;1&#xff09;C#程序基本組成 1.命名空間 2.類 3.Main方法 4.注釋 5.語句 6.標識符及關鍵字 &#xff08;2&#xff09;程序編寫規范 1.代碼編寫規則 2.程序命名方法 3.元素命名規范 第三章 變量 &…

東隆科技攜手PRIMES成立中國校準實驗室,開啟激光診斷高精度新時代

3月12日&#xff0c;上海慕尼黑光博會期間&#xff0c;東隆科技正式宣布與德國PRIMES共同成立“中國校準實驗室”。這一重要合作標志著東隆科技在本地化服務領域的優勢與PRIMES在激光光束診斷領域的頂尖技術深度融合&#xff0c;旨在為中國客戶提供更快速、更高精度的服務以及本…

HarmonyOS Next~鴻蒙系統架構設計解析:分層、模塊化與智慧分發的技術革新

HarmonyOS Next&#xff5e;鴻蒙系統架構設計解析&#xff1a;分層、模塊化與智慧分發的技術革新 ? ? 鴻蒙操作系統&#xff08;HarmonyOS&#xff09;作為華為自主研發的分布式操作系統&#xff0c;其架構設計以全場景、多設備協同為核心目標&#xff0c;通過分層架構、模…

Vue Router工作原理探究

摘要&#xff1a; 隨著單頁應用&#xff08;SPA&#xff09;的廣泛流行&#xff0c;路由系統成為前端開發中至關重要的部分。Vue Router作為Vue.js官方的路由管理器&#xff0c;為Vue應用提供了強大的路由功能。本文深入探討Vue Router的工作原理&#xff0c;包括其核心概念、路…

SysOM 可觀測體系建設(一):萬字長文解讀低開銷、高精度性能剖析工具livetrace

可觀測性是一種通過分析系統輸出結果并推斷和衡量系統內部狀態的能力。談及可觀測性一般包含幾大功能&#xff1a;監控指標、鏈路追蹤、告警日志&#xff0c;及 Continues Profiling 持續剖析能力。對于操作系統可觀測&#xff0c;監控指標可以幫助查看各個子系統&#xff08;I…

網絡安全設備配置與管理-實驗4-防火墻AAA服務配置

實驗4-p118防火墻AAA服務配置 從這個實驗開始&#xff0c;每一個實驗都是長篇大論&#x1f613; 不過有好兄弟會替我出手 注意&#xff1a;1. gns3.exe必須以管理員身份打開&#xff0c;否則ping不通虛擬機。 win10虛擬機無法做本次實驗&#xff0c;必須用學校給的虛擬機。首…

路由Vue Router基本用法

路由的作用是根據URL來匹配對應的組件&#xff0c;并且無刷新切換模板的內容。vue.js中&#xff0c;可使用Vue Router來管理路由&#xff0c;讓構建單頁應用更加簡單。 一、效果 二、實現 1.項目中安裝Vue Router插件 pnpm install vue-routerlastest 2.main.js import { …

24. 狀態模式

原文地址: 狀態模式 更多內容請關注&#xff1a;智想天開 1. 狀態模式簡介 狀態模式&#xff08;State Pattern&#xff09;是一種行為型設計模式&#xff0c;它允許一個對象在其內部狀態改變時改變其行為&#xff0c;使得該對象看起來似乎修改了其類。狀態模式通過將狀態的行…

【Qt】Qt + Modbus 服務端學習筆記

《Qt Modbus 服務端學習筆記》 1.因為項目的需要&#xff0c;要寫一個modbus通信&#xff0c;csdn上感覺有些回答&#xff0c;代碼是人工智能生成的&#xff0c;有些細節不對。我這個經過實測&#xff0c;是可以直接用的。 首先要包含Qt 的相關模塊 Qt Modbus 模塊主要包含以…

CherryStudio + 火山引擎DeepSeek R1 告別服務器繁忙

CherryStudio 火山引擎DeepSeek R1 告別服務器繁忙 一、下載CherryStudio并安裝 CherryStudio是功能強大的多模型桌面客戶端&#xff0c;支持Windows、macOS和Linux系統。集成了多種主流的大語言模型&#xff08;如OpenAI、DeepSeek、Gemini等&#xff09;以及本地模型運行功…

醫院人事科室病區管理系統基于Spring Boot-SSM

目錄 摘要 一、研究背景與意義 二、國內外研究現狀 三. 系統目標 四、研究目的與內容 五、研究方法與技術路線 5.1 系統技術架構 六. 系統功能 6.1 人事管理 6.2 科室病區管理 6.3 科研管理 七. 系統安全性 八. 系統運行與維護 摘要 隨著醫療行業的快速發展和醫院…

Unity TextMeshPro中顯示建筑特殊符號

示例&#xff1a;顯示效果如圖 實現步驟 1、下載 SJQY 字體庫 2、導入字體&#xff1a;將 SJQY 字體文件&#xff08;如 .ttf 或 .otf 文件&#xff09;導入到 Unity 項目的 Assets 文件夾中。 3、創建 TMP 字體資產 方法一 方法二 選擇剛導入的字體文件&#xff0c;在…

工具層handle_excel

該工具類利用openpyxl的load_workbook加載Excel&#xff0c;通過iter_rows按行迭代數據&#xff0c;將表頭和用例數據用zipdict組合成字典&#xff0c;通過list.append將字典(單條測試用例)追加到列表中&#xff0c;從而封裝Excel數據解析工具。 模塊/類方法/屬性使用場景描述o…

九、JavaScript作用域、預解析

一、JavaScript作用域 1.JavaScript作用域 ①代碼名字&#xff08;變量&#xff09;在某個范圍內起作用和效果 目的是為了提高程序的可靠性更重要的是減少命名沖突 ②js的作用域&#xff08;es6&#xff09;之前&#xff1a;全局作用域 局部作用域 ③全局作用域&#xff1a;整…

Rust語言學習

Rust語言學習 通用編程概念所有權所有權引用和借用slice struct(結構體)定義并實例化一個結構體使用結構體方法語法 枚舉 enums定義枚舉match控制流運算符if let 簡單控制流 使用包、Crate和模塊管理不斷增長的項目&#xff08;模塊系統&#xff09;包和crate定義模塊來控制作用…