前言
在某些需求下,數據的位寬后級模塊可能不需要原始位寬寬度,需要截位,而某些需求下,需要進行多個數據的合並操作。
在verilog下,截位操作可如下所示:
合並操作可如下所示:
所以問題就來了:如何在不寫代碼的情況下在block design設計中實現截取與合並的操作呢?
用到的IP
(1)constant IP。
此IP可以輸出可配置位寬的常數,電平可配置0或者1。
(2)concat IP。
此IP可以使得分立的線拼接成單一線輸出,相當於verilog描述的拼接操作。輸入端口數和位寬均可配置。注意In1會放置在高位,[In1,In0]。
(3)slice IP。
此IP功能跟concat IP相反,會把輸入截取想要的位寬輸出。相當於verilog的位寬截取操作。輸入位寬,輸出位寬,截取msb和截取lsb都是可以配置的。
實例
100M網口使用MII接口。可以知道數據tx和rx都是4bit位寬的,但在MII IP接口中,數據位寬為8bit。則需截位與合並。
(1)總線位寬合並。
如下圖所示,對於100M的網口使用,rx的高4bit需要接0。則需要使用到constant IP和concat IP。
(2)總線位寬截取。
對於100M網口的tx,高位是沒用的,則通過slice IP截取低4bit作為輸出。
重新生成wrapper,可以看到位寬符合預期,這么做的好處在於無需手動去修改生成的信號位寬,一勞永逸。
以上。