当前位置: 首页 > news >正文

乌鲁木齐市网站制作公司/厦门百度推广开户

乌鲁木齐市网站制作公司,厦门百度推广开户,上海做网站hlanggroup,九江做网站基于Verilog表达的FSM状态机 1 FSM1.1 Intro1.2 Why FSM?1.3 How to do 在这里聚焦基于Verilog的三段式状态机编程; 1 FSM 1.1 Intro 状态机是一种代码实现功能的范式;一切皆可状态机; 状态机编程四要素:– 1.状态State&#…

基于Verilog表达的FSM状态机

  • 1 FSM
    • 1.1 Intro
    • 1.2 Why FSM?
    • 1.3 How to do

在这里聚焦基于Verilog的三段式状态机编程;

1 FSM

1.1 Intro

状态机是一种代码实现功能的范式;一切皆可状态机;
状态机编程四要素:–
1.状态State:
2.转态跳转Condition Jump:
3.行为Action:
4.次态–>现态Transform:
基本范式:systemverilog是Verilog的超集,使用可综合语句即可综合成电路;使用三段式转态机对应的综合电路:


这样看更直观:



module enum_fsm (input clk, reset, input int data[3:0], output int o);
enum int unsigned { S0 = 0, S1 = 2, S2 = 4, S3 = 8 } state, next_state;
always_comb begin : next_state_logicnext_state = S0;case(state)S0:if(xxx) next_state = S1;else if(xxx)next_state = S2;else 	next_state = S0;	S1: next_state = S2;S2: next_state = S3;S3: next_state = S3;endcase
end
always_comb begincase(state)S0: o = data[3];S1: o = data[2];S2: o = data[1];S3: o = data[0];endcase
end
always_ff@(posedge clk or negedge reset) beginif(~reset)state <= S0;elsestate <= next_state;
end
endmodule

1.2 Why FSM?

无论是设计复杂的系统还是处理简单的逻辑流程,状态机都能提供清晰健壮、可维护且易于扩展的代码实现;
状态机思想提供了一种结构化、模块化和可扩展的思维方式进行功能逻辑实现;

  • 逻辑清晰:状态机思想通过将系统行为划分为不同的状态和状态之间的切换,使得系统的逻辑更加清晰。可以帮助明确知道系统当前处于哪个状态,以及在不同状态下应该执行哪些动作;----有助于逻辑思考和代码可读性;
  • 易于维护:状态机将系统的行为模块化,每个状态及转换都是相对独立的;这帮助解耦,使得修改和拓展该模块功能时,可以专注于特定的状态和转换,而不用再考虑整个系统的复杂性了;
  • 可拓展性:状态机思想使得添加新的状态或转换变得相对简单。开发者只需要定义新的状态、转换条件和动作,然后将其集成到现有的状态机中即可。
  • 错误处理:状态机通常包含对错误状态的处理机制。当系统遇到异常情况或无效输入时,状态机可以将其引导到错误处理状态,执行相应的错误恢复操作。
  • 逻辑调试:状态机将系统的行为划分为有限数量的状态和转换,这使得在调试和测试阶段更容易追踪和定位问题。开发者可以通过模拟不同的状态转换和输入条件来测试系统的行为,从而确保系统的正确性和稳定性。
    最后一句话:状态机思想为开发者提供了一种结构化、模块化和可扩展的方法来处理系统的复杂行为。通过采用状态机思想,开发者可以设计出更加清晰、健壮和易于维护的软件系统。

1.3 How to do

在状态机编程思想中:正确的顺序应该是先有状态转换图,而后才指导程序,程序应该是根据设计好的状态图写出来的。
即使是流水线也是状态机表达的一种特殊形式

  • 状态描述图:首先需要描述确定下来,自己根据功能逻辑框图进行细化出来,先按照流水线的顺畅转态转移路线;
    这个就是不要怕,自己先拍板定义状态及转态跳转关系;大胆的画出来;

根据review过的状态机,指导开始写代码,在写的过程中不断加深理解,再优化,不下手是永远不行的;

学会一种好的编程框架或者一种编程思想----会受用终生!比如模块化编程、框架式编程、状态机编程等,都是一种好的框架。

