1

假设我希望内部循环为 1ms 长并且想要计算 delaycount 参数。我们知道 F = 50 Mhz。

我们可以清楚地看到内循环中有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

解决方案 :

F = 50 兆赫 T = 20 ns

1ms = 20ns * 3 * 延迟计数

延迟计数 = 1ms/3*20ns = 16666

但是,该解决方案提供 delaycount 等于12000。有人能证明这是正确的吗?

4

1 回答 1

2

使用数据表中的信息,尤其是表 9:

分支(正确预测,采取)2

分支(正确预测,未采取)1

和代码的逻辑,我得出结论,当内部循环运行时,它是一个 4 循环循环,而不是 3 循环循环。

delaycount 变量的 12000 值然后得出:12000 * 4 * 20ns = 960000ns ~ 1ms。

因此,我会确认 12000 是正确的,给予或接受。

由于它是 FPGA 设计,因此通过使用延迟切换测试程序中的端口引脚并将示波器/逻辑分析仪连接到引脚,测试应该很容易。

于 2015-09-04T22:38:43.827 回答