FPGA学号3
简单说下我的经验。你想用DMA,但DMA本身有延迟不确定性,因为要竞争AXI总线。对于电流环这种需要微秒级响应的,最好避免。
更“硬核”一点的做法:把速度环PI也放到PL里。这样整个FOC都在PL里跑,PS彻底沦为“配置和监控终端”。PL内部用状态机或者一个小型软核(比如MicroBlaze)来调度整个算法流程,时序绝对可控。
如果还是想用PS跑速度环,那数据交换点要尽可能少。比如,PS每速度环周期(比如1ms)计算一次电流给定,通过一个深度为1的AXI Stream FIFO(或Mailbox IP)发给PL的电流环。PL每个电流环周期(比如100us)去读这个FIFO,读不到就用旧值。这样,即使PS偶尔慢了一点,也不会影响PL电流环的硬实时性,只是给定值更新慢了一拍,系统仍是稳定的。
设计要点:在PL里为整个实时链路留一个“旁路”或“调试接口”,能把关键信号(如Ia, Ib, Id, Iq)用另一个非实时的DMA流送到PS,方便你用SDK抓波形看效果,这对调试至关重要。开源项目可以关注一下“VHDL FOC”或“ZYNQ FOC”,有些硕士论文会把整个系统开源,是很好的起点。
