概述
源码: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(in0)
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,否则,进入到空状态。
最后
以上就是缥缈学姐为你收集整理的一段式状态机的全部内容,希望文章能够帮你解决一段式状态机所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复