【Refer】

  1. https://blog.csdn.net/u012915636/article/details/136963178
  2. https://cloud.tencent.com/developer/article/2215987
  3. https://blog.51cto.com/oliverHuang/6503930
  4. https://blog.csdn.net/weixin_43070186/article/details/82085463

相关文章:

基于Verilog表达的FSM状态机

基于Verilog表达的FSM状态机 1 FSM1.1 Intro1.2 Why FSM?1.3 How to do 在这里聚焦基于Verilog的三段式状态机编程&#xff1b; 1 FSM 1.1 Intro 状态机是一种代码实现功能的范式&#xff1b;一切皆可状态机&#xff1b; 状态机编程四要素&#xff1a;– 1.状态State&#…...

给一家银行做的数据中台系统架构方案书(DAMM)招投标用,虽然有内定潜规则,但是方案都是要的,不一定就是价格低就能中标,毕竟是上百万以上的单子

目录 概述需求分析系统架构DAMM设计思路数据治理数据安全实施计划维护和运营 1. 概述 1.1 项目背景 在数字化转型的浪潮中&#xff0c;银行业面临着越来越多的数据挑战与机遇。为了更好地利用数据资产&#xff0c;提升服务质量和运营效率&#xff0c;建立一个高效、灵活的数…...

【设计模式深度剖析】【6】【行为型】【中介者模式】

&#x1f448;️上一篇:迭代器模式 | 下一篇:观察者模式&#x1f449;️ 设计模式-专栏&#x1f448;️ 文章目录 中介者模式定义英文原文直译如何理解&#xff1f; 中介者模式的角色1. 中介者&#xff08;Mediator&#xff09;2. 具体中介者&#xff08;ConcreteMediato…...

金额转换但是接收对象类型未知时,金额转换公共方法囊括当对象为String\Integer\Number三种类型的转换方法

