主要内容

FPGA中断触发软件任务

这个例子展示了如何建模在硬件和软件之间划分的算法。硬件IP在FPGA fabric中实现,触发软件任务在嵌入式处理器中实现。在SoC硬件上设计、仿真并实现了一个完整的设计。

支持硬件平台:

  • Xilinx®Zynq®ZC706评估试剂盒

  • Xilinx Zynq UltraScale™+ MPSoC ZCU102评估试剂盒

  • Xilinx Zynq UltraScale™+ RFSoC ZCU111评估试剂盒

  • ZedBoard™Zynq-7000开发板

  • Altera®Cyclone®V SoC开发套件

  • Altera Arria®10 SoC开发工具包

简介

许多片上系统(SoC)应用程序要求硬件设备在处理器上触发异步任务。在实现横跨硬件和软件的低延迟控制循环时,此功能非常有用。它在处理软件的紧急硬件请求时也很有用。对于这种设计,硬件设备向中断控制器发出中断请求,表示数据已经准备好由处理器上的软件任务进行操作。

设计任务

本例包括FPGA中的两个硬件IP核。这些IP核异步地产生中断信号。中断触发处理器上的两个独立任务,每个任务对应一个硬件IP核。处理器任务通过读写寄存器来访问硬件设备。

模型结构

顶层模型sw_hw_interrupt_top包括FPGA模型sw_hw_interrupt_fpga以及处理器模型sw_hw_interrupt_proc作为模型参考。顶层模型还包括中断通道和寄存器通道块,用于模拟从FPGA到处理器的数据传输。

FPGA模型实现了两个IP核,基于递增的32位计数器值生成中断。当计数器值的第16位或第18位从0变为1时,第一个IP核产生中断。当计数器值的第14位或第16位从0变为1时,第二个IP核产生中断。产生中断时的计数器值被注册,并使用寄存器通道块传输给处理器。处理器模型实现了两个软件任务,每个IP核一个,读取之前由FPGA注册的计数器值。

模拟

模拟系统0.03秒,并打开顶部模型上的Scope块,以显示处理器读取的计数器值。

接下来,在模拟选项卡上,单击数据检查查看由中断触发的各种事件的时间。在上视图添加interrupt1和interruptTask1信号,在下视图添加interrupt2和interruptTask2信号。模拟图显示,每次触发中断时,都会执行相应的任务。在时间0.01802秒时,将引发interrupt2,中断通道块需要100微秒来处理并触发相应的interruptTask2,该过程需要500微秒来运行。

在时间0.01966秒时,interrupt1和interrupt2同时被引发,处理器根据它们的相对优先级为它们提供服务。由于interrupt1首先在中断通道块的输入端口连接,因此它的优先级比interrupt2高。由于interrupt1的优先级更高,interruptTask2等待执行,而interruptTask1仍在执行。

在硬件上实现和运行

本节需要以下2022世界杯八强谁会赢?产品:

  • 高密度脂蛋白编码器™

  • 嵌入式编码器®

  • Xilinx设备的SoC Blockset支持包,或Intel设备的SoC Blockset支持包

有关支持包的详细信息,请参见SoC Blockset支持的硬件

要在支持的SoC板上实现该模型,请使用SoC建设者工具。默认情况下,将在上面实现模型ZedBoard因为它是用那个板配置的。打开SoC建设者点击工具条中的“配置、构建和部署”按钮,按照以下步骤操作:

  1. 选择构建模型设置屏幕上。点击下一个

  2. 点击下一个审查任务图屏幕上。

  3. 回顾内存映射屏幕上,单击查看/编辑内存映射查看内存映射。点击下一个

  4. 上指定项目文件夹选择项目文件夹屏幕上。点击下一个

  5. 选择构建,加载外部模式选择构建操作屏幕上。点击下一个

  6. 验证模型屏幕上,单击验证检查实现模型的兼容性。点击下一个

  7. 构建模型屏幕上,单击构建开始模型的构建。当FPGA合成开始时,会打开一个外部外壳。点击下一个

  8. 点击测试连接连接硬件屏幕测试主机与SoC板的连通性。点击下一个运行应用程序屏幕上。

FPGA合成可能需要30分钟以上才能完成。为了节省时间,您可能希望按照以下步骤使用提供的预生成的比特流:

  1. 关闭外壳以终止合成。

  2. 复制预生成的比特流到您的项目文件夹通过运行这个拷贝文件下面的命令

  3. 点击加载和运行加载预生成的比特流,并在SoC板上运行模型

拷贝文件(fullfile (matlabshared.supportpkg.getSupportPackageRoot,“工具箱”“soc”...“supportpackages”“xilinxsoc”“xilinxsocexamples”“比特流”...“soc_hwsw_interrupt_top-zedboard.bit”),”。/ soc_prj ');

加载比特流后,运行生成的软件模型soc_hwsw_interrupt_sw外部模式。从模型工具栏中,打开数据检查并在顶部视图中添加interruptTask1,在底部视图中添加interruptTask2。注意,每次中断被触发时,相应的任务都会被执行。

在其他板上的实施:若要在除ZedBoard之外的其他支持板上实现该模型,请先将模型配置到所支持的板上,然后设置样例参数如下。

  • 硬件选项卡上,单击硬件设置,打开“配置参数”窗口。

  • 硬件实现选项卡,从中选择您的电路板硬件板顶部和处理器模型。

  • 目标硬件资源>FPGA设计(顶级)选项卡使包括MATLAB作为AXI主IP,用于基于主机的交互并设置IP核心时钟频率(MHz)至10mhz。

接下来,单击配置、构建和部署在工具条上打开SoC建设者并遵循之前为ZedBoard上面所述的步骤。修改拷贝文件命令匹配与您的单板对应的位流。Altera Arria®10 SoC开发套件和Altera Cyclone®V SoC开发套件使用如下拷贝文件对应单板的命令。对于Altera Arria®10 SoC开发工具包,复制'.periph。Rbf '和'.core。rbf的文件。

拷贝文件(fullfile (matlabshared.supportpkg.getSupportPackageRoot,“工具箱”“soc”...“supportpackages”“intelsoc”“intelsocexamples”“比特流”...“soc_hwsw_interrupt_top-c5soc.rbf”),”。/ soc_prj ');

以下是可用的预生成的比特流文件:

  • “soc_hwsw_interrupt_top-zc706.bit”

  • “soc_hwsw_interrupt_top-zedboard.bit”

  • “soc_hwsw_interrupt_top-zcu102.bit”

  • “soc_hwsw_interrupt_top-XilinxZynqUltraScale_RFSoCZCU111EvaluationKit.bit”

  • “soc_hwsw_interrupt_top-c5soc.rbf”

  • “soc_hwsw_interrupt_top-a10soc.periph.rbf”

  • “soc_hwsw_interrupt_top-a10soc.core.rbf”

总之,这个示例展示了来自FPGA的中断如何触发处理器中的动作。您使用SoC Blockset对行为建模,并经历了在SoC设备上实现它所需的工作流。

另请参阅

|

Baidu
map