數字IC后端培訓教程之數字后端項目典型項目案例解析

數字IC后端低功耗設計實現案例分享(3個power domain,2個voltage domain)

Q1: 電路如下圖,clk是一個很慢的時鐘test_clk(屬于DFT的),DFF1與and 形成一個clock gating check。跑pr 發現,時鐘樹綜合CTS階段(Clock Tree Syntheis)會給and的B pin 和DFF1的CK pin插如很多cdb cell 用來balance ,我實在想不出來有什么好balance的,因為時鐘很慢,setup 是沒有問題的。

在這里插入圖片描述
測試1:and 的B pin 設置ignore。結果:and 不插cdb,時鐘latency做短了,但是DFF1的CK 換上插很多cdb。這可以滿足我目前的需求了。

測試2:DFF1的CK pin 設置ignore,我懷疑是DFF1的latency 比較長,于是被迫造成and 被拉長。

結果:DFF1的CK pin確實不插cdb了,但是and 的B 還是插了很多cdb,完全想不明白與誰balance。

問題:innovus 長clock tree 時候,把and 不當做sink 點,不會balance的啊?sink 點應該是DFF和icg啊,為什么這里and的B 插入那么多cdb做balance啊?

從你的兩種測試結果上看,這個clk一定還有第三路clock分支,如我畫出來的。其實都是被這路clock path balance的。

1)AND與門B pin設置ignore pin,僅僅是與門的B到Y這段timing arc斷了,但是A pin還是會穿過與門再到后面寄存器的。

2)DFF1這顆寄存器的輸出端如果沒有定義任何時鐘,默認情況工具做tree會自動生成clock_gen這樣的skew group。如果不想自己生成這樣的skew group,可以設置如下變量為false。

這個變量設置成false后,clk長時鐘樹只能長到DFF1的CLK pin。但這樣處理后,and輸出到后面寄存器CLK的這段tree就漏做了!

set_ccopt_property extract_clock_generator_skew_groups false

在這里插入圖片描述
所以建議先把時鐘結構畫完整,否則是不太有利于后續的時鐘樹質量分析。

在這里插入圖片描述
在這里插入圖片描述
復雜時鐘設計時鐘樹綜合(clock tree synthesis)常見20個典型案例

Q2: 請教一個問題,工具提示我找不到legal location 給這兩個spare cell,但是select出來的結果又顯示這里位置非常合理 row 正確、沒有放反、沒有overlap。請問還可能是什么原因呢?

在這里插入圖片描述
在這里插入圖片描述
報這個警告僅僅告訴你corase placement后這顆cell在做refinePlace擺放到row時發現在以當前這個點為中心點,半徑為128row高度的范圍內都沒找到合適的位置,即corase placement和refinePlace之間的一致性不太好。但工具仍然會在超出128row高度距離外給這顆cell找到一個位置擺放它的,擺放好后這顆cell肯定也是legal的,不會有overlap啥的。

數字IC后端實現時鐘樹綜合系列教程 | Clock Tree,Clock Skew Group之間的區別和聯系
在這里插入圖片描述
在這里插入圖片描述
另外建議在PR Flow和Timing ECO階段把spare cell fixed住,不要隨意參與refinePlace過程。

在這里插入圖片描述

Q3:星主,請問一下,我跑完pr之后,reg2out的最長路徑上插了將近20個buf和inv,這條路徑邏輯只有四層,pr后密度60%,沒有擁塞問題,路徑長度1500左右,并且沒有繞線,這種情況要如何去優化減少reg2out跑pr插入過多的單元?謝謝。

reg2out這個group path的effort設置成low,并且把output delay調整到比較合適的值,使得setup violation不要太大。

你這個路徑上插了20個buffer,我猜測不是工具為了修max transition加入的,因為1500um的距離最多也就是插個幾顆就夠了。所以這里大部分buffer可能是hold buffer。

你看看這些buffer的名字是否帶有PHC的關鍵詞? 這條接口相關的timing path一定要找設計確認是否屬于同步接口?只有同步接口才需要優化時序。

