我是靠谱客的博主 缥缈学姐,最近开发中收集的这篇文章主要介绍一段式状态机,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

源码:module status(
input clk,
input rst_n,
input [9:0] sort,
input in,

output [12:0] number_i
);
reg[1:0] st;
reg [12:0] number;
always @(posedge clk or negedge rst_n) begin
if (~rst_n) begin
st <= 2’b00;
number<=3;
end
else
begin
case(st)
2’b00: if(in0)
st<=2’b00;
else
st<=2’b01;
2’b01: if(in
0)
begin
st<=2’b10;
number<=number+1’b1;
end
else
st=2’b01;
2’b10: if(in==0)
st<=2’b00;
else
st<=2’b01;

default:st=2'b00;
endcase	

end
end

assign number_i=number;
endmodule
激励:
`timescale 1ns/1ns
module status_tb();
reg clk;
reg rst_n;
reg [9:0] sort;
wire in;
assign in=sort[9];
initial
begin
rst_n=0;
#100 rst_n=1;
#10000 $stop;
end

initial
begin
clk=0;
end

always #10 clk<=~clk;

initial
begin
sort=10’b1011_0100_01;
end

always@(posedge clk)
begin
sort<={sort[8:0],sort[9]};
end

status status_out(
.clk(clk),
.rst_n(rst_n),
.sort(sort),
.in(in),
.number_i()

);

endmodule

检测出现10的次数,用到的是一段式状态机和一个计数器。
思想:我们将10的检测分为三个状态。
空状态:复位时进入到空状态,如果满足条件,则进入到下个状态,如果不满足,则还在空状态。
S0状态:如果满足S0状态,则进入到最后一个状态,并且计数加一。否则,还在本状态。
最后一个状态:判断下一个数为几,如果为1,则进入到S0,否则,进入到空状态。

最后

以上就是缥缈学姐为你收集整理的一段式状态机的全部内容,希望文章能够帮你解决一段式状态机所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部