FPGA学习记录
题目二:设计序列检测器
题目描述
当检测到序列“1101”时,输出结果为1,否则输出为0。
其中系统输入时钟clk为100MHz;
低电平复位有效,信号为rst_n;
输入数据信号为data_in;
输出结果信号为data_out.
(提示:可以采用条件语句,也可以采用移位寄存器来实现)
设计思路
d表示正在检测的1位数据,y表示当前是否检测到序列
-
IDLE
从IDLE空闲状态开始,若检测到当前数据是1时,符合1101第一位为1的特征,前往下一状态 -
S1
在S1状态时,表明上一状态已经检测到第一个1了。
若在S1状态里检测到当前数据是1时,符合1101第一二位为11的特征,前往下一状态。
若在S1状态里检测到当前数据是0时,表明已检测到10,不符合1101第一二位为11的特征,返回IDLE状态。 -
S2
在S2状态时,表明前述状态已经检测到11了。
若在S2状态里检测到当前数据是0时,符合1101第一二三位为110的特征,前往下一状态。
若在S2状态里检测到当前数据是1时,表明已检测到111,不符合1101第一二三位为110的特征,但这时符合检测到11这一条件,停留在S2状态。 -
S3
在S3状态时,表明前述状态已经检测到110了。
若在S3状态里检测到当前数据是1时,符合1101第一二三四位为1101的特征,前往下一状态。
若在S3状态里检测到当前数据是0时,表明已检测到1100,不符合1101。此时因为当前状态没有1,无法前往S1,所以前往S5过渡状态,等待检测到1。 -
S4
在S4状态时,表明前述状态已经检测到1101了。输出y=1。
若在S4状态里检测到当前数据是1时,表明检测到一个1,前往S1状态。
若在S4状态里检测到当前数据是0时,此时因为当前状态没有1,无法前往S1,所以前往S5过渡状态,等待检测到1。 -
S5
S5为过渡状态,在该状态下等待检测到1后,前往S1状态。
如果没有检测到1,停留在S5状态。
模块代码
module Sequential_Detector(clk,rst_n,d,data_out);
input clk,rst_n,d;
output [3:0] data_out;
reg