由于Innovus默認會開啟useful skew flow,所以對于接口相關的路徑切記不要開啟useful skew,否則很容易有大量的hold violation。

在這里插入圖片描述

Q4:我的模塊與交接的一個模塊,有高速接口檢查,現在是發現我送給那個模塊的時鐘樹做長了,請問這些路徑我怎么單拎出來做短呢?

根據這些告訴接口去抓對應的寄存器,然后做tree的時候設置一個正值insertion delay。當然對于頻率要求高的,我們還得把這些寄存器擺放到這個接口io port附近。

咱們訓練營項目分享的這個案例跟你的情況類似。我們解決的方法就是把controller擺放至靠近phy,并且把模塊內部controller這部分的clock tree盡量做短。

在這里插入圖片描述
Q5: 老師,我在挪cell的時候不小心把IP的位置動了,然后發現IP的寬度和之前不一樣了,這里會是什么原因呢?

這是一個非常典型的EDA工具bug,容易出現在Innovus 2018,2019版本中。

小編在7年前就遇到過這個bug,當時花了很多時間來debug解決掉的。

做過咱們社區IC后端訓練營項目的同學都知道,我們在將PrimeTime DMSA返回來的timing eco腳本讀入innovus前,會開啟batchMode,這個模式可以批量處理腳本命令(ecoAddRepeater和ecoChangeCell)。

如果不開啟這個batchMode,EDA工具每執行一條命令就需要做一次refinePlace,做一次RC抽取,報告一次時序!

setEcoMode -batchMode true -updateTiming false -refinePlace false

而且我們直播課也強調過這個batchMode模式僅局限于執行插buffer,換cell驅動的場景,其他情況必須把這個batchMode關閉即設置成false,否則就容易出現這個同學遇到的問題。

下圖所示為做Timing ECO之前的子模塊和頂層的部分示意圖。此時子模塊/IP的大小還是正常的,邊上也包圍著2um左右的placement halo,halo邊上也加好了endcap cell(Boundary cell)。

在這里插入圖片描述
但是當這位同學做完Timing ECO后發現子模塊/IP已經和現有的標準單元,endcap cell overlap了!第一次遇到這種情況肯定就不淡定了,不知道的還真以為自己挪過這個子模塊/IP了。

而且牛逼的地方是當你想把這個子模塊/IP調整恢復到原來位置的時候,發現回不去了,怎么調整都無法回到過去了。原因是EDA工具已經把這個子模塊/IP的lef改了!

因此,batchMode開啟要慎重。執行ecoAddRepeater和ecoChangeCell后必須執行下面的命令。

setEcoMode -reset

在這里插入圖片描述

Q6:請教星主和各位前輩,現在我有一個多power domain的設計。TOP下有模塊A,A的子模塊為B,B的子模塊為C,C中包含一些memory。對于這種設計來說,在floorplan的時候,PD之間有沒有比較建議的規劃方式?

Case1: Power Domain形狀盡量規則

通常情況power domain的形狀(子模塊單獨harden模塊)要盡量規則,特別是timing和routing都不太好做的設計。下圖左側存在大量拐角及窄channel都是一個不好floorplan的表現。右側所示的模塊切分相對更好,但這種L型的形狀在模塊直角轉彎處也非常容易有timing和routing問題。

top floorplan 模塊partition原則
Case2: 避免Macro或Blockage放置在Power Domain中間區域

這個就是我們一直提倡的擺放Macro的方法或原則——Macro盡量擺放在模塊或Power Domain的邊界處。所以在做模塊或Power Domain切分時需要考慮好內部Macro的情況,特別是那種寬度或高度個別大的Macro。

low power design block partition原則及方法
Case3: 避免thin channel的PD

在這里插入圖片描述
Case4: Power Domain邊界處盡量不要擺放Default PD的Memory

當PD1接口信號要往左下角出來和Default PD進行交互時,PD1邊界處的Macro會擋住標準單元的擺放和阻擋接口信號線的routing。

