verilog状态机检测110序列,急救!!!!!!!!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog状态机检测110序列,急救!!!!!!!!!相关的知识,希望对你有一定的参考价值。

参考技术A 状态机,把状态图做出来就简单了。110序列检测器,状态转换方法很多。最简单的是串行检测,来一个检测一个。

设置初始状态为 S0, 来1的时候进入状态S1,表示检测到第一个1,来0的时候保持S0。

S1状态下,来1的时候进S2,表示检测到前两个1,来0的时候返回S0

S2状态下,来1的时候进S2,这时共有3个1,所以还是进入S2,表示检测到两个1,来0的时候进入S3,表示检测到110。 S3状态下输出1,表示检测到序列。

S3状态下,来1时进入S1,表示检测到一个1,来0时进入S0初始状态。

代码:

module Detec_110(clk,reset,data_in,bingo)

parameter S0=4'b0001;
parameter S1=4'b0010;
parameter S2=4'b0100;
parameter S3=4'b1000;

input clk,reset;
input data_in;
output bingo;

wire bingo;
reg state;

always@(posedge clk or negedge reset)
if (!reset)
state<=S0;
else case(state)
S0: if(data_in==1'b1) state<=S1; else state<=S0;
S1: if(data_in==1'b1) state<=S2; else state<=S0;
S2: if(data_in==1'b1) state<=S2; else state<=S3;
S3: if(data_in==1'b1) state<=S1; else state<=S0;
default: state<=S0;
endcase

assign bingo=(state==S3)?1'b1:1'b0;

endmodule

verilog状态机中的一个状态执行时间问题

我在三段式状态机的verilog中又加入了一个always块;仿真后发现一个状态的执行之间变成了2个clk(原来是1个clk)。这是什么原因?求大虾指导!

你在always中的触发条件是clk吧,然后在设计中有字段currentstate <= nextstate;吧,这样相当于插入一个触发器,故要再延迟一个clk。 参考技术A 听不懂 看看你代码

以上是关于verilog状态机检测110序列,急救!!!!!!!!!的主要内容,如果未能解决你的问题,请参考以下文章

Verilog -- 并行2bit输入序列检测器

Verilog -- 并行2bit输入序列检测器

序列检测器(两种设计方法和四种检测模式|verilog代码|Testbench|仿真结果)

verilog语言实现0001 1011 1101 0000 1010 0010序列检测,并功能仿真

Verilog -- 序列发生器的设计

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