module seqdet(x,z,clk,rst_n);
input clk,rst_n;
input x;
output z;
reg z;
reg [2:0] pstate,nstate;
parameter s1=3'd0,
s2=3'd1,
s3=3'd2,
s4=3'd3,
s5=3'd4,
s6=3'd5;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
pstate<=s1;
else
pstate<=nstate;
end
always @(pstate or x)
begin
case(pstate)
s1:
nstate = x ? s2 : s1;
s2:
nstate = x ? s2 : s3;
s3:
nstate = x ? s2 : s4;
s4:
nstate = x ? s5 : s1;
s5:
nstate = x ? s2 : s6;
s6:
nstate = x ? s2 : s4;
default:
nstate = s1;
endcase
end
always @(pstate or x or rst_n)
begin
if(!rst_n==1)
z=1'b0;
else if(pstate==s5 && x==0)
z=1'b1;
else
z=1'b0;
end
endmodule
verilog——对串行输入的数据流进行检测。只要发现10010序列,就立即输出高电平。
最新推荐文章于 2024-02-05 09:43:50 发布
本文详细介绍了一个使用Verilog实现的状态机设计实例,包括输入输出声明、状态定义、状态转移逻辑及输出逻辑。通过具体代码解析,展示了如何利用状态机进行序列检测。
5780

被折叠的 条评论
为什么被折叠?



