主要内容

利用总线信号提高模型的可读性,生成HDL代码

您可以遵循这些指导方针来了解总线信号,如何通过使用这些信号来为您的设计建模,并生成HDL代码。每个指导方针都有一个严重级别,它指示遵从性需求的级别。想要了解更多,请看HDL建模指南严重性级别

指导ID

1.3.3

严重程度

信息丰富的

描述

什么时候使用公交车?

如果模型中的DUT或其他块有许多输入或输出信号,则可以创建总线信号来提高模型的可读性。总线信号或总线是由称为元件的其他信号组成的复合信号。总线信号可以具有不同数据类型的结构,也可以具有具有相同数据类型的矢量信号。如果所有信号具有相同的数据类型,则通常使用Mux块。总线的组成信号或元件可以是:

  • 混合数据类型信号,如双精度、整数和定点

  • 混合标量和向量元素

  • 混合了真实和复杂信号

  • 其他总线嵌套到任何级别

  • 多维信号

对总线的HDL编码器™金宝app支持

你可以为以下设计生成HDL代码:

  • DUT子系统端口连接到总线。

  • 金宝appSimulink®和statflow®块支持HDL代码生成。金宝app

中支持总线功能块的代金宝app码生成高密度脂蛋白编码器块库。总线功能块是能够接受总线信号作为输入并产生总线信号作为输出的块。有关Simulink支持的支持总线的块的列表,请参见金宝app金宝appBus-Capable块

看到信号和数据类型支持金宝app用于支持使用总线生成HDL代码的金宝app块。

创建总线信号

您可以使用总线的创造者块。总线创建器块为它创建的每个信号分配一个名称。然后,当你搜索信号的来源时,你可以通过名字来参考它们。

关于如何使用总线建模的示例,请参阅openhdlcoder_bus_nested.slx.双击HDL_DUT子系统。

open_system (“hdlcoder_bus_nested”) set_param (“hdlcoder_bus_nested”“SimulationCommand”“更新”) open_system (“hdlcoder_bus_nested / HDL_DUT”

在这个模型中,总线创建者块创建两个总线信号。一个总线信号包含data1_EnCounterForParam信号。其他总线信号包含参数信号。默认情况下,总线上的每个信号都继承连接到总线的信号的名称。这个图显示了总线中的元素块参数用于接收输入的总线创建器块data1_EnCounterForParam

巢公交车

您可以看到另一个总线创建器块,它结合了这两个总线信号。当总线创建者块的一个或多个输入是总线时,输出是嵌套总线。

总线创建器块为相应的输入没有名称的总线信号生成名称。名字在表格里signaln,其中n为输入信号所连接的端口编号。例如,如果打开第二个总线创建器块的块参数对话框,将看到总线中的元素作为signal1Param_sin

给总线分配信号值

要更改总线元素值,请使用总线分配块。使用总线分配块更改总线元素值,而不添加选择总线元素并将它们重新组装到总线中的总线选择器和总线创建器块。

例如,打开模型hdlcoder_bus_nested_assignment

open_system (“hdlcoder_bus_nested_assignment”) set_param (“hdlcoder_bus_nested_assignment”“SimulationCommand”“更新”) open_system (“hdlcoder_bus_nested_assignment / HDL_DUT”

在模型中,可以看到分配值的Bus Assignment块5data1_En在公共汽车上发信号。

选择总线输出

若要从包含嵌套总线的总线提取信号,请使用总线选择器块。默认情况下,块输出指定的总线元素作为单独的信号。您也可以将信号输出为另一总线。你可以使用OutputSignals块属性查看总线中的元素块输出的。通过使用此属性,您可以跟踪哪些信号正在进入模型层次结构深处的总线选择器块。

get_param (“hdlcoder_bus_nested / HDL_DUT /总线Selector5”“OutputSignals”
ans = ' signal1.data1_En、signal1.CounterForParam Param_sin.Param, Param_sin.sin”

生成HDL代码

要为这个模型生成HDL代码,运行以下命令:

makehdl (“hdlcoder_bus_nested / HDL_DUT”

可以看到,代码生成器将总线信号扩展为生成代码中的标量信号。例如,如果您打开为HDL_DUT子系统,用于接收两个嵌套总线信号的Delay块signal1Param_sin,您会看到总线上为每个信号创建了四个always块。例如,您看到的总是块data1_En信号是signal1.该图显示了模块定义中为每个总线信号创建的标量信号。

简化子系统总线接口

您可以通过使用总线元素块简化子系统总线接口。In总线元素和Out总线元素块提供了一种简化和灵活的方式来使用总线信号作为子系统的输入和输出。In总线元素块相当于与总线选择器块组合的导入块。输出总线元素块相当于与总线创建器块组合的输出端口块。要重构使用import、Bus Selector、Bus Creator和Outport块的现有模型,以使用In Bus Element和Out Bus Element块,可以使用Simulink®Editor操作栏。金宝app

例如,打开模型hdlcoder_bus_nested_simplified.该模型在功能上等价于hdlcoder_bus_nested模型,但是一个更简化的版本。

open_system (“hdlcoder_bus_nested_simplified”) set_param (“hdlcoder_bus_nested_simplified”“SimulationCommand”“更新”) open_system (“hdlcoder_bus_nested_simplified / HDL_DUT”

该模型有两个子系统,它们通过使用总线元素块来执行总线创建和总线选择。的Bus_Creator_Subsystem将Outport块与总线创建者块组合起来,以创建Out总线元素块。

open_system (“hdlcoder_bus_nested_simplified / HDL_DUT / Bus_Creator_Subsystem”

Bus_Selection_Subsystem将导入块与总线选择器块组合以创建In总线元素块。

open_system (“hdlcoder_bus_nested_simplified / HDL_DUT / Bus_Selection_Subsystem”

想要了解更多,请看通过总线简化子系统和模型接口

虚拟和非虚拟总线

模型中的总线信号hdlcoder_bus_nested使用总线创建器和总线选择器块创建的是虚拟总线。每个总线元素信号存储在内存中,但总线信号不存储。总线简化了图形,但没有功能效果。在生成的HDL代码中,可以看到组成信号,但看不到总线信号。

为了更容易地跟踪模型中的总线信号和生成的HDL代码之间的对应关系,使用非虚拟总线。非虚拟总线生成干净的HDL代码,因为它使用一个结构来保存总线信号。要将虚拟总线转换为非虚拟总线,请在总线创建器块的块参数中指定输出数据类型作为总线:object_name通过替换object_name使用总线对象的名称,然后选择输出为非虚拟总线

看到将虚拟总线转换为非虚拟总线

数组的公交车

总线数组是元素为总线的数组。总线数组中的每个元素都必须是非虚拟的,并且必须具有相同的数据类型。

要了解关于使用总线数组建模的更多信息,请参见用总线阵列生成子系统的HDL代码

另请参阅

功能

相关的话题