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

3分钟快速通关Quarts的Verilog状态机硬件描述语言编程文章介绍了如何使用固定模板快速学习状态机编程 重点在于画状态图和应用代码模板

大家好,欢迎来到IT知识分享网。

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

1.画状态图。

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

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

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

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

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

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

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) //时钟上升沿行动 begin current_state <= next_state; //进入下一个状态 end /状态机第二段///(用于根据输入和目前状态获得输出和下一个状态) always@(current_state,A) begin case(current_state) //case语句进行寻找现状态的具体值 S0: begin Z<=0; //穆尔型不受输入影响,放在if外 if(A==1) begin //如果为米利型则把Z放在if内,根据状态图赋值 next_state<=S1; //根据状态图可修改 end else begin next_state<=S0; //根据状态图可修改 end end S1: //以下内容修改方式同上 begin Z<=1; if(A==1) begin next_state<=S3; end else begin next_state<=S0; end end S2: begin Z<=0; if(A==1) begin next_state<=S3; end else begin next_state<=S0; end end S3: begin Z<=0; if(A==1) begin next_state<=S2; end else begin next_state<=S0; end end endcase end endmodule 

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

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

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

3.用状态机检查。

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

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

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

4.总结。

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

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/131184.html

(0)
上一篇 2025-08-09 19:45
下一篇 2025-08-09 20:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信