分析CPU和外设之间的时序关系,探讨频率差异对仿真结果的影响,以及如何通过校准系数来更准确地模拟实际芯片的性能表现。
为什么要校准
事实上, 之前的ysyxSoC环境是假设处理器和各种外设运行在同一频率下: verilator仿真的一个周期, 既是处理器中的一个周期, 也是外设中的一个周期. 但实际上并非如此: 受电气特性的影响, 外设通常只能运行在低频率, 例如SDRAM颗粒通常只能运行在100MHz左右, 过高的频率会导致时序违例, 使得SDRAM颗粒无法正确工作; 但另一方面, 使用先进工艺的处理器通常能够运行在更高的频率, 例如, yzh某个版本的多周期NPC在yosys-sta项目默认提供的nangate45工艺下频率达到约1.2GHz. 在上述配置下, SDRAM控制器中经过1个周期, NPC应该经过12个周期, 但verilator感知不到两者的频率差异, 仍然按照两者频率相同的假设进行仿真, 使得仿真结果比真实芯片乐观很多, 从而也可能会使得一些优化措施无法在真实芯片中取得预期的效果.
我的仿真频率
Endpoint | Clock Group | Delay Type | Path Delay | Path Required | CPPR | Slack | Freq(MHz) |
---|---|---|---|---|---|---|---|
clint/1870:D | core_clock | max | 1.984r | 9.969 | 0.000 | 7.985 | 496.197 |
clint/1870:D | core_clock | max | 1.966f | 9.961 | 0.000 | 7.995 | 498.797 |
clint/1869:D | core_clock | max | 1.959f | 9.961 | 0.000 | 8.001 | 500.367 |
exu/u_alu/2689:D | core_clock | min | 0.079f | 0.002 | 0.000 | 0.078 | NA |
exu/u_alu/2689:D | core_clock | min | 0.086r | 0.006 | 0.000 | 0.080 | NA |
registerfile/7836:D | core_clock | min | 0.114f | 0.002 | 0.000 | 0.112 | NA |
校准
我的校准系数是5