介绍StateflowHDL代码生成
Stateflow®图表提供简洁的描述复杂系统行为通过使用分层有限状态机(FSM)理论,流程图符号,和状态转换关系图。
你用一个图表模型有限状态机或一个复杂的控制算法用于ASIC或FPGA实现。当模型满足设计要求,然后生成硬件描述语言(HDL代码®或Verilog®实现设计模型中体现)。你可以模拟和综合生成的HDL代码通过使用行业标准工具,然后系统设计映射到fpga和asic。为更多的信息关于如何生成有限状态机的HDL代码,看看为粉和摩尔有限状态机生成高密度脂蛋白。
代的硬件描述语言(VHDL)或Verilog代码从一个模型包含一个图表不从HDL代码生成从其他模型有很大的不同。HDL代码生成器的设计:
金宝app支持的最大可能的子集图表语义与HDL代码一致。这意味着您可以广泛的子集生成HDL代码从现有的模型没有重大改造。
生成bit-true cycle-accurate HDL代码完全兼容Stateflow仿真语义。
例子
使用hdlcodercfir模型,这个例子展示了如何为一个子系统生成HDL代码,包括Stateflow图表。
打开模型,在命令行输入:
hdlcodercfir
表初始化
使(输入)表初始化执行财产执行后立即更新图表功能表初始化。你可以保持图表属性(输入)表初始化执行禁用。这个属性可以显著改变Stateflow图表行为和生成的HDL代码。执行初始化的一个图表(Stateflow)Stateflow描述该属性的影响图表。
你不能在初始化操作,因为复位操作不能执行算术处理组合逻辑的延迟。
您可以选择或清除初始化输出每次图表醒来。如果你清楚的话,生成的HDL代码包含一个额外的注册状态机输出值。
可调参数
您可以使用一个可调参数Stateflow图表用于HDL代码生成。
有关更多信息,请参见为可调参数生成DUT港口。
注释Stateflow图表
当你的仿真软件金宝app®模型包含一个Stateflow图表使用注释,高密度脂蛋白编码器™生成HDL代码中的注释。
当你从模型中生成Verilog代码,高密度脂蛋白编码器显示Stateflow中的注释图表内联在相应Stateflow对象。
限制
高密度脂蛋白编码器不支持Statefl金宝appow块包含了HDL代码生成的消息。
在模型中图表的位置
图表用于HDL代码生成必须仿真软件子系统的一部分。金宝app如果你想要的图生成代码的根级别模型,嵌入一个子系统中的图表。相关的信号连接到子系统的输入和输出。
数据类型
代码生成器支持MATLAB的子集金宝app®图表中数据类型包括:
签署和无符号整数
不动点
布尔
枚举
请注意
除了数据类型分配给港口、多维数组支持这些类型。金宝app端口必须标量或矢量数据类型。
如果你使用单引号和双数据类型,在高密度脂蛋白HDL编码器生成真实的数据类型的代码。你可以模拟和验证的代码通过使用第三方ModelSim等模拟器®。
真正的类型不是synthesizable目标FPGA上的设备。代码生成器不支持代Stateflow HDL代码金宝app图表在本机浮点
模式。生成synthesizable HDL代码使用浮点数据类型时,开发一个算法通过使用MATLAB函数块或其他金宝app使用本机支持浮点模型块金宝app。
进口代码
一个图表用于HDL代码生成必须是完全独立的。这些限制适用:
不调用MATLAB函数除了
最小值
或马克斯
。不要使用MATLAB系统中的对象图表块。
不要使用MATLAB工作区数据。
不调用C数学函数。高密度脂蛋白没有对应C数学库。
如果使c位操作房地产是禁用的,不使用求幂运算符(
^
)。求幂运算符是用C实现的数学库函数战俘
。不包括自定义代码。信息输入模拟目标>自定义代码面板配置参数对话框将被忽略。
不共享数据(通过数据存储内存块)之间的图表。高密度脂蛋白编码器没有这样的全局数据映射到高密度脂蛋白HDL因为不支持全局数据。金宝app
矢量的可调参数
向量数据类型的可调参数图表不支持模块。金宝app
输入和输出活动
高密度脂蛋白编码器支金宝app持使用输入和输出事件与Stateflow图表,受到这些约束:
您可以定义并使用每个Stateflow图只有一个输入事件。没有限制数量的输出,您可以使用事件。
编码器不支持HDL代码生成的图表有一个金宝app输入事件,而且也有非零初始值图的输出端口。
所有输入和输出事件必须边沿触发。
输入和输出事件的详细信息,请参阅激活Stateflow图表发送输入事件(Stateflow)和激活一个模型块通过发送金宝app输出事件(Stateflow)。
消息
不支持Stateflow消息HDL代码生成。金宝app
循环
除了为
循环,没有明确在图表中使用循环用于HDL代码生成。观察下面的限制为
循环:
的数据类型必须循环计数器变量
int32
。高密度脂蛋白编码器只金宝app支持constant-bounded循环。
的为
循环的例子,sf_for
,显示了设计模式为
循环使用的图形功能。
额外的限制
高密度脂蛋白编码器强加额外限制使用经典的图表功能。这些限制存在,因为高密度脂蛋白不支持通用顺序编程语言的一些特点。金宝app
不定义本地事件HDL代码生成的图表。
不要使用这些隐含的事件:
输入
退出
改变
您可以使用这些隐含的事件:
唤醒
蜱虫
如果基础事件仅限于这些类型的隐式事件,您可以使用时序逻辑。
通过图形不使用递归函数。高密度脂蛋白编码器不支持递归。金宝app
避免非结构化代码。虽然图表允许非结构化代码通过过渡流图和图形功能,这使用的结果
转到
语句和多个函数返回语句。高密度脂蛋白不支持金宝app转到
语句或多个函数返回语句。因此,不要使用非结构化流程图。如果你没有选择了初始化输出每次图表醒来图选项,不读取输出端口。
不要使用数据存储内存对象。
不使用指针(
&
)或间接(*
)操作符。看到指针和地址操作(Stateflow)。如果一个图在仿真运行时溢出的错误,可以禁用数据范围错误检查和生成图表的HDL代码。在这种情况下,一些来自HDL代码生成的结果可能不是bit-true从仿真结果。推荐的做法是使溢出检查和消除溢出模型在模拟条件。
另请参阅
状态转换表(Stateflow)|真值表(Stateflow)|顺序查看器(Stateflow)