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

相关文章

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景