利用总线信号提高模型的可读性,生成HDL代码
您可以遵循这些指导方针来了解总线信号,如何使用这些信号为您的设计建模,并生成HDL代码。每个指导方针都有一个表示遵从性需求级别的严重级别。要了解更多,请参见HDL建模指南严重级别.
指导ID
1.3.3
严重程度
信息丰富的
描述
什么时候使用公共汽车?
如果您的DUT或模型中的其他块有许多输入或输出信号,您可以创建总线信号来提高模型的可读性。总线信号或总线是由称为元素的其他信号组成的复合信号。总线信号可以具有不同数据类型的结构,也可以具有相同数据类型的向量信号。如果所有的信号都有相同的数据类型,通常使用Mux块。总线的组成信号或元素可以是:
混合数据类型信号,如double、integer和fixed-point
混合标量和向量元素
混合实信号和复信号
其他总线嵌套到任何级别
多维信号
HDL Coder™对金宝app总线的支持
你可以为设计生成HDL代码:
连接到总线的DUT子系统端口。
金宝appSimulink®和Stateflow®块支持HDL代码生成。金宝app
HDL Coder支金宝app持为总线支持的块生成代码高密度脂蛋白编码器块库。总线功能块是可以接受总线信号作为输入并产生总线信号作为输出的块。有关Simulink支持的总线模块列表,请参见金宝app金宝appBus-Capable块.
看到信号和数据类型支持金宝app用于支持使用总线生成HDL代码的金宝app块。
创建总线信号
可以使用命令创建总线信号总线的创造者块。总线创建器块为它创建的每个信号分配一个名称。然后,在搜索信号来源时可以通过名称引用信号。
要了解如何使用总线建模的示例,请打开hdlcoder_bus_nested.slx
.双击HDL_DUT
子系统。
open_system (“hdlcoder_bus_nested”) set_param (“hdlcoder_bus_nested”,“SimulationCommand”,“更新”) open_system (“hdlcoder_bus_nested / HDL_DUT”)
在这个模型中,总线创建器块创建两个总线信号。一个总线信号包含data1_En
而且CounterForParam
信号。另一个总线信号包含参数
而且罪
信号。默认情况下,总线上的每个信号都继承连接到总线的信号的名称。此图显示了总线中的元素接受输入的总线创建器块的参数data1_En
而且CounterForParam
.
巢公交车
您可以看到另一个总线创建者块,它组合了这两个总线信号。当总线创建器块的一个或多个输入是总线时,输出是嵌套总线。
总线创建器块为相应的输入没有名称的总线信号生成名称。名字都在表格里signaln
,其中n为输入信号所连接的端口号。例如,如果打开第二个总线创建者块的块参数对话框,您将看到总线中的元素作为signal1
而且Param_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”)
在模型中,您会看到一个分配值的总线分配块5
到data1_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”)
您可以看到,代码生成器将生成的代码中的总线信号扩展为标量信号。例如,如果您打开生成的Verilog文件HDL_DUT
子系统,用于接受两个嵌套总线信号的Delay块signal1
而且Param_sin
,您会看到为总线中的每个信号创建了四个always块。例如,你会看到一个always块data1_En
信号的一部分signal1
.该图显示模块定义中为每个总线信号创建的标量信号。
简化子系统总线接口
您可以通过使用总线元素块简化子系统总线接口。In Bus Element和Out Bus Element块提供了一种简单而灵活的方法来使用总线信号作为子系统的输入和输出。In总线元素块相当于一个与总线选择器块结合的导入块。输出总线元素块等价于与总线创建器块组合的输出端口块。要重构使用输入、总线选择器、总线创建器和输出端口块的现有模型,以使用输入总线元素和输出总线元素块,您可以使用Simulink®编辑器操作栏。金宝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
将输出端口块与总线创建器块结合,以创建输出总线元素块。
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代码.