MATLAB / Simulink HDL 快速入门

MATLAB / Simulink HDL 快速入门

我们将使用实例讲解MATLAB / Simulink HDL 使用入门。

fda95b1e7a06ae175a5ff19ea8ef6bf8.jpeg

开始这个项目,首先需要创建一个包含 Stateflow 的新 Simulink 。只需单击画布中的任意位置并开始输入 Stateflow。

728e81d8643c361c2ec9c65e0e4ed80b.png

此时应该能在画布上看到 Stateflow 图标。双击图标进行编辑。

979892bd3419e293259701c6173b8f2f.png

进入图表编辑器后,可以添加状态以及状态之间的转换。开始,我们创建两种状态并将它们命名为“idle”和“LED”。它们之间的转换还没有任何条件。

4851dd2314d9d3cd6ee93cf46e94f6eb.png

要添加状态转换条件,可以双击转换并输入所需的条件。

765254984319cbdc1593095de1407ed9.png

当然,状态机可以具有 Mealey 和 Moore 输出,这些输出作为当前状态 (Moore) 或当前状态和输入 (Mealey) 的函数出现。在本例中,将 LED 输出声明为 Moore 输出,并在每个状态下声明。

edeb1ee07cbb64fe0016a85eae44a982.png

最终的结果如下所示。

4a44b8545cf91c9b3ba8e1d812506927.png

使用模型浏览器,我们可以定义状态机的输入和输出。对于输入,我们将它们保留为与 Simulink 相同的类型,但需要定义输出。由于 LED 需要三位,因此我们使用类型 fixdt(0,3,0)。这意味着向量是三位宽、无符号的,并且没有数字的小数元素。

5910ce1cc2ebe07ee3f53e16983faa9d.png

此外,在模型资源管理器中选中“初始化时执行(输入)图表”选项。

9977cebafda8432abbb5d97d4299b62b.png

导航到图表上方的画布。这里我们需要添加块的 IO,我们还将添加延迟。在画布中,开始输入输入或输出以获取所需的端口。

aff463ac4b6b7a33d2bf79e711787200.png

还可以通过双击输入和输出来命名端口,将其设置为正确的类型。

62457b46a6d478c67a17fdec84242f54.png

将 sw_in 设置为与之前声明的输出类型相同的 fixdt(0,3,0)。我们使用延迟来添加寄存器。要添加额外的延迟,只需在画布中键入即可。

251f1dc949726debf87d7feede34a345.png

要更改延迟的长度,双击延迟并将其更改为延迟 1。

e14ae30bbc374cff8ec64ccd4ba3a5eb.png

下图显示了完整的图表。

6f09b0fe1712ebde863c478ca093457e.png

现在我们可以将其生成 RTL,但首先我们将为它创建一个测试平台。选择画布上的所有元素,右键单击它,然后选择从选择创建子系统。

91c9a238dae0317104b51a5c2711541d.png

添加阶跃函数和常数,设置子系统模块中使用的模块类型,并确保将离散采样的采样时间设置为 -1。

e109d5bc552fa0a108b9688dffa38899.png

右键单击感兴趣的信号并选择开始记录所选信号。

74a348d1118801d05257526e2699d6fd.png

打开模型资源管理器并将模型设置为具有固定步长的计时器的离散时间。

3f706577a27eb5dd8cf7c9258307ef7f.png

运行模拟并打开数据检查器。应该能够看到 SW_ENB 被置位,并且 LED 输出在下一个时钟后变高。

52f27345dfa8ee4df95230fac6600749.png

现在我们可以创建 HDL 并将其导出到 Vivado 中使用。我们可以通过右键单击子系统并选择为子系统生成 HDL 来完成此操作。

0daefc6ef7a06ee9dfaa6ab5f4362690.png

如果要更改任何生成的 HDL 代码格式(即删除时钟启用),需要从 HDL 代码生成选项卡中选择全局设置选项。

28d7178552bce7192ff2d4b3deb2ac45.png

生成代码后,将在生成代码的 MATLAB 窗口中看到一条消息。

80a3339bbed4f6d6970bb7125a09daae.png

然后可以将该 HDL 导入到 Vivado 项目中。生成的代码本身实际上是可读的,并且取决于我们对 Simulink 图的注释程度。例如,我可以命名状态图,这将反映在case语句名称中。

生成三个 VHDL 文件:包含声明的包、实现状态机的实际源代码以及顶级文件。

在 Vivado 中进行综合,最终设计需要三个触发器和两个 LUT。

14ae1f1203bd30a420ce55a12e25d334.png

当然,这是一个简单的示例,但能够学习流程,以便可以将它用于更复杂的应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/123197.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用xlwings获取excel表的行和列以及指定单元格的值

import xlwings as xw app xw.App(visibleFalse) # 隐藏Excel wb app.books.open(文档1.xlsx) # 打开工作簿sht wb.sheets[Sheet1] # 实例化工作表1#获取行数和列数 rows_countsht.range(1, 1).expand().shape[0] cols_countsht.range(1, 1).expand().shape[1] print(row…

Unity 利用UGUI制作圆形进度条

在Unity中使用Image和Text组件就可以制作简单的进度条。 1、首先准备好一张环状的PNG图,如下图。 2、把该图导入Unity中并转换成精灵。 3、在场景中创建Image和Text组件,并把上图中的精灵拖到Image的Source Image中,其中Image组件中的Image …

数据采集中的基本参数

