Speedgoat FPGA板卡使用系列文章之时钟同步
HDL Coder :FPGA与CPU时钟同步、PCIe的锁存设置以及CPU对PCle端口的访问顺序查看方法的介绍
同步CPU与FPGA时钟
在有些应用中需要同步FPGA和CPU的工作,典型的案例就是基于相电流反馈的PWM控制,因为在实时机中FPGA板卡的时钟与CPU的时钟不是同一个时钟,无法做到严格的同步,如图1所示,那么控制效果也就无法达到理想的效果。那么我们就要来思考如何同步FPGA和CPU时钟。

图1
|
时钟异步 > |
模型中分别建立CPU模型和FPGA模型。两者的逻辑功能一致。如下图所示,图3为主模型的展开。

图2

图3
因为在实时机中FPGA板卡的时钟与CPU的时钟不是同一个时钟,即使在FPGA的模型中通过逻辑触发使得FPGA模型降频为,这时按照HDLWorkflowAdvisor编译FPGA子模型,并将主模型中的CPU模型和FPGA模型分别下载到实时机的CPU和FPGA中,理论上两者的输出结果应该一致,但是从图4的离线和在线仿真结果来看,两者的输出并不一致。

|
时钟同步 > |
这时我们只需要将FPGA模型的中断输出接口也就是图3中的Port2在HDLWorkflowAdvisor 1.3中配置为中断源,然后在模型的Configuration Paramter中将实时机CPU的中断源从Timer修改为FPGA产生的中断源即可。具体的配置方式如图5、图6所示。

图5

图6
通过以上的配置,我们从仿真结果图7中可以看出CPU模型与FPGA模型的输出结果一致。也就是说如果想达到CPU与FPGA同步的话,需要FPGA产生触发CPU模型运行的中断源。

图7
锁存PCIe访问
CPU如果读取FPGA中的数据,需要通过PCIe总线进行传递,读取方式分为异步步读取(独立读取每个信号,如图8)、同步读取(锁存FPGA输出的向量信号,如图9),两者的具体操作如下图10所示。仿真结果图11所示,输入激励信号配置相同,采用异步输出时,输出结果不一致。同步输出时,因为在DUT_FPGA模型中将输出信号用MUX模块组成向量形式,在模型综合的时候,此处便加了锁存器,使的输出结果同步输出。


图8 图9

图10

图11
所以我们在建模时要尽可能的将需要同步的信号用MUX模块组成向量形式,否则输出的结果可能无法达到理想的状态。
PCIe端口的访问顺序
如果我们想观察模型综合后,CPU对PCIe端口的访问顺序,可以按如下做法观察。
|
MATLAB/Simulink 2019a 及以前版本具体操作 > |
· 模型界面点击菜单栏Display;
· 点击Blocks;
· 点击Sorted Execution Order;

图12
|
MATLAB/Simulink 2019a 以后版本具体操作 > |
· 模型的工具栏选中Debug;
· 点击Information Overlays;
· 选择Excution Order;

图13