在這里插入圖片描述
而且我們知道PD1接口出來的信號還需要插isolation cell,如果這類isolation cell被擺放至圖中的黃色區域,肯定會有max transition violation。不巧的是這類信號對應的net還必須設置dont touch。

【思考題】下圖所示一個低功耗設計實現案例。我們在PR實現時應該如何避免這類timing path在PD1中插buffer? 如何避免工具把這類相關net的routing跨在PD1上?

在這里插入圖片描述

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

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

相關文章

2025 Data Whale x PyTorch 安裝學習筆記(Windows 版)

一、Anaconda 的安裝與基本操作 1. 安裝 Anaconda/miniconda 官方鏈接:Anaconda | Individual Edition 根據系統版本選擇合適的安裝包下載并安裝。 2. 檢驗安裝 打開 “開始” 菜單,找到 “Anaconda Prompt”(一般在 Anaconda3 文件夾…

mac OS上docker安裝zookeeper

拉取鏡像:$ docker pull zookeeper:3.5.7 3.5.7: Pulling from library/zookeeper 3.5.7: Pulling from library/zookeeper 3.5.7: Pulling from library/zookeeper no matching manifest for linux/arm64/v8 in the manifest list entries報錯:由于時M3…

設備通過4G網卡接入EasyCVR視頻融合平臺,出現無法播放的問題排查和解決

EasyCVR視頻融合平臺作為支持多協議接入、多設備集中管理的綜合性視頻解決方案,可實現各類終端設備的視頻流匯聚與實時播放。近期收到用戶反饋,在EasyCVR平臺接入設備后出現視頻流無法播放的情況。為幫助更多用戶快速排查同類問題,現將具體處…

板凳-------Mysql cookbook學習 (十二--------3)

第二章 抽象數據類型和python類 2.5類定義實例: 學校人事管理系統中的類 import datetimeclass PersonValueError(ValueError):"""自定義異常類"""passclass PersonTypeError(TypeError):"""自定義異常類""…

css flex 布局中 flex-direction為column,如何讓子元素的寬度根據內容自動變化

在 display: flex 且 flex-direction: column 的布局中,默認情況下子元素會占滿容器的寬度。要讓子元素的寬度根據內容自適應,而不是自動拉伸填滿父容器,你可以這樣處理:? 解決方案一:設置子元素 align-self: start 或…

性能優化實踐:Modbus 在高并發場景下的吞吐量提升(二)

四、Modbus 吞吐量提升實戰策略4.1 優化網絡配置選擇合適的網絡硬件是提升 Modbus 通信性能的基礎。在工業現場,應優先選用高性能的工業級交換機和路由器。工業級交換機具備更好的抗干擾能力和穩定性,其背板帶寬和包轉發率更高,能夠滿足高并發…

上傳ipa到appstore的幾種工具

無論是用原生開發也好,使用uniapp或flutter開發也好,最好打包好的APP是需要上架appstore的。而在app store connect上架的時候,需要上傳ipa文件到app store的構建版本上。因此,需要上傳工具。下面分析下幾種上傳工具的優缺點&…

數控調壓BUCK電路 —— 基于TPS56637(TI)

0 前言 本文基于 TI 的 TPS56637 實現一個支持調壓的 BUCK 電路,包含從零開始詳細的 原理解析、原理圖、PCB 及 實測數據 本文屬于《DIY迷你數控電源》系列,本系列我們一起實現一個簡單的迷你數控電源 我是 LNY,一個在對嵌入式的所有都感興…

prometheus UI 和node_exporter節點圖形化Grafana

prometheus UI 和node_exporter節點圖形化Grafana 先簡單的安裝一下 進行時間的同步操作安裝Prometheus之前必須要先安裝ntp時間同步,因為prometheus server對系統時間的準確性要求很高,必須保證本機時間實時同步。# 用crontab進行定時的時間的同步 yum …

RabbitMQ—TTL、死信隊列、延遲隊列

上篇文章: RabbitMQ—消息可靠性保證https://blog.csdn.net/sniper_fandc/article/details/149311576?fromshareblogdetail&sharetypeblogdetail&sharerId149311576&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目錄 1 TTL …

LVS 集群技術詳解與實戰部署

目錄 引言 一、實驗環境準備 二、理論基礎:集群與 LVS 核心原理 2.1 集群與分布式 2.2 LVS 核心原理 LVS 的 4 種工作模式 LVS 調度算法 三、LVS 部署工具:ipvsadm 命令詳解 四、實戰案例:LVS 部署詳解 案例 1:NAT 模式…

前端vue3獲取excel二進制流在頁面展示

excel二進制流在頁面展示安裝xlsx在頁面中定義一個div來展示html數據定義二進制流請求接口拿到數據并展示安裝xlsx npm install xlsx import * as XLSX from xlsx;在頁面中定義一個div來展示html數據 <div class"file-input" id"file-input" v-html&qu…

android 信息驗證動畫效果

layout_check_pro <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:id"id/parent"android:layout_width"wrap_content"android:layout_…

【iOS】繼承鏈

文章目錄前言什么是繼承鏈OC中的根類關于NSProxy關鍵作用1.方法查找與動態綁定2. 消息轉發3. **類型判斷與多態**繼承鏈的底層實現元類的繼承鏈總結前言 在objective-c中&#xff0c;繼承鏈是類與類之間通過父類&#xff08;Superclass&#xff09;關系形成的一層層繼承結構&am…

論文閱讀:Instruct BLIP (2023.5)

文章目錄InstructBLIP&#xff1a;邁向通用視覺語言模型的指令微調研究總結一、研究背景與目標二、核心方法數據構建與劃分模型架構訓練策略三、實驗結果零樣本性能消融實驗下游任務微調定性分析可視化結果展示四、結論與貢獻InstructBLIP&#xff1a;邁向通用視覺語言模型的指…

Elasticsearch+Logstash+Filebeat+Kibana部署【7.1.1版本】

目錄 一、準備階段 二、實驗階段 1.配置kibana主機 2.配置elasticsearch主機 3.配置logstash主機 4.配置/etc/filebeat/filebeat.yml 三、驗證 1.開啟Filebeat 2.在logstash查看 3.瀏覽器訪問kibana 一、準備階段 1.準備四臺主機kibana、es、logstash、filebeat 2.在…

Vue開發前端報錯:‘vue-cli-service‘ 不是內部或外部命令解決方案

1.Bug: 最近調試一個現有的Vue前端代碼&#xff0c;發現如下錯誤&#xff1a; vue-cli-service’ 不是內部或外部命令&#xff0c;也不是可運行的程序 或批處理文件。 2.Bug原因&#xff1a; 導入的工程缺少依賴包&#xff1a;即缺少node_modules文件夾 3.解決方案&#xff1…

AI生態,釘釘再「出招」

如果說之前釘釘的AI生態加持更多的圍繞資源和商業的底層助力&#xff0c;那么如今這種加持則是向更深層次進化&#xff0c;即真正的AI模型訓練能力加持&#xff0c;為垂類大模型創業者提供全方位的助力&#xff0c;提高創業成功率和模型產品商業化確定性。作者|皮爺出品|產業家…

XSS GAME靶場

要求用戶不參與&#xff0c;觸發alert(1337) 目錄 Ma Spaghet! Jefff Ugandan Knuckles Ricardo Milos Ah Thats Hawt Ligma Mafia Ok, Boomer Exmaple 1 - Create Example 2 - Overwrite Example 3 - Overwrite2 toString Ma Spaghet! <h2 id"spaghet&qu…

Unity學習筆記(五)——3DRPG游戲(2)

添加更多的敵人 編輯EnemyController&#xff0c;解決報錯導致敵人無法注冊觀察者模式&#xff0c;從而無法執行敵人慶祝動畫 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; public enum EnemyStatus { GUARD,PATROL…