仿真SRIO事務時序
仿真之前先完成下面兩步操作:
1.Vivado軟件版本2020.1,創建好工程及SRIO的IP核
2.右鍵綜合化的IP核,然后選擇打開IP示例工程
直接運行仿真
分別將request和response兩個模塊添加到仿真窗口進行查看
運行1000us左右就可以看到信號動作
可以看到不同的事務類型
接收MAINTENANCE READ REQUEST請求
首先會由一個維護讀請求事務,指定一個維護讀請求,不需要響應,因此val_tresp_tvalid=0。
發送SWRITE請求
仿真后面可以看到val_ireq_tvalid拉高時發送的數據包有效,結合ftype(6)和ttype(0)值,包頭對應instruction.vh頭文件的流寫事務,在數據發送完后tlast拉高。
接收SWRITE請求
在request模塊發送完數據后,response模塊接收到SWRITE請求,結合ftype(6)和ttype(0)值可以驗證是SWRITE事務。
發送NWRITE_R請求
接著request模塊繼續發送下一個數據包事務,是NWRITE_R事務。
接收NWRITE_R請求,發送響應
在發送請求一段時間后,在response模塊中接收NWRITE_R事務,和發送的請求包一致,該事務會產生響應,在一段時間后可以看到val_tresp_tvalid拉高一個周期,發送響應包val_tresp_tdata = 64'h25d0_4000_0000_0000。
發送NREAD請求
接著request模塊繼續發送下一個數據包事務,是NREAD事務。先發送讀數據請求包,該事務請求只含包頭,不包含數據。
接收NREAD請求
在發送一段時間請求包后response模塊收到請求包,接收到讀數據事務后根據數據類型接收模塊會返回一個響應包和一串數據。
發送NREAD響應
在response模塊接收到讀事務一段時間后產生相應包val_tresp_tdata=64'h4bd8400000000000,并和數據一起打包,因為接收到的size=8'h3f,所以需要發送的數據個數是64字節,數據位寬是64位發送,則需要發送8個周期的數據。
接收NREAD響應
在響應包發送一段時間后在request模塊中收到了響應包包頭和數據,響應包包頭為val_iresp_tdata=64'h4bd8400000000000,跟在包頭后面的是數據0。
上述只對流寫事務、帶響應的寫事務和讀事務進行仿真時序分析,其它幾個事務可以根據頭文件和仿真繼續分析。
本期分享結束,感謝大家看完,私信我可獲取相關源碼工程