使用ag10kl144h的内部cpu硬核,规格书写着能够最高200M的主频
写了一个测试程序 测试cpu究竟能跑多快
测试流程如下:
每连续执行1000个nop指令(这些nop是连续执行的 中间没有任何其他指令),就把特定io口取反一次
使用200MHz的时钟提供给cpu,测量io口翻转速度
结果观察到10us才发生一次翻转,产生的方波的频率是50kHz
也就是说 一个nop指令需要10ns,但是上面提供的cpu时钟是200MHz,周期是5ns
难道这个cpu执行一条指令需要两个周期?
如果把提供给cpu的时钟设为100MHz 实测执行一条nop指令需要20ns
是100MHz时钟周期的两倍
请问有人遇到过这样的问题吗
最近编辑记录 居然还要使用用户名登录 (2023-10-28 15:41:31)
离线
很正常,就跟STM32的H7一样,主频都跑到550M了,纯软件驱动的IO速度也不过才两位数。你这么靠看IO翻转速度来测试实际的指令周期,有点不太严谨
离线
很正常,就跟STM32的H7一样,主频都跑到550M了,纯软件驱动的IO速度也不过才两位数。你这么靠看IO翻转速度来测试实际的指令周期,有点不太严谨
不是的 仔细看看我上面写的测试过程,io的两次翻转之间达到了10us级别的延时,这可是FPGA,不是普通mcu。再说即便是mcu也不会有这么差的IO性能。
而且正是考虑到所谓的不严谨,特意在两次翻转之间增加了上千个nop指令,而且这些指令是连续执行的nop,没有其他操作的。
即便不说io翻转速度,单看nop执行的速度,200MHz的主频,1000个nop执行的时间需要10us,这也不对劲吧。
离线
没有用过AGM的MCU, 不过有个信息可以参考一下, AGM176的FPGA, 内部SDRAM标称是166M的, 实际这个FPGA只能稳定运行在125M左右
离线
请补习现代计算机组成原理。
现代处理器执行指令的速度一般都能超过主频,也就是一个clock拍子会吃进多个指令,
比如1.7MIPS/MHz的机器,主频200MHz,则执行指令的速度是(200*1.7)MIPS。
访问IO并不是核心指令那么快的速度,IO访问需要CPU经过片上互联到控制器,
ARM体系的AHB-APB经由2个桥ACK回来大概就是小几个us。
离线
没有用过AGM的MCU, 不过有个信息可以参考一下, AGM176的FPGA, 内部SDRAM标称是166M的, 实际这个FPGA只能稳定运行在125M左右
啊这。。。
离线
这很有可能是指令存储器访问需要两个周期的原因。
离线
这很有可能是指令存储器访问需要两个周期的原因。
好吧 但是代码实际上是存储在ram里面
这款FPGA内部的cpu并没有rom 只有两个ram区域 在初始化的时候从芯片外接的spi-flash读取mcu软件加载到指定的ram区域然后执行
这ram应该不会这么拉胯?居然不是零等待?
我猜想是时钟系统某个寄存器需要设置 用来设置总线时钟,cpu时钟这两者与给到cpu模块的主时钟之间的比例关系
但是翻遍了文档资料都没有这个时钟系统方面的说明 太糟糕了
离线