Verilog课件 状态机

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

青岛科技大学
2013-8-2
(15)
宋廷强 songtq@
W W W . Q U S T . E D U . C N
Stop: begin //符合条件进入新状态,否则留在原状态 if (A) begin state <= Clear; K2<= 1; end else state <= Stop; end Clear: begin if (!A) begin state <= Idle; K2<=0; K1<=1; end else state <= Clear; end endcase endmodule
青岛科技大学
2013-8-2
(4)
宋廷强 songtq@
状态机的结构
W W W . Q U S T . E D U . C N
• 状态寄存器: • 输出逻辑:
记忆状态机当前所处的状态,n个触发器可以记忆2n个状态
• 产生下一个状态的组合逻辑: 根据输入信号和当前状态,决定下一个状态
由当前状态和输出信号决定当前状态的输出。
青岛科技大学
20 W W . Q U S T . E D U . C N
Start: if (!A) state <= Stop; else state <= Start; Stop: if (A) begin state <= Clear; K2<= 1; end else state <= Stop; Clear: if (!A) begin state <=Idle; K2<=0; K1<=1; end else state <= Clear;
如何用Verilog来描述状态机
W W W . Q U S T . E D U . C N
有限状态机的图形表示
图形表示:状态、转移、条件和逻辑开关
A/K1=0 !Reset /K2=0 K1=0 Idle !Reset /K2=0 K1=0 !Reset /K2=0 K1=0 Stop
Start
!A
下一个状态=F(当前状态,输入信号) 输出信号=G(当前状态,输入信号)
青岛科技大学
2013-8-2
(5)
宋廷强 songtq@
W W W . Q U S T . E D U . C N
状态机可用于产生在时钟跳变沿时刻开关的复杂的控制逻辑, 是数字逻辑的控制核心。通常用case语句设计实现,注意以 下三点:
parameter Idle = 2’b00, Start = 2’b01, Stop = 2’b10, Clear = 2’b11; //定义状态变量参数值 always @(posedge Clock) if (!Reset) begin //定义复位后的初始状态和输出值 state <= Idle; K2<=0; K1<=0; end
定义时钟和复位信号; 定义状态变量和状态寄存器; 用时钟沿触发的always块表示状态转移过程; 在复位信号有效时给状态寄存器赋初始值;
描述状态的转换过程:符合条件,从一个状态到另外一个 状态,否则留在原状态;
验证状态转移的正确性,必须完整和全面。
青岛科技大学 2013-8-2 宋廷强 songtq@
青岛科技大学 2013-8-2 (16) 宋廷强 songtq@
W W W . Q U S T . E D U . C N
青岛科技大学
2013-8-2
(17)
宋廷强 songtq@
Sypify综合
W W W . Q U S T . E D U . C N
青岛科技大学
2013-8-2
assign K2= state[4]; // 把状态变量的最高位用作输出K2 assign K1= state[0]; // 把状态变量的最低位用作输出K1
青岛科技大学
2013-8-2
(26)
宋廷强 songtq@
W W W . Q U S T . E D U . C N
parameter //-------output coded state assignment --//-------K2_i_j_n_K1 – Idle = 5'b0_0_0_0_0, Start = 5'b0_0_0_1_0, Stop = 5'b0_0_1_0_0, StopToClear = 5'b1_1_0_0_0, Clear = 5'b0_1_0_1_0, ClearToIdle = 5'b0_0_1_1_1;
青岛科技大学 2013-8-2 (14) 宋廷强 songtq@
W W W . Q U S T . E D U . C N
else case (state) Idle: begin if (A) begin state <= Start; K1<=0; end else state <= Idle; end Start: begin if (!A) state <= Stop; else state <= Start; end
时钟同步的状态机结构mealy状态机下一状态的逻辑状态寄存器时钟信号clkclk输入输入输入输出输出输出输出当前状态激励信号青岛科技大学宋廷强songtq163com102017619下一状状态寄存器时钟信号clkclkclk输入输入输入输出当前状态激励信号moor状态机下一个状态f当前状态输入信号输出信号g当前状态
状态翻转时刻。
前状态下次态
当前状态下输出
青岛科技大学
2013-8-2
(6)
宋廷强 songtq@
状态机的种类
W W W . Q U S T . E D U . C N
隐式状态机FSM
• 不需要声明状态寄存器
• 仿真效率高 • 只适合于线性的状态改变 • 大多数综合工具不能处理
显式FSM:
输入
状态 下一状态 激励信号 寄存器 的逻辑 F
clk 输入
当前状态
输出逻辑 G
输出
时钟信号clk
图 时钟同步的状态机结构 (Mealy 状态机)
青岛科技大学 2013-8-2 (9) 宋廷强 songtq@
W W W . Q U S T . E D U . C N
• Moor 状态机
青岛科技大学
2013-8-2
(3)
宋廷强 songtq@
什么是有限状态机?
W W W . Q U S T . E D U . C N
有限状态机是由寄存器组和组合逻辑构成的硬件时序电 路; 其状态(即由寄存器组的1和0的组合状态所构成的有限 个状态)只能在同一时钟跳变沿的 情况下才能从一个状 态转向另一个状态; 究竟转向哪一状态不但取决于各个输入值还取决于当前 状态。 状态机可用于产生在时钟跳变沿时刻开关的复杂的控制 逻辑,是数字逻辑的控制核心。
• 利于结构化 • 易于处理缺省条 件 • 能处理复杂的状 态改变
青岛科技大学 2013-8-2 • 所有综合工具都 (7) 宋廷强 songtq@
W W W . Q U S T . E D U . C N
按照输出逻辑又可以分为:
• Mealy状态机:时序逻辑的输出不仅取决于当前状态,还 取决于输入。
W W W . Q U S T . E D U . C N
硬件描述语言
青岛科技大学
2013-8-2
(1)
宋廷强 songtq@
同步状态机的 原理、结构和设计
2013-8-2
2
主要内容
W W W . Q U S T . E D U . C N
状态机的结构 Mealy状态机和Moore状态机的不同点 如何用Verilog来描述可综合的状态机
(13)
用可综合的Verilog模块设计状态机的典型方法
W W W . Q U S T . E D U . C N
module fsm (Clock, Reset, A, K2, K1); input Clock, Reset, A; //定义时钟、复位和输入信号 output K2, K1; //定义输出控制信号的端口 reg K2, K1; //定义输出控制信号的寄存器 reg [1:0] state ; //定义状态寄存器
青岛科技大学
2013-8-2
(21)
宋廷强 songtq@
W W W . Q U S T . E D U . C N
always @(posedge clock) if (!Reset) begin state <= Idle; K2<=0; K1<=0; end else case (state) Idle: if (A) begin state <= Start; K1<=0; end else state <= Idle;
带流水线输出的 Mealy 状态机
下一个状态 = F(当前状态,输入信号); 输出信号 = G(当前状态,输入信号);
输入 下一状态 激励信号 状态 寄存器 的逻辑 F
clk 输入
当前状态
输出 逻辑 G
输出流 水线寄 存器 clk 输入
输出
时钟信号clk
图3 带流水线输出的Mealy 状态机 青岛科技大学 2013-8-2 (11) 宋廷强 songtq@
(!Reset |!A )/ K2=0 K1=1
Clear
A/K2=1
图2.4.4
青岛科技大学 2013-8-2 (12)
状态转移图
宋廷强 songtq@
W W W . Q U S T . E D U . C N
有限状态机的Verilog描述
定义模块名和输入输出端口;
定义输入、输出变量或寄存器;
(18)
宋廷强 songtq@
Quartus综合
W W W . Q U S T . E D U . C N
青岛科技大学
2013-8-2
(19)
宋廷强 songtq@
W W W . Q U S T . E D U . C N
青岛科技大学
2013-8-2
(20)
宋廷强 songtq@
• Moore状态机:时序逻辑的输出只取决于当前状态。
青岛科技大学
2013-8-2
(8)
宋廷强 songtq@
Mealy状态机和Moore状态机
W W W . Q U S T . E D U . C N
• Mealy 状态机
下一个状态 = F(当前状态,输入信号); 输出信号 = G(当前状态,输入信号);
青岛科技大学
2013-8-2
(23)
宋廷强 songtq@
W W W . Q U S T . E D U . C N
default: state <= Idle; endcase endmodule
[例2]与[例1]的主要不同点是状态编码,[例2]采用了
独热编码,而[例1]则采用Gray码,究竟采用哪一种
下一个状态 = F(当前状态,输入信号) 输出信号 = G(当前状态);
输入 下一状 态的逻 辑 F 状态 激励信号 寄存器
clk 输入
输出逻辑 当前状态 G
输出
时钟信号clk
图 时钟同步的状态机结构 (Moor状态机)
青岛科技大学 2013-8-2 (10) 宋廷强 songtq@
W W W . Q U S T . E D U . C N
编码好要看具体情况而定。 FPGA设计建议采用独热编码。
青岛科技大学
2013-8-2
(24)
宋廷强 songtq@
由输出制定的码表示状态的状态机
W W W . Q U S T . E D U . C N
直接把状态码定义为输出,也就是把状态码的指定与状态机控制的输出 联系起来,把状态的变化直接用作输出,这样做可以提高输出信号的开 关速度并节省电路器件。 这种设计方法常用在高速状态机中,在设计高速状态机时可以采用该方 法。例中state[3] 和state[0]分别表示前面两个例子中的输出K2和K1。
青岛科技大学
2013-8-2
(25)
宋廷强 songtq@
W W W . Q U S T . E D U . C N
module fsm (Clock, Reset, A, K2, K1, state); input Clock, Reset, A; output K2, K1; output [4:0] state; reg [4:0] state ;
用可综合的Verilog模块设计,用独热码表示状态的状态机
W W W . Q U S T . E D U . C N
我们还可以用另一个 Verilog HDL模型来表示同一个有限状态, 见下例。(用可综合的Verilog模块设计用独热码表示状态的状态机) module fsm (Clock, Reset, A, K2, K1); input Clock, Reset, A; output K2, K1; reg K2, K1; reg [3:0] state ; parameter Idle = 4’b1000, Start = 4’b0100, Stop = 4’b0010, Clear = 4’b0001;
相关文档
最新文档