Verilog設計與邏輯綜合實例解析(代碼風格)
//來自微信公眾號 "數字晶元實驗室"
以下要點總結了設計階段的主要考慮因素:
寄存關鍵模塊的所有輸出。這將使得在系統級集成期間,介面時序很容易滿足
根據時鐘域和功能目標,對設計進行劃分(Partition)
遵循命名約定,便於以後的維護。
避免實例化特定工藝的門
在設計中使用參數化代碼
避免在設計內部生成時鐘和複位
在頂層的模塊實例化時避免使用膠合邏輯(glue logic)
什麼是「snake」路徑,為什麼要避免它們?
一條snake路徑,就是一條穿越多個層次的路徑。
設計中必須避免使用snake路徑,原因如下:
在對頂層進行靜態時序分析時,它將構成一個很長的時序路徑。但是,在模塊級的靜態時序分析時可能不會被發現。
綜合工具需要付出更多努力來優化跨層次的時序路徑,同時增加綜合時間。
為了避免snake路徑:
寄存不同功能模塊的輸出。
在功能上劃分設計,以避免跨越層次結構的過長的時序路徑。
定期在集成後的,即使沒有完全通過驗證的設計中執行綜合,檢查是否存在snake路徑。這將通過時序報告提供早期的反饋。
劃分設計時有哪些注意事項?
大型設計需要以分層的方式處理。在劃分這些設計時需要考慮以下因素:
功能:層次結構中邏輯的功能是劃分設計的主要標準。典型層次結構的劃分是:
地址和數據路徑:此模塊通常包含地址和數據寄存器,用於驅動匯流排的地址和數據。
控制邏輯:該模塊通常包含有限狀態機器(FSM)
時鐘域:在多時鐘設計中,建議將同一個時鐘域中的模塊劃分在單個模塊。當信號需要與不同時鐘域中的模塊進行交互時,需要通過一個同步模塊,它將源時鐘域中的信號同步到目的時鐘域。
面積:模塊中的邏輯太少會產生太多的層次結構,單個模塊中的邏輯過多會在以後的Floorplan期間產生問題。
推薦閱讀: