最近看不少群里聊怎么實現,也有一些具體實現,我們就不聊這些了,今天聊一下為什么要這么做,有哪些注意事項,以及怎么做(理論層面不牽扯代碼),手機打字有錯誤請見諒
為什么要做?
在使用arm riscv和x86系統時,沒有c與其它語言交互的途徑和方法,更不要說格式化打印,這就導致我們對于c的debug會相對困難。畢竟通過pc查找反匯編方法debug不太直觀,很多時候我們知道他不會掛,只想單純知道它運行到哪里了,以方便做進一步操作。
另一方面使用c調用其它語言比如sv的task并執行也是我們所需要的。假設一個場景通過c調用一個sv i2c task執行進行數據發送,并在c端不斷檢測i2c task是否執行完畢(這期間可以先做別的,做完了再回來看看)。
當然還有更復雜的操作,這就讓我們的c寫法靈活性更大,可復用性更強,這是系統方案的一部分,不能孤立的看。
需要注意什么?
執行效率 支持多種不同的硬件接口 cache 多核并行等
執行效率,就是我們在調用該方法的執行速度,比如不少人通過uart實現,先不說uart的頻率很難上去,就它的串行執行,如果數據多一點,我們的case執行被打印占據大量時間肯定不是想要的。當然可以減少打印,太少了就有點坑了。
支持不同的硬件接口,一般來說axi的速度快很多,也可以并行執行,是一個理想的總線,但因為一些限制(后仿),線并不總能被找到,i2c uart都需要可以被支持,且可以靈活切換。
cache,這里說cache原因,當我們使用axi時,cpu發出的指令都是以一個cacheline為單位的,這就讓我們原先的一些交互策略失效,需要提前考慮。
多核并行,需要我們對不同cpu發出的命令區分開,以防命令串擾,使得打印出亂七八糟的東西出來。
怎么做?
有不少人寫,這里不多說,補充一點個人的理解。
我們需要做出一種有針對性的交互協議,用于對上述為什么以及注意事項的支持,也要盡量減少對地址的占用,畢竟有的項目地址還是挺緊張的,我們大致可以實現使用64byte對應的地址的占用,很多時候使用1個dw就好了。
如果有對sv task調用(其它語言類似),就需要支持更多,比如多核對同一task并行調用,對task實施kill操作,獲取返回值,查看task執行狀態等操作。
更進一步我們還可以通過virtualcpu等方案讓該c在ip階段就完成測試,soc階段只是進一步測試,而不需要重新編寫,讓soc case盡量提前,實現多維度并行。
-
Cache
+關注
關注
0文章
129瀏覽量
28379 -
bin
+關注
關注
1文章
33瀏覽量
13399
原文標題:在bin文件中實現格式化打印的作用和意義
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論