分辨率(resolution) 分度数量越多则分辨率越高,测量精度也越高 区间(range) 模数转换所能处理模拟信号电平的极限 应尽量使输入与此区间匹配,物尽其用 信号极限幅度集合 所测信号的最大值和最小值 应与输入信号的最大值和最小值相接近 LSB 最低有效…

[云原生案例2.2 ] Kubernetes的部署安装 【单master集群架构 ---- (二进制安装部署)】网络插件部分

文章目录 1. Kubernetes的网络类别2. Kubernetes的接口类型3. CNI网络插件 ---- Flannel的介绍及部署3.1 简介3.2 flannel的三种模式3.3 flannel的UDP模式工作原理3.4 flannel的VXLAN模式工作原理3.5 Flannel CNI 网络插件部署3.5.1 上传flannel镜像文件和插件包到node节点3.5.…

springboot内容协商

1.基于请求头 Accept: application/json Accept: application/xml Accept: application/xxx 自定义数据 发的请求头的数据类型 期望返回的数据类型 2.通过请求参数 例如 /football?formatjson 一般respondbody 默认以json方式进行返回 如何请求同一个接口,可以…

软件测试Triangle练习题

软件测试Triangle练习题 待测类如下: package net.mooctest; public class Triangle {protected long lborderA = 0;protected long lborderB = 0;

vue中实现千位分隔符

vue中实现千位分隔符有两种,一种是某一个字段转换,一种是表格table中的整列字段转换 比如将3236634.12,经过转换后变为 3,236,634.12 1. 某一个字段转换 写js方法: export function numberExchange(value){if (!value) return…

Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍

Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍 文章目录 Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍一、前置原则二、一切皆组合2.1 一切皆组合2.2 垂直组合2.2.1 第一种:通过嵌入接口构建接口2.2.2 第二种:通过嵌入接…

WordPress主题 JustNews主题6.0.1(亲测首页不空白)

介绍 资源入口 需要用WordPress5.X版本 JustNews介绍:一款专为博客、自媒体、资讯类的网站设计开发的WordPress主题,自v3.0版开始支持自主研发的前端用户中心,不仅支持注册、登录、账户设置、个人中心等常用页面的添加,还可以上传…

Go进阶之rpc和grpc

文章目录 Go环境安装1)windows2)linux go语言编码规范1.1 包名:package1.2 ⽂件名1.3 结构体命名1.4 接⼝命名1.5 变量命名1.6 常量命名2.1 包注释2.2 结构(接⼝)注释2.3 函数(⽅法)注释2.4 代码…

商人宝:收银系统一般多少钱

推荐方案基于来自各大电商平台的用户评价数据,为您推荐以下收银系统数据: 1.硬件方面 小票打印机、扫码枪、收银盒等硬件终端设备都是不可或缺的。一般小票打印机、扫码枪、收银盒,价格在2-500元之间,性能稳定、使用寿命长、使用…

2023最新版JavaSE教程——第4天:流程控制语句之循环语句

目录 一、循环语句二、for循环2.1 基本语法2.2 应用举例2.3 练习 三、while循环3.1 基本语法3.2 应用举例3.3 练习 四、do-while循环4.1 基本语法4.2 应用举例4.3 练习4.4 对比三种循环结构4.5 "无限"循环4.5.1 基本语法4.5.2 应用举例 4.6 嵌套循环(或多重循环)4.6.…

MarkdownPad2, CSDN及有道云笔记对数学公式的支持

MarkdownPad2, CSDN及有道云笔记对数学公式的支持 MarkdownPad2的安装 下载并安装MrakdownPad2软件,下载地址安装awesomium_v1.6.6_sdk_win, 下载地址安装支持公式编辑的插件,注意,在MarkdownPad2的 Tools > Options > Ad…

你知道Online DDL吗?

什么是Online DDL? 在线DDL(Online Data Definition Language)是指在数据库运行状态下执行数据定义语言(DDL)操作,例如创建、修改或删除表结构、索引等操作,而不会造成数据库的长时间锁定或无法…

【Linux】进程终止

进程退出场景 代码运行完毕,结果正确代码运行完毕,结果不正确代码异常终止 可以用return 的不同的返回值数字,表征不同的出错原因退出码,所以进程运行正不正常我们可以查看退出码来判断; 如果进程异常,退…

Flink -- 并行度

1、并行度: 对于一个Flink任务是有Source、Transformation和Sink等任务组成,一个任务由多个并行实例来执行,一个任务的并行实例数目被称为该任务的并行度。 2、TaskManager和Solt Flink是一个分布式流处理框架,它基于TaskManager…

Kotlin基础数据类型和运算符

原文链接 Kotlin Types and Operators Kotlin是新一代的基于JVM的静态多范式编程语言,功能强大,语法简洁,前面已经做过Kotlin的基本的介绍,今天就来深入的学习一下它的数据类型和运算操作符。 数据类型 与大部分语言不同的是&am…

数据结构:单链表

文章目录 🍉前言🍉基本概念🍉链表的分类🍌单链表节点的结构🍌创建节点🍌打印链表🍌插入和删除🥝尾插🥝头插🥝尾删🥝头删🥝指定位置之前…

【Python大数据笔记_day05_Hive基础操作】

一.SQL,Hive和MapReduce的关系 用户在hive上编写sql语句,hive把sql语句转化为MapReduce程序去执行 二.Hive架构映射流程 用户接口: 包括CLI、JDBC/ODBC、WebGUI,CLI(command line interface)为shell命令行;Hive中的Thrift服务器允许外部客户端…

设计模式JAVA

1 创建型 如何合理的创建对象? 1.1 单例模式 字面意思就是只能创建一个对象实例时使用。 例如,Windows中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等…