龙空技术网

FPGA学习-如何用Verilog来描述可综合的状态机

阿丘达之平凡 204

前言:

现在同学们对“状态机代码verilog”大体比较看重,朋友们都想要剖析一些“状态机代码verilog”的相关知识。那么小编同时在网上收集了一些有关“状态机代码verilog””的相关知识,希望姐妹们能喜欢,咱们一起来了解一下吧!

【复杂数字系统的构成】

12.1 运算部件和数据流动的控制逻辑

(1)数字逻辑电路的种类

1、组合逻辑;

2、时序逻辑;

(2)数字逻辑电路的构成

1、组合逻辑:由与、或、非门组成的网络。常用的组合电路有:多路器、数据通路开关、加法器、乘法器….

2、时序逻辑: 由多个触发器和多个组合逻辑块组成的网络。

11.2 数据在寄存器中的暂时保存

同步复位

module register8(ena,clk,data,rst,out); input ena,clk,rst;

input [7:0] data;

output [7:0] out;

reg [7:0] out;

always @(posedge clk) if (!rst)

out <= 0; else if (ena)

out <= data;

//虽然没有写 else 项,显然如果 ena 为低电平,即使时钟变化,data 变化, 但 out 仍保持不变

endmodule

异步复位

module register8(ena,clk,data,rst,out); input ena,clk,rst;

input [7:0] data;

output [7:0] out;

reg [7:0] out;

always @(posedge clk or negedge rst) if (!rst)

out <= 0; else if (ena)

out <= data;

//没有 else 项,因此若 ena 为低电平,即使时钟和 data 均变化,out 仍保持不变

endmodule

11.2 数据流动的控制1、生成与时钟精确配合的开关时序是计算逻辑的核心。

2、如果我们能设计出一个状态机,在这个状态机的控制下生成一系列的开关信号,严格按时钟的节拍来开启或关闭数据通道,我们就能用硬件来构成复杂的计算逻辑;

11.3 在VerilogHDL设计中启用同步时序逻辑

同步时序逻辑是指表示状态的寄存器组的值只可能在唯一确定的触发条件发生时刻改变。

而异步时序逻辑是指触发条件由多个控制因素组成,任何一个因素的跳变都可以引起触发。

如果我们强行作出规定,用 Verilog来设计可综合的状态机必须使用同步时序逻辑,有了这个前提条件,实现自动生成电路结构的综合器就有了可能。

11.4 数据接口的同步方法

为了避免由异步时钟域产生的错误,经常使用双口 RAM(DPRAM)、FIFO

缓存的方法完成异步时钟域之间的数据传送。

【同步状态机的原理、结构和设计】

11.1 在VerilogHDL设计中启用同步时序逻辑

由于寄存器传输级(RTL)描述是以时序逻辑抽象所得到的有限状态机为依据的,所以把一个时序逻辑抽象成一个同步有限状态机是设计可综合风格的Verilog HDL 模块的关键。

11.2. Mealy状态机和Moore状态机的不同点

1、Mealy 状态机和 Moore 状态机的不同点:如果时序逻辑的输出不但取决于状态还取决于输入,称它为 Mealy 状态机。时序逻辑电路的输出只取决于当前状态的电路就称为 Moore 状态机。

11.1 如何用Verilog来描述可综合的状态机1、 用可综合 Verilog 模块设计状态机的典型办法

2、用可综合的 Verilog 模块设计用独热码表示状态的状态机

3、用可综合 Verilog 模块设计由输出指定的码表示状态的状态机

4、用可综合 Verilog 模块设计复杂的多输出状态机时常用的方法

11.2 有限状态机设计的一般步骤

11.2.1 逻辑抽象,得出状态转换图

就是把给出的一个实际逻辑关系表示为时序逻辑函数,可以用状态转换表来描述,也可以用状态转换图来描述。这就需要:

• 分析给定的逻辑问题,确定输入变量、输出变量以及电路的状态数。通常是取原因(或条件)作为输入变量,取结果作为输出变量。

• 定义输入、输出逻辑状态的含意,并将电路状态顺序编号。

• 按照要求列出电路的状态转换表或画出状态转换图。这样,就把给定的逻辑问题抽象到一个时序逻辑函数了。

11.2.2 状态化简

如果在状态转换图中出现这样两个状态,它们在相同的输入下转换到同一状态去,并得到一样的输出,则称它们为等价状态。显然等价状态是重复的,可以合并为一个。电路的状态数越少,存储电路也就越简单。状态化简的目的就在于将等价状态尽可能地合并,以得到最简的状态转换图。

11.2.3 状态分配

状态分配又称状态编码。通常有很多编码方法,编码方案选择得当,设计的电路可以简单,反之,选得不好,则设计的电路就会复杂许多。实际设计时,需综合考虑电路复杂度与电路性能之间的折衷,在触发器资源丰富的 FPGA 或 ASIC 设计中采用独热编码(one-hot-coding)既可以使电路性能得到保证又可充分利用其触发器数量多的优势,也可以采取输出编码的状态指定来简化电路结构,并提高状态机的运行速度。

11.2.4 选定触发器的类型并求出状态方程、驱动方程和输出方程。

11.2.5 按照方程得出逻辑图

用 Verilog HDL 来描述有限状态机,可以充分发挥硬件描述语言的抽象建模能力,使用 always 块语句和 case(if)等条件语句及赋值语句即可方便实现。具体的逻辑化简及逻辑电路到触发器映射均可由计算机自动完成,上述设计步骤中的第 2 步及 4、5 步不再需要很多的人为干预, 使电路设计工作得到简化,效率也有很大的提高。

标签: #状态机代码verilog