/** * deccription 金额转换方法 * param Object * value * return * return BigDecimal */ public BigDecimal getBigDecimal(Object value) { BigDecimal reValue new BigDecimal(0); if (value ! null) { …...

Commons-Collections篇-CC2链分析

前言 3.1-3.2.1版本中TransformingComparator并没有去实现Serializable接口&#xff0c;是不可以被序列化的&#xff0c;所以我们重新搭建一个4.0的具有漏洞的CC环境 CC2链主要使用的和CC4一样&#xff0c;但是区别在于CC2避免了使用Transformer数组&#xff0c;没有使用Insta…...

LeetCode 48.旋转图像

1.做题要求: 2.从此题我们可以看出规律为第几行要变为倒数第几列&#xff0c;所以我们最好先把二维数组存入一维数组中&#xff0c;然后先从最后一列遍历&#xff0c;把一维数组里的元素&#xff0c;依次等于遍历的元素即可: void rotate(int** matrix, int matrixSize, int*…...

Navicat导入json文件(json文件数据导入到MySQL表中)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

避雷!又6本期刊被On Hold!ELSEVIER旗下影响因子高达10+SSCI上榜

【SciencePub学术】继《INFORMATION SCIENCES》被On Hold 之后&#xff0c;又新增3本SCIE期刊、3本SSCI期刊被列入On Hold名单。其中包含ELSEVIER旗下影响因子高达10的《RESOURCES POLICY》。 官方现在对期刊质量的管控越来越严格了&#xff0c;被标记为On Hold后的期刊中&…...

CSS 列表样式(ul)全面解析

CSS 列表样式是前端开发中常用的一种技术&#xff0c;用于定义无序列表&#xff08;ul&#xff09;的外观和行为。无序列表在网页布局和内容展示中扮演着重要角色&#xff0c;从导航菜单到内容清单&#xff0c;无所不在。通过CSS可以对无序列表的各个方面进行自定义&#xff0c…...

Python 库PySpark,一个超级强大的数据处理引擎

目录 01初识 PySpark 为什么选择 PySpark? 安装 PySpark 配置 PySpark 02基本操作 创建 RDD 基本 RDD 操作 03DataFrame 和 Spark SQL 创建 DataFrame 基本 DataFrame 操作 使用 Spark SQL 04机器学习与流处理 …...

UE4_材质_雨滴涟漪效果ripple effect_ben教程

学习笔记&#xff0c;不喜勿喷&#xff01;侵权立删&#xff0c;祝愿生活越来越好&#xff01; 雨水落下时会产生这些非常漂亮的同心环波纹&#xff0c;我们要做的第一件事是创建一个单个的圆环遮罩动画&#xff0c;我们希望环在开始的时候在中心很小&#xff0c;然后放大&…...

mac免费的ntfs软件哪个好 MAC读取NTFS硬盘格式

对于苹果用户来说&#xff0c;Mac电脑和移动硬盘已经成为日常工作中不可缺少的一部分&#xff0c;但有时我发现Mac打开移动硬盘只能读取无法写入&#xff0c;这是由于所连接的移动硬盘为NTFS格式。我们可以通过对硬盘格式化为Mac正常读写格式&#xff0c;或使用数据读写软件对N…...

轻兔推荐 —— who.cx

via&#xff1a;轻兔推荐 - https://app.lighttools.net/ 简介 who.cx是一个域名whois查询工具&#xff0c;界面简洁&#xff0c;可查询域名基本信息&#xff0c;注册续费价格&#xff0c;支持查看一级域名解析记录 - 对于已注册域名可以查看注册商注册时间、 过期时间等基础信…...

建筑幕墙甲级设计资质:申请条件与评分标准

建筑幕墙甲级设计资质的申请条件与评分标准可以清晰归纳如下&#xff1a; 申请条件 一、企业基本情况 独立企业法人资格&#xff1a;企业需具有独立企业法人资格。注册资本&#xff1a;注册资本不少于300万元人民币。 二、技术人员条件 主要技术负责人或总工程师&#xff…...

easy-es Map类型字段序列化问题:Unexpected character (‘n‘ (code 110)):

Data IndexName("demo") public class EasyEsDemo {IndexIdprivate String id;private String name;private int age;// 这个Map字段因为NameFilter过滤器&#xff0c;导致fastjson序列化后为{null:"value"}这种形式&#xff0c;insert报错private Map<…...

[Vue3:组件通信)子组件props接收和watch监听,emit发送父组件 (添加修改设置成绩,添加、删除选课记录)

文章目录 一&#xff1a;系统功能&#xff1a;设置成绩&#xff08;添加或修改&#xff09;交互逻辑&#xff1a;涉及页面 Page02.vue&#xff0c;ModalEdit.vue主页面Page.vue注入子页面&#xff0c;使用子页面标签属性主页面对子页面做通信&#xff0c;子页面ModalEdit接收参…...

【网络协议栈】IGMP

IGMP IGMP&#xff08;Internet Group Management Protocol&#xff09;是互联网组管理协议的简称&#xff0c;属于TCP/IP协议族中负责IPv4组播成员管理的协议。以下是关于IGMP的详细介绍&#xff1a; 1 定义与作用 定义&#xff1a;IGMP是多播组成员的一种通信协议&#xf…...

Python机器学习完整流程:从数据清洗到推理落地

目录 一、引言 二、数据清洗 数据加载与初步探索 缺失值处理 异常值处理 特征编码与转换 数据集划分 三、模型训练 四、模型文件生成 五、模型部署与推理落地 六、总结 一、引言 在当今数据驱动的时代&#xff0c;机器学习已成为解决复杂问题的有力工具。而…...

App上架和推广前的准备

众所周知&#xff0c;App推广的第一步是上架各大应用下载市场&#xff0c;然后才是其他推广渠道。所以本文主要分两部分&#xff0c;第一部分主要介绍的是上架各大应用市场方面的准备&#xff0c;第二部分主要介绍的是其他渠道推广方面的准备。 一、App上架前的准备 1.1 上架…...

一季度直播6000场,同比增长60%,遥望科技透露重要信息

6月17日&#xff0c;经由深圳证券交易所许可&#xff0c;遥望科技&#xff08;股票代码&#xff1a;002291&#xff09;正式对《年报问询函》进行公开回复&#xff0c;就经营的多个维度做出解释和回应。 在回复中&#xff0c;遥望科技预测2024年毛利率为14.4%&#xff0c;相比…...

电商API接口是什么意思?有什么作用?

电商API接口是电子商务领域中一种技术解决方案&#xff0c;它允许不同的软件系统之间进行交互和数据交换。 在电商场景下&#xff0c;电商API接口可以实现的功能非常丰富&#xff0c;例如&#xff1a; 商品管理&#xff1a;获取商品列表、商品详情、搜索商品、上下架商品等&a…...

Python爬虫实战案例之——MySql数据入库

Hello大家好&#xff0c;我是你们的南枫学长&#xff0c;咱们今天来学——爬虫之MySql数据入库。 话不多说&#xff0c;导入咱们的老朋友&#xff1a; Pymysql就是我们Python里面的mysql库&#xff0c;主要功能就是用来连接MySql数据库&#xff0c;那么下载还是一样的操作去进…...

游戏中插入音效

一、背景音乐 准备&#xff1a;素材音乐 方法&#xff1a; 1、方法1&#xff1a; (1) 将背景音乐 bgAudio 拖放到Hierarchy面板 (2) 选中 bgAudio&#xff0c;勾选开始运行就播放、循环播放。调节音量&#xff08;volume) 2、方法2&#xff1a; (1) Create Empty&#x…...

Redis缓存设计之常见问题及解决方案

背景&#xff1a;缓存的常见问题及对应的解决方案进行了整理&#xff0c;给大家分享一下。 1.缓存穿透 缓存穿透是指查询一个根本不存在的数据&#xff0c; 缓存层和存储层都不会命中&#xff0c; 通常出于容错的考虑&#xff0c; 如果从存储 层查不到数据则不写入缓存层。 缓…...

简单的线程池示例

线程池可以有效地管理和重用线程资源&#xff0c;避免频繁创建和销毁线程带来的开销。以下是一个简单的线程池示例。 cpp #include <iostream> #include <vector> #include <thread> #include <queue> #include <mutex> #include <condition…...

IT入门知识第三部分《软件开发》(3/10)

目录 IT入门知识大纲第三部分《软件开发》 1. 软件开发生命周期&#xff08;SDLC&#xff09; 1.1 需求分析 1.2 软件设计 1.3 程序编码 1.4 软件测试 1.5 项目部署 1.6 运行维护 2. 软件开发方法论 2.1 瀑布模型 2.2 敏捷开发 2.2.1 Scrum 2.2.2 Kanban 2.3 Dev…...

卫星通讯助力船舶可视化监控:EasyCVR视频汇聚系统新应用

一、背景 随着科技的不断进步和社会治安的日益严峻&#xff0c;视频监控系统已经成为维护公共安全和提升管理效率的重要工具。传统的视频监控主要依赖于有线传输&#xff0c;但受到地域限制、布线成本高等因素的影响&#xff0c;其应用范围和效果受到一定限制。而卫星通讯传输…...

gcn+tcn+transformer入侵检测

gcn gcn_out self.gcn(A_hat, D_hat, X) 的公式实际上是图卷积网络&#xff08;GCN&#xff09;层的核心操作。具体来说&#xff0c;这一步的计算基于图卷积的基本公式&#xff1a; H ( l 1 ) σ ( D ^ − 1 / 2 A ^ D ^ − 1 / 2 H ( l ) W ( l ) ) H^{(l1)} \sigma\left…...

【Python】 了解二分类:机器学习中的基础任务

我已经从你的 全世界路过 像一颗流星 划过命运 的天空 很多话忍住了 不能说出口 珍藏在 我的心中 只留下一些回忆 &#x1f3b5; 牛奶咖啡《从你的全世界路过》 在机器学习和数据科学领域&#xff0c;分类问题是最常见的任务之一。分类问题可以分为多类分…...

搭建PHP开发环境:Linux篇

目录 一、引言 二、环境准备 三、安装Web服务器&#xff08;Apache&#xff09; Ubuntu/Debian系统&#xff1a; CentOS/Red Hat系统&#xff1a; 四、安装PHP解释器 Ubuntu/Debian系统&#xff1a; CentOS/Red Hat系统&#xff1a; 五、配置Apache以支持PHP Ubuntu/…...