3分钟快速通关Quarts的Verilog状态机硬件描述语言编程

本文主要是介绍3分钟快速通关Quarts的Verilog状态机硬件描述语言编程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        状态机的学习是学数电和Verilog的同学避不开的一大难点。而状态机的学习是有一套固定模板的,在本博客中将会简单讲解如何快速入门状态机编程。(所有内容均依赖于Quarts,如有不兼容,适当修改,思路不变。)

1.画状态图。

        状态机编程的优点就是只需要状态图便可以完成题目要求。因此,第一步无疑是画出程序的状态图。

        通过电路图画状态图分为4个步骤:1.判断输出的类型;2.写出激励方方程,状态转换方程和输出方程;3.画状态表;4.画状态图。以上内容在数电教程,csdn和网络上都有明确详细的教程。在本博客中就不一一赘述了。

        如果不是状态图,而是一个具体案例,也可以画一个类状态图,以达到快速替换代码实现状态机编程的目的,由此可见状态图的重要性。

        状态图内容的大致如下图:

 (本图与后文代码无具体关联)。

2.套用代码模板。

module Temp1(clk,A,Z);
input clk,A;	//时钟和输入
output reg Z;	//输出
parameter S0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11;	//四个状态
//状态机第一段///(用于根据输入进入下一个状态)
reg [1:0] current_state, next_state;	//根据需要可更改位数
always@(posedge clk)	//时钟上升沿行动
begincurrent_state <= next_state;	//进入下一个状态
end
/状态机第二段///(用于根据输入和目前状态获得输出和下一个状态)
always@(current_state,A)
begincase(current_state)	//case语句进行寻找现状态的具体值S0:beginZ<=0;			//穆尔型不受输入影响,放在if外if(A==1)begin			//如果为米利型则把Z放在if内,根据状态图赋值next_state<=S1;	//根据状态图可修改endelsebeginnext_state<=S0;	//根据状态图可修改endendS1:						//以下内容修改方式同上beginZ<=1;if(A==1)beginnext_state<=S3;endelsebeginnext_state<=S0;endendS2:beginZ<=0;if(A==1)beginnext_state<=S3;endelsebeginnext_state<=S0;			endendS3:beginZ<=0;if(A==1)beginnext_state<=S2;endelsebeginnext_state<=S0;endendendcase
end
endmodule

         代码的讲解已经放在注释里了,这里就不再重复了。

       考虑到快速解决问题,本代码模块没有使用复位。如果需要使用复位,可以参考网络和csdn上的其它博主的内容。就当练习一下吧。

        根据状态图可以直接把代码中的部分内容替换。

3.用状态机检查。

        点击Quarts中的Tools栏,选择Netlist Viewers,选择最下面的state machine viewers即可打开状态机栏。

 大致内容如上,可以通过状态机检查内容是否有误。

4.总结。

        状态机的硬件描述语言编程是有一套简单的万用模板的,学会后上手极其简单。

        弘扬开源精神,从大一做起~

这篇关于3分钟快速通关Quarts的Verilog状态机硬件描述语言编程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/395062

相关文章

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

详解Java中三种状态机实现方式来优雅消灭 if-else 嵌套

《详解Java中三种状态机实现方式来优雅消灭if-else嵌套》这篇文章主要为大家详细介绍了Java中三种状态机实现方式从而优雅消灭if-else嵌套,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录1. 前言2. 复现传统if-else实现的业务场景问题3. 用状态机模式改造3.1 定义状态接口3

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

Mybatis-Plus 3.5.12 分页拦截器消失的问题及快速解决方法

《Mybatis-Plus3.5.12分页拦截器消失的问题及快速解决方法》作为Java开发者,我们都爱用Mybatis-Plus简化CRUD操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询... 目录一、问题场景:分页拦截器突然 “失踪”二、问题根源:依赖拆分惹的祸三、解决办法:添加扩展依赖四、分页

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析