关于Virtual clock

什么是virtual clock

指的是没有定义source(时钟源)的时钟。通常用于对interface timing的约束,相关的sdc命令为set_input_delay set_output_delay。(相对应,定义了source(时钟源)的时钟,就是real clock)

示例:

create_clock -name VCLK -period 10

为什么要用virtual clock

简单的说,设置virtual clock的好处就是可以在不影响real clock的情况下,指定clock的clock network delay。

我们知道,clock latency包括了clock source latency和clock network delay。当BLOCK中没有做clock tree 的时候,clock network delay 等于0, 这时候,RegA到PORT这个path来说,用virtual clock还是用real clock, 效果都是一样的。

但是,当BLOCK到了CTS阶段后,因为有BLOCK内部有clock network delay的存在,而RegB仅仅是个虚拟的寄存器,他的clock tree是不存在的,因此,clock network delay也就是0,这就会导致 RegA 到 PORT的timing path变得过于严格(与之相反,input 到 内部寄存器的path的setup check就会过于乐观)。那么我们可以对RegB设source latency。然而不幸的是,如果用的是real clock, 那么必然会导致RegA的clock的source latency也相应的改变。这时候就体现出了virtual clock的好处。

示例:用virtual clock对PORT加约束

set_output_delay -clock [get_clocks VCLK] -max 1 [get_port PORT] -add

假设我们对于RegB 是用的virtual clock(如示例),在CTS之后,就可以对VCLK加上latency:set_clock_latency -clock VCLK $clock_network_delay。

而对于real clock,在CTS之后,都要由ideal clock设为propgated     clock(set_propagated_clock), 这样,对于real clck,是不能够用set_clock_latency设置clock network delay的。

当然,用real clock也是有办法解决这个问题的,那就是修改input delay或者output delay。对于Figure1, 可以将output delay 减少 clock network delay一样的数值。

由于现在的PR工具都会在CTS之后自动进行update io latency的动作,我们完全没有非要用一个real clock,然后自己去在CTS之后去修正port的input delay或者output delay。

以上就是我们需要用virtual clock的目的。

  • 8
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vc 时钟程序 class CClockCtrl : public CStatic { public: //Constructors / Destructors CClockCtrl(); //Accessors int GetHour() const { return m_nHour; }; int GetMinute() const { return m_nMinute; }; int GetSecond() const { return m_nSecond; }; BOOL GetRealTime() const; BOOL GetShowHours() const { return m_bShowHours; }; BOOL GetShowMinutes() const { return m_bShowMinutes; }; BOOL GetShowSeconds() const { return m_bShowSeconds; }; BOOL GetShowPoints() const { return m_bShowPoints; }; BOOL GetShowMinorPoints() const { return m_bShowMinorPoints; }; COLORREF GetHourMinutesHandColor() const { return m_ColorHourMinutesHand; }; COLORREF GetBackgroundColor() const { return m_ColorBackground; }; BOOL Get3dPoints() const { return m_b3dPoints; }; //Mutators void SetTime(int nHour, int nMinute, int nSecond); void SetRealTime(BOOL bRealTime); void SetShowHours(BOOL bShowHours); void SetShowMinutes(BOOL bShowMinutes); void SetShowSeconds(BOOL bShowSeconds); void SetShowPoints(BOOL bShowPoints); void SetShowMinorPoints(BOOL bShowMinorPoints); void SetHourMinutesHandColor(COLORREF color); void SetBackgroundColor(COLORREF color); void Set3dPoints(BOOL b3dPoints); protected: enum HandType { HOUR, MINUTE, SECOND }; //{{AFX_VIRTUAL(CClockCtrl) virtual void PreSubclassWindow(); //}}AFX_VIRTUAL //{{AFX_MSG(CClockCtrl) afx_msg void OnPaint(); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnTimer(UINT nIDEvent); afx_msg void OnDestroy(); afx_msg BOOL OnEraseBkgnd(CDC* pDC); //}}AFX_MSG void RecalcLayout(); double MinuteToRadian(double minute); CPoint ComputePoint(int nMinute, double ratio); void DrawFacePoint(CDC& dc, const CPoint& point, BOOL bMajor); void DrawHands(CDC& dc, int nHour, int nMinute, int nSecond, BOOL bDrawAll); void DrawHand(CDC& dc, int nMinute, HandType type, BOOL bDraw); void GetHandPoints(int nValue, HandType type, CPoint* pPoints); //Member variables COLORREF m_ColorHourMinutesHand; COLORREF m_ColorPoints; COLORREF m_ColorBackground; CPoint m_MiddlePoint; int m_nXRadius; int m_nYRadius; int m_nPointWidth; int m_nHour; int m_nMinute; int m_nSecond; UINT m_nTimerID; BOOL m_bEnableRealtime; BOOL m_bShowHours; BOOL m_bShowMinutes; BOOL m_bShowSeconds; BOOL m_bShowPoints; BOOL m_bShowMinorPoints; BOOL m_b3dPoints; DECLARE_MESSAGE_MAP() };
虚拟时钟(Virtual Clock)是一种在时序分析中使用的概念,它与实际的时钟信号(real clock)不同。虚拟时钟不会连接到任何端口或引脚上,而是在分析过程中虚拟创建出来的时钟。\[1\]在某些情况下,当需要设置输入输出延迟的参考时钟时,共用一个实际时钟是不可行的,因为给参考时钟添加延迟会对所有相关路径产生影响。因此,需要创建一个虚拟时钟作为参考时钟,并根据路径的实际情况为虚拟时钟添加延迟或进行其他设置。\[2\]而对于实际时钟(real clock),在时钟树合成(CTS)之后,需要将其设置为传播时钟(propagated clock)而不是理想时钟(ideal clock),这样就不能使用set_clock_latency来设置时钟网络延迟。\[3\] #### 引用[.reference_title] - *1* [时序分析基本概念介绍<Virtual Clock>](https://blog.csdn.net/Tao_ZT/article/details/102456842)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [虚拟时钟(Virtual Clock)](https://blog.csdn.net/qq_39507748/article/details/114758920)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [关于Virtual clock](https://blog.csdn.net/graymount/article/details/106640854)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值