2015-09-04 10 views
1

Допустим, я хочу, чтобы внутренний цикл был длиной 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 равен . Может ли кто-нибудь показать, что это правильно?

+0

Должны ли мы считать, что ваши регистры 8 бит или 16 бит или 32 бит? Это важно, поскольку ваши 3 инструкции, которые вы предполагаете, не совсем верны. Вы забыли отсчитывать в 4 инструкциях во внешнем цикле, работая при каждом внутреннем цикле. – BitTickler

+0

Кроме того, если процессор имеет некоторый конвейер команд и ему необходимо перезагрузить его после прыжка, вы не сможете поддерживать 1 цикл для каждого инструктажа. Не говоря уже о прерываниях и других вещах, которые могут оказать влияние. – BitTickler

+0

Его 32-разрядный процессор nios II – ozzmanli

ответ

1

Используя информацию из the data sheet, особенно Таблица 9:

Branch (правильно предсказал, взятый) 2

Отделение (правильно предсказал, не принимается) 1

и логику код, я заключаю, что, хотя внутренний цикл работает, это цикл цикла 4, а не цикл цикла 3.

Значение 12000 для переменной delaycount затем дает: 12000 * 4 * 20ns = 960000ns ~ 1ms.

И таким образом я бы подтвердил, что 12000 является правильным, дайте или возьмите.

Поскольку это FPGA-дизайн, тестирование должно быть простым путем переключения штырька порта в тестовую программу с использованием задержки и подключения осциллографа/логического анализатора к штырю.

+0

Ok thx для ответа! ! – ozzmanli