請問CH573在使用匯編時是否可以做到精確到時鐘的控制?

你好,

我在測試使用CH573嵌入?yún)R編來生成高速串口信號,方便使用邏輯分析儀調(diào)試程序。

1633755958895566.png

類似的代碼在8051(CH552),AVR(ATMEGA328P),ARM(samd21,在RAM中運行)都沒有問題,每位的輸出都是和用指令手冊上的速度算出來相一致。

但是在CH573上卻做不到這一點。測試的時鐘是20M,每個時鐘周期為0.05us,每位輸出使用6指令。


1633755959188849.png


從邏輯分析儀上可以看出來,有的位輸出是7時鐘,有的是8時鐘,并不統(tǒng)一。我沒有找到像“CH55X 匯編指令周期表”這樣的文件解釋指令周期的問題。請問是不是有緩存命中,對齊,或者是其他的問題?是否有辦法加以改善?


image.png

函數(shù)加上這句話,實際當前函數(shù)(不含上一級函數(shù)和本函數(shù)調(diào)用的函數(shù))是運行在系統(tǒng)主頻下的,573evt里面默認主頻設(shè)置的是60Mhz。
關(guān)于指令周期,可以參考RISC-V的文檔
RISC-V手冊 (ict.ac.cn)


感謝回復(fù)。這篇文章我雖然沒有逐字閱讀,但每頁也都讀過,文檔里只提到一句“一般每條 RISC-V 指令最多用一個時鐘周期執(zhí)行(忽略緩存未命中)?!?我搜索了一下RISC-V指令周期的問題,有人提到“The ISA does not specify the CPU cycles for each instruction.”。既然RISC-V3A是自研的,那應(yīng)該也只有原廠能給出準確的數(shù)據(jù)。


我又做了進一步的測試,使用大量SW指令反復(fù)操作IO口,用邏輯分析儀測試出SW指令應(yīng)該是2周期指令。SW要操作內(nèi)存可以理解,而且無論指令數(shù)量多少,均為2周期,非常穩(wěn)定。


1633787277841176.png


但是在SW前面插入一些NOP指令,情況就有所不同。

nop0.png

不插nop很正常。


1633787279552593.png

插一個nop也正常。


1633787285146411.png

插2個nop,第三個SW需要一個額外周期。


1633787290385301.png

插3個nop也正常。



1633787288163485.png

插4個nop,第二個SW需要一個額外周期。


觀察出來的共性是,額外周期的指令地址不可被4整除,沒有對齊。而且這條指令前面一定位置要有16位指令。http://www.findthetime.net/index.php/bbs/thread-74170-1.html?提到 “你好,我們RISCV內(nèi)核芯片是我司自研,資料可以參考risc-v標準文檔。至于流水線,V2兩級、V3/V4三級?!?所以這個問題可以認為是對齊導(dǎo)致的流水線等待?







檢查原串口代碼,“sllit4,t4,0x4”指令被編譯器壓縮成了16位的“c.slli”指令,造成延遲。更換為不可壓縮的sll指令都每位都是精確的7時鐘。


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频