使用Verilog设计:一个简单的状态机设计——序列检测器(可实现重复性检测)
1,一个简单的状态机设计:可重复性序列检测器
序列检测器的逻辑功能:
序列检测是将一个指定的序列从数字码流中识别出来。本项目要检测的序列是:10010。
设X是“数字码流的输入”,Z是“检出标记输出”;高电平是“实现指定序列”;低电平是“没有发现指定序列”。码流如下表所示。
由上述码流可知:该序列检测器可实现重复性检测,由此可得如下状态转移图,如图1所示:
2,可重复性状态机序列检测实现
结合表1码流序列和图1状态转换,可编写如下RTL代码
2.1,RTL设计代码实现
//
// 可检测重复的序列
module seqdet(
input i_clk,
input x,
input i_rst,
output z,
output reg [7:0] state
);
// 独热码来做参数
parameter IDLE = 8'b0000_0001; // 1, 1
parameter A = 8'b0000_0010; // 2, 2
parameter B = 8'b0000_0100; // 3, 4
parameter C = 8'b0000_1000; // 4, 8
parameter D = 8'b0001_0000; // 5, 16
parameter E = 8'b0010_0000; // 6, 32
parameter F = 8'b0100_0000;