• module介面訊號的收斂與發散的思考


    在離散數學課程中,曾學到如何把一個發散的數學式子轉換到收斂的數學式子;其做法是把原來式子做整理(積分或是微分的處理),重新寫出新的數學式子,這樣子才可能把發散的條件轉換到收斂的條件,然後才能得到我們想要的結果。

    同理,一個控制流程的很好的module(模組),它在介面訊號上,也會是一個收斂的。如何確保你的module是一個收斂的介面module。

    第一步: 選擇一個clock為主要的clock domain,所有的控制訊號都是在這個主要的clock domain下被控制、操作。

    第二步: 把所有不同步的控制訊號處理同步到主clock domain。這種做法就是把原來發散條件轉換到收斂條件。以下是示意圖。

    以下的波形圖是用來解釋上面圖形的。從波形圖中clockA有一個需求reqA,向clockBmodule提出。因為不相同頻率的訊號直接使用,會有meta stable問題,所以reqB_syn1就是來解決meta stable。之後再拿reqB_syn2reqB_syn3來操作,得到一個需求訊號reqB_getModule B用這個reqB_get是安全的。然後再產生reqB_clr去回覆module A 的需求。reqB_clr一樣,也是經過一連串的同步處理,最後,module A得到在clockA domain reqA_clrmodule AreqA_clr清除reqA訊號,這也是安全的。以下是波形圖。

    這樣子的做法,可解決大部份介面訊號發散的情況,也可以運用到所有的控制訊號的處理。目前我唯一遇過比較不同的是DDR PHY的控制訊號處理,它沒有辦法把所有的訊號線同步到相同的clock domain,而這是因為DDR PHY的設計上比較講究latency的長短以及它本身是clock的上升緣及下降緣都是資料處理的時間點,所以做法上更複雜,但是其基本精神也是沒有脫離上述的觀念。

    在設計一個模組時,一定都要隨時隨地保有發散、收斂的觀念在心中,並確保每個控制訊號都是收斂的環境下操作,這樣子才可以確保每個IP都是收斂且穩定高的module。 

  • 相关阅读:
    borderInterpolate()函数
    cvtColor(src, src_gray, CV_BGR2GRAY)报错
    用OpenCV读取摄像头
    OpenCV的视频输入和相似度测量
    C++ main函数中参数argc和argv含义及用法
    OpenCV的视频读取
    MySql与Oracle的几个主要区别
    OLTP与OLAP的介绍(理论知识)
    IDEA激活
    short i =1; i=i+1与short i=1; i+=1的区别
  • 原文地址:https://www.cnblogs.com/orchid123/p/3635169.html
Copyright © 2020-2023  润新知