国产FPGA试用手记二(51硬核性能测试)
0赞国产FPGA试用手记二(51硬核性能测试)
IO口速度测试,使用以下程序测试高电平脉宽。
while(1)
{
P0 = 0xf;
P0 = 0x0;
}
同等条件下与其他MCU比较:
单片机/处理器 |
工作频率 |
高脉冲宽度 |
ASTRO 8051硬核 |
25MHz |
约1us |
ASTRO 8051硬核 |
50MHz |
约500ns |
ASTRO 8051硬核 |
100MHz |
约250ns |
STC89C516 |
11.0592MHz |
约2.16us |
NIOS II/e 32位软核 |
25MHz |
约2.5us |
NIOS II/s 32位软核 |
25MHz |
约160ns |
NIOS II/f 32位软核 |
25MHz |
约160ns |
在两次操作之间插入延时函数,分别延时delay(1)、delay(2)、delay(3)、delay(4)。测试延时函数如下:
void delay(uchar cnt)
{
uchar i =0;
while(i < cnt)
{
i++;
}
}
由于delay()函数调用一次会有一些额外开销(如赋初值等),所以我们通过不同延时值的实际延时差来看指令运行的速度。换句话说,对前面的程序,可以通过每次delay()函数的差值来计算每多执行一次i++和一次i<cnt语句所耗费的时间。
延时函数 |
ASTRO 8051硬核 |
NIOS II/s 32位软核 |
||
50MHz |
100MHz |
25MHz |
50MHz |
|
Delay(1) |
5.0us |
2.5us |
6.5us |
4us |
Delay(2) |
6.6us |
3.3us |
9us |
6us |
Delay(3) |
8.3us |
4.2us |
11.5us |
7.5us |
Delay(4) |
9.9us |
5.0us |
14us |
9.5us |
i++与i<cnt指令 |
约1.63us |
约0.83us |
约2.5us |
约1.25us |
特权同学曾使用相同条件测试了51单片机,通常11.0592MHz下工作的51单片机每多执行一次i++和一次i<cnt语句大约需要 8.68us(每个指令周期是1/12的时钟周期,即1.085us;而这两条指令总共需要8个指令周期,即8*1.085us=8.68us)。而 ASTRO的8051硬核宣称与通常51有着一样的性能架构,理论上推断50MHz频率下执行i++与i<cnt指令大约是 20ns*12*8=1.92us,100MHz频率下是1.92us/2=0.96us。而测试中得到了1.63us和0.83us,大约是7个指令周 期,而非8个,当然不排除测试误差。但是无论如何,相比之下,其性能已经接近了32位的NIOS II/s软核了。从另一个角度说,硬核肯定要比软核性能强劲且稳定。
简单的一些性能测试,发现这个51硬核还是有花头的,至于稳定性和可靠性上还需继续验证和尝试。当然,本文的测试是使用了片内的存储器作为代码和数据存储,实际速度性能和存储器的性能关系非常大,是需要进一步考核的项目。
相关链接:
《NIOS2的GPIO操作速度》:http://blog.chinaaet.com/detail/10396.html