Допустим, я хочу, чтобы внутренний цикл был длиной 1 мс и хотел рассчитать параметр delaycount. Мы знаем, что F = 50 МГц.Расчет цикла задержки в коде сборки
Мы можем четко видеть, что во внутреннем цикле имеется 3 инструкции. Предположим также, что инструкции выполняются по 1 такту. Таким образом, результат:
.equ delaycount, 0 #set right delay value here!
.text #
.global delay #
delay11: beq r4,r0,fin # exit outer loop
movi r8,delaycount # delay estimation for 1ms
in: beq r8,r0,out # exit from inner loop
subi r8,r8,1 # decrement inner counter
br in
out: subi r4,r4,1 # decrement outer counter
br delay11
fin: ret
Solution:
F = 50 МГц Т = 20 нс
1 мс = 20ns * 3 * delaycount
Delaycount = 1 мс/3 * 20ns = 16666
Как когда решение обеспечивает, что delaycount равен . Может ли кто-нибудь показать, что это правильно?
Должны ли мы считать, что ваши регистры 8 бит или 16 бит или 32 бит? Это важно, поскольку ваши 3 инструкции, которые вы предполагаете, не совсем верны. Вы забыли отсчитывать в 4 инструкциях во внешнем цикле, работая при каждом внутреннем цикле. – BitTickler
Кроме того, если процессор имеет некоторый конвейер команд и ему необходимо перезагрузить его после прыжка, вы не сможете поддерживать 1 цикл для каждого инструктажа. Не говоря уже о прерываниях и других вещах, которые могут оказать влияние. – BitTickler
Его 32-разрядный процессор nios II – ozzmanli