主要内容

为每个子系统内部的块生成HDL代码

这个例子展示了如何在Simulink®模型中的For Each子系统中使用块,然后生成HDL代码。金宝app

为什么为每个子系统使用a ?

要对输入信号的单个元素或子数组重复执行相同的算法,请使用For Each Subsystem块。子系统中的块集复制了应用于单个元素或平均划分的输入信号子数组的算法。使用For Each Subsystem块,您不必创建和连接子系统块的副本来建模相同的算法。对于每个子系统:

  • 金宝app支持向量或2-D矩阵处理,减少了模型的模拟时间。您可以同时处理输入信号的单个元素或子数组。

  • 通过在生成的HDL代码中使用for-generate循环提高代码的可读性。for-generate循环减少了代码行数,否则对于较大的矢量信号可能导致数百行代码。

  • 金宝app支持所有数据类型、Simulink块以及预定义和用户定义的系统对象的HDL代码生成。金宝app

  • 金宝app支持块上和块内部的优化,例如资源共享和管道。For Each Subsystem块的并行处理能力与您指定的优化相结合,可在目标FPGA设备上产生高性能。

为每个子系统建模

打开foreach_subsystem_example1模型。您可以在For Each Subsystem块中看到这个简单的算法建模。

当你模拟模型时,你会看到输入信号三机一体而且In3被划分为子数组。要查看此分区,双击For Each块。块参数分区维度而且分区宽度分别指定对输入信号进行分区的尺寸和每个分区片的宽度。根据输入信号的大小和指定的分区,For Each子系统决定计算算法所需的迭代次数。

在本例中,输入信号In1和In3的大小为8,被划分为四个子数组,每个子数组的大小为2。大小为2的输入信号In2没有被分割。为了计算算法,For Each Subsystem需要四次迭代,每次迭代都在In1和In3的四个子数组上重复算法。

For Each子系统简化了向量化算法的建模。该图显示了如何通过创建多个子系统实例对同一算法建模。这个模型在图形上变得复杂且难以维护。

使用矩阵输入信号

For Each子系统支持用于HDL代码生成的金宝app2-D矩阵输入。例如,foreach_subsystem_example2模型显示了一个简单的多通道滤波器操作。在HDL DUT的输入和输出端口上的矩阵不支持HDL代金宝app码生成,因此该模型在DUT子系统边界处分离通道。

For Each子系统对每个通道上的样本进行平均。生成的HDL代码将包含For Each子系统中逻辑的三个副本,每个副本操作一个4x1向量。

使用复杂数据信号

该块不支持将复杂数据类型作为HDL代码金宝app生成的输入。要输入一个复杂的信号,可以将这个信号转换成一个信号数组,然后输入到块中。

要对信号的实部和虚部执行相同的算法:

  1. 通过使用复数到实像块将信号分离为实部和虚部。

  2. 使用Mux块创建一个由实部和虚部组成的矢量信号。

然后,您可以将这个向量输入到For Each Subsystem块,并在实部和虚部复制相同的计算。在For Each子系统的输出端,您可以将矢量输出转换回复杂信号。使用Demux块分离实、虚标量部分,然后将标量输入real - image to Complex块。

生成HDL代码

要生成HDL代码,在foreach_subsystem_example1模型,右键单击Subsystem_Foreach块和选择HDL代码>为子系统生成HDL

查看所生成的HDL代码Subsystem_Foreach块,在MATLAB®命令窗口中,单击Subsystem_Foreach.vhd文件。在VHDL®代码片段中,您可以在HDL代码中看到这个for-generate循环。这个循环创建了四个子系统实例,每个实例都在输入In1和In3的大小为2的子数组上执行算法。

您可以指定优化来更改For Each子系统实例化的子系统的内容。在这种情况下,代码生成器不会在HDL代码中使用for-generate循环。HDL代码不包含for-generate循环,如果你有:

  • 总线或复杂输入信号。

  • 子系统上的资源共享和流优化。

  • 在Verilog®代码中被划分为非标量信号的矢量输入。为了在Verilog代码中获得for-generate循环,将矢量信号划分为标量。

优化每个子系统的算法

为了优化For Each子系统中包含的算法,您可以在包含For Each子系统的DUT上启用诸如资源共享和流等优化。例如,通过使用资源共享优化,您可以共享由For Each子系统创建的多个子系统实例。此优化跨多个实例重用子系统建模的算法,并减少目标设备上的面积使用。

注意:当您在For Each子系统上启用优化时,生成的HDL代码不包含For -generate循环。

这个例子展示了如何在For Each子系统上使用资源共享优化。若要共享资源,请选择包含For Each Subsystem的Subsystem块,然后指定共享的因素.在本例中,右键单击Subsystem_Foreach块和选择HDL代码>HDL块属性.设置共享的因素到4,因为For Each子系统会生成四个子系统实例。然后,生成HDL代码Subsystem_Foreach块。

要查看资源共享优化的效果,请在命令行中输入gm_foreach_subsystem_example1打开生成的模型。在生成的模型中,您可以看到优化将For Each subsystem生成的四个子系统实例共享到一个子系统中对于每个Subsystem_Instance1

如果双击对于每个Subsystem_Instance1块中,您可以看到为输入In1和In3的大小为2的子数组计算的算法。

有关资源共享优化的详细信息,请参见资源共享

另请参阅