System Generator学习——将代码导入System Generator(一)

简介: System Generator学习——将代码导入System Generator

前言

本节讲解如何讲讲代码(Matlab、HDL、C/C++)导入到 System Generator 并使用。


一、步骤 1:用 M-Code 建模控制

1、引言

在这一步中,你将使用 MCode 块创建一个简单的有限状态机(FSM)来检测二进制值 1011 的序列。FSM 也需要能够检测到多个传输,例如 10111011

2、目标

完成本实验后,你将能够使用 System Generator 中的 MCode 块创建有限状态机

3、步骤

在本练习中,你将使用 M-code 为有限状态机创建控制逻辑。然后,你将模拟最终设计以确认正确的操作

①、启动 System Generator 并打开 Simulink 将 Lab2\M_code\Lab2_1.slx 打开,您可以看到下面这个不完整的图表

②、从 Xilinx Blockset/Index 库中添加一个 MCode 块。

③、双击 MCode 块,单击 “编辑m文件”,如下图所示

下图显示了 MATLAB 文本编辑器中的默认 m 代码

⑤、新建 state_machine.m 文件,使其包含函数名 state_machine 以及匹配的输入和输出。

⑥、编辑完成后,使用另存为将 MATLAB 文件保存为 state_machine.m 到 Lab2_1 文件夹。在 MCode 属性编辑器中,使用 Browse 按钮确保 MCode 块引用了本地的 M-code 文件(state_machine.m)。

⑦、在 MCode 属性编辑器中,单击 OK。您将看到 MCode 块使用了新的端口和函数名,现在将 MCode 块连接到下图中:

现在可以开始对状态机进行编码了。这个状态机的气泡图如下图所示。该 FSM 具有五种状态,能够连续检测两个序列

⑧、编辑 M-code 文件 state_machine。使用 Xilinx xl_state 数据类型定义状态变量,如下所示。这要求你将变量声明为持久变量。xl_state 函数需要两个参数:初始条件和一个定点声明。因为你需要数到 4,你需要 3 位

persistent state, state = xl_state(0,{xlUnsigned, 3, 0});

这部分的代码使用 persistent 将 state 在该 M 文件中做了一个变量的声明,可以在该 M 文件中进行使用,xl_state()这个则是对state进行赋值;



该函数的简单用法就是:xl_state(init, precision)



第一个 init 就是初始化的值,precision 就是其精度;



而代码中的{xlUnsigned, 3, 0}属于一个单元阵列,其中 xlUnsigned 代表数据类型是无符号的定点数;3代表数据的位宽,因为代码中的 state 需要达到4,所以至少要 3bit 的位宽;0 代表的是二进制点的位置,该部分代码不需要有小数,所以直接设置为 0。xl_state 以及 Percision 也都还有其他用法,可以自行对 MCode 使用 help 进行研究。

⑨、使用 switch-case 语句定义所显示的 FSM 状态。下面提供了一个小示例来帮助您入门

注意:你需要一个 otherwise 语句作为最后一个 case

switch state
    case 0
        if din == 1
            state = 1;
        else
            state = 0;
        end
        matched = 0;
    case 1
        if din == 0
            state = 2;
        else
            state = 0;
        end
        matched = 0;
    case 2
        if din == 1
            state = 3;
        else
            state = 0;
        end
        matched = 0;
    case 3
        if din == 1
            state = 4;
        else
            state = 2; 
        end
        matched = 0;
    case 4
        if din == 0;
            state = 0;
        else
            state = 1;
        end
        matched = 1;
    otherwise
        state = 0;
        matched = 0;
end

⑩、保存 M-code 文件并运行仿真。波形应该如下图所示。

可以看到只要出现了 “1011” 的序列,输出检测就会置 1,反之保持为 0。


System Generator学习——将代码导入System Generator(二)https://developer.aliyun.com/article/1472313

目录
相关文章
|
7月前
|
SQL 数据库
一个很实用的造数工具—Spawner Data Generator
一个很实用的造数工具—Spawner Data Generator
218 0
|
7月前
|
算法 C++
System Generator学习——将代码导入System Generator(三)
System Generator学习——将代码导入System Generator
114 2
|
7月前
System Generator学习——将代码导入System Generator(二)
System Generator学习——将代码导入System Generator
50 1
/etc/init.d/functions运用实战配置system服务详解
/etc/init.d/functions运用实战配置system服务详解
|
Java 测试技术 Spring
在进行SSM单元测试时出现的Could not load TestContextBootstrapper [null]. Specify @BootstrapW错误
在进行SSM单元测试时出现的Could not load TestContextBootstrapper [null]. Specify @BootstrapW错误
109 0
|
Java 测试技术 Maven
IntelliJ IDEA中执行@Test单元测试时报错Class not found: "..."Empty test suite
IntelliJ IDEA中执行@Test单元测试时报错Class not found: "..."Empty test suite
381 0
|
XML 编解码 Go
GO输出 XML
GO输出 XML
189 0
|
Go Python
go time常用方法
go time常用方法
141 0
|
程序员 Python
python模块与类库(创建、导入与使用逻辑,子模块,if __name__ ==‘main‘: 语句, __name__,__dict__,__doc__,__file__等)
python模块与类库(创建、导入与使用逻辑,子模块,if __name__ ==‘main‘: 语句, __name__,__dict__,__doc__,__file__等)
257 0
python模块与类库(创建、导入与使用逻辑,子模块,if __name__ ==‘main‘: 语句, __name__,__dict__,__doc__,__file__等)