Verilog状态机使用技巧

  “没有什么难处是通过增加一个状态机不能够解决的,如果不行,那就俩。。”

  在实现某种功能时,若感觉该功能的各种可能状态间的切换太绕了,此时,增加几个状态机往往能使思路变得清晰,功能的实现也就简单明了了。

  造成此种现象的原因是由于原本要实现的功能包含了各个相互联系的小功能,这些功能又是具有相关性的,若要在一个状态机中实现代码就会写的很别扭。

  若是将各个小的功能独立成互不影响的状态机,并通过一个总的状态机来实现这些小功能间的连接,代码就会变得简洁清晰,主要还是帮助写作者理清思路,而不必搞些弯弯绕的东西来自讨苦吃。

原文地址:https://www.cnblogs.com/achangchang/p/11237204.html

时间: 2024-11-11 17:07:42

Verilog状态机使用技巧的相关文章

verilog状态机

如下是官网quartus的帮助文档中的说明. A state machine is a sequential circuit that advances through a number of states. By default, the Quartus II software automatically infers state machines in your Verilog HDL code by finding variables whose functionality can be

Verilog 状态机写法

状态机是时序电路的万能钥匙,所有时序电路都能通过状态机实现.以前写程序时喜欢用一段式状态机,现在流行用三段式.好象三段时也没多大优点. 在CPLD中寄存器较少,个人感觉用一段式也可以,主要是省资源. 时序电路的状态是一个状态变量集合,这些状态变量在任意时刻的值都包含了为确定电路的未来行为而必需考虑的所有历史信息. 状态机采用VerilogHDL语言编码,建议分为三个always段完成. 三段式建模描述FSM的状态机输出时,只需指定case敏感表为次态寄存器, 然后直接在每个次态的case分支中描

verilog 状态机键盘扫描

module key (clk,rst,key_up,led);input clk,rst,key_up;output reg [3:0] led;parameter T10ms=31'd2_000_00;reg clk_state;reg [31:0] cnt;parameter state_init=2'b00,state_click=2'b01,state_check=2'b10;reg [1:0] current_state,next_state;reg [3:0] num_click,

关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)

本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇: 组合逻辑输出类型选择; 语法上的变量交换; ·易忘篇: case/casex/casez语句; 循环语句: 数制和操作符: 数据类型: ·易错: 技巧篇: 1.组合逻辑输出:描述一个纯组合逻辑电路时,尽量不要把输出定义成输出类型,例如描述下面的电路: 1 module mux #(paramet

上升沿检测器的两种状态机实现及直接实现Verilog

p { margin-bottom: 0.1in; direction: ltr; line-height: 120%; text-align: justify } 上升沿检测即是在输入信号由0变1时,输出一个时钟周期的指示信号.整理该题目的主要目的是为了加深对边沿检测印象及更好的理解两种状态机(Moore机及Mealy机)的实现机制的理解. 书中源代码及测试代码见尾部 基于Moore机的设计 基于Moore机的上升沿检测状态机如下图所示,在0状态和1状态之间还有一个边沿状态,在状态0下,输入信

Verilog三段式状态机描述

时序电路的状态是一个状态变量集合,这些状态变量在任意时刻的值都包含了为确定电路的未来行为而必需考虑的所有历史信息. 状态机采用VerilogHDL语言编码,建议分为三个always段完成. 三段式建模描述FSM的状态机输出时,只需指定case敏感表为次态寄存器, 然后直接在每个次态的case分支中描述该状态的输出即可,不用考虑状态转移条件. 三段式描述方法虽然代码结构复杂了一些,但是换来的优势是使FSM做到了同步寄存器输出,消除了组合逻辑输出的不稳定与毛刺的隐患,而且更利于时序路径分组,一般来说

FPGA培训专家 V3学院 FPGA专家 带你学习Verilog语言top_down书写技巧

此文章为原创出自 V3学院 www.v3edu.org,FPGA培训专家 为了提高我们代码的复用率,我们可以将不同的功能的代码分模块书写,然后在顶层连线即可.我们举一个简单的例子,如下程序,我们实现的是LED流水. 我们在led模块中先将系统时钟分频为1HZ的时钟,然后用分频后的时钟控制LED灯的流水,但我的分频和LED灯流水完全不是相同的工程,只是把分频后的时钟作为LED灯的控制时钟.这样我们会发现如果我再次用到流水灯的模块的话需要修改很多地方,那么为了让我们的模块复用率更高.更容易复用,我们

FPGA Prototyping By Verilog Examples第五章 状态机FSM设计

上升沿检测电路之Moore型FSM // Listing 5.3module edge_detect_moore ( input wire clk, reset, input wire level, output reg tick ); // symbolic state declaration localparam [1:0] zero = 2'b00, edg = 2'b01, one = 2'b10; // signal declaration reg [1:0] state_reg, s

<Verilog干啥的>

Verilog是一种硬件描述语言.它是一种描述型工具, 就像素描笔一样,画了一个太阳 .通过这个画,其实我是想告诉大家: 今天太热了! 每次提到Verilog怎么学,总有很多人告诉你, 它是描述型语言,语法简单,你应该去学数字电路设计. 什么叫数字电路 ?  本质肯定是电路, 那电路是干啥用的,肯定是为了实现一个功能的吧. 怎么才能叫实现功能 ?  看下图 : 给电路一定的输入信号,经过我的模块Black_Box,我送出你想要的输出信号.这就实现了功能. (1)  好了,怎么正确的描述这个电路的