示例重点介绍了使用 Simulink® Coder™ 或 Embedded Coder® 的 tlmgenerator 目标从 Simulink® 模型生成 SystemC™/TLM 组件时“定时”定时模式的使用。
在 Simulink® 模型中,数据在源和接收器之间的移动由信号采样率和集中式定时求解器控制。 在 SystemC/TLM 模型中,数据接收器和源之间的交互由 SystemC 仿真内核控制,时间通过 SC_THREADs 推进,通过等待调用协同将控制权移交给另一个线程。
对于定时 SystemC/TLM 仿真,模型遵循注释的通信接口和处理延迟。 对于松散定时的仿真,模型不允许线程在时间上“提前运行”,因此不存在与其他线程的时间感不同的“本地时间”的概念。相反,发起者会立即同步 TLM 事务返回的延迟,并且通常执行非零定时等待,以便执行轮询循环和按需同步。模拟时间将在松散定时模型中推进,以反映系统中的通信、处理和轮询延迟。除了像无定时系统一样正确同步数据移动之外,该模型的目标是进行功能正确的模拟,并具有快速的挂钟执行时间。这种速度允许在 SystemC/TLM 架构模型上进行近乎实时的软件开发。
HDL 验证器 用于 HDL 验证器的 ASIC 测试台 Simulink Coder Simulink
TLM 映射 TLM 处理 TLM 时序 TLM 测试台 TLM 编译
自动生成的输入和输出数据套接字内存映射 每个数据套接字的单独输入和输出地址偏移量。此选项生成一个 TLM 组件,每个模型输出都有一个读取寄存器,每个模型输入都有一个写入寄存器,并带有单独的地址。每个 Simulink 模型输入都绑定到其相应的写入寄存器,每个输出都绑定到其相应的读取寄存器。
无内存映射:此选项生成一个只有一个读取寄存器和一个写入寄存器的 TLM 组件,没有任何地址。Simulink 模型输入绑定到写入寄存器,输出绑定到读取寄存器。 [自动生成的内存映射] 单个输入和输出地址偏移:此选项生成一个 TLM 组件,该组件只有一个读取寄存器和一个写入寄存器,每个寄存器都有一个地址。Simulink 模型输入绑定到写入寄存器,输出绑定到读取寄存器。
在内存映射中包含命令和状态寄存器。命令和状态寄存器允许您在 SystemC 仿真期间写入命令和读取状态;例如,手动缓冲或缓冲状态。 在内存映射中包含可调参数寄存器。可调参数寄存器允许您读取或写入可调参数值。
SystemC 线程:阶跃函数算法在其自己的独立 SystemC 线程中执行。 回调函数:阶跃函数算法在从接口调用的回调函数中执行。 周期性 SystemC 线程:阶跃函数算法在其自己的时间周期性独立 SystemC 线程中执行。
在生成的 TLM 组件上创建中断请求端口:此选项创建一个 bool 类型的中断端口,每次处理一组输入时都会触发该端口。
选择在生成的 TLM 组件上创建中断请求端口。
选择在 SystemC/TLM 执行期间查看回显到命令窗口的详细消息,包括 TLM 事务和同步消息。 指示测试台应在带或不带时序注释的情况下执行。 指示启动器是否控制在寄存器和缓冲区之间移动输入和输出数据集,或者组件是否自动执行移动。
使用 make 和生成的 makefile 构建生成的代码。 运行 Simulink 以捕获输入刺激和预期结果。 将 Simulink 数据转换为 TLM 向量。 运行独立的 SystemC/TLM 测试台可执行文件。 将 TLM 结果转换回 Simulink 数据。 执行数据比较。 为任何数据比较错误的信号生成图形窗口。
SYSTEMC_INC_PATH=/tools/systemc-2.3.0/include SYSTEMC_LIB_PATH=/tools/systemc-2.3.0/lib-linux64 SYSTEMC_LIB_NAME=libsystemc.a (Linux) 或 systemc.lib (Windows) TLM_INC_PATH=/tools/systemc-2.3.0/include
如果指定了用户标签:modelname_usertag_tlm 如果用户标签字段为空:modelname_tlm
Inlined - 内联参数不可调。 SimulinkGlobal - SimulinkGlobal 变量可调。
### Starting Simulink Coder build procedure for model: DualFilter
### Successful completion of Simulink Coder build procedure for model: DualFilter
Build Summary
Top model targets:
Model Build Reason Status Build Duration
================================================================================================
DualFilter Information cache folder or artifacts were missing. Code generated. 0h 0m 20.371s
1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 24.096s
DualFilter_VP/DualFilter_intro_tlm_doc/html/DualFilter_codegen_rpt.html DualFilter_VP/DualFilter_intro_tlm/DualFilter_intro_tlm.xml DualFilter_VP/DualFilter_intro_tlm/include/DualFilter_intro_tlm_def.h DualFilter_VP/DualFilter_intro_tlm/include/DualFilter_intro_tlm.h DualFilter_VP/DualFilter_intro_tlm/src/DualFilter_intro_tlm.cpp DualFilter_VP/DualFilter_intro_tlm_tb/src/DualFilter_intro_tlm_tb.h DualFilter_VP/DualFilter_intro_tlm_tb/src/DualFilter_intro_tlm_tb.cpp DualFilter_VP/DualFilter_intro_tlm_tb/src/DualFilter_intro_tlm_tb_main.cpp
verifyTlmgDemoModel('intro')
构建生成的代码。 运行 Simulink 以捕获输入刺激和预期结果。 将 Simulink 数据转换为 TLM 向量。 运行独立的 SystemC/TLM 测试台可执行文件。 将 TLM 结果转换回 Simulink 数据。 执行数据比较。 为任何数据比较错误的信号生成图形窗口。
### Comparing expected vs. actual results.
Data successfully compared for signal tlmg_out1.
Data successfully compared for signal tlmg_out2.
### Component verification completed