题解 | #输入序列连续的序列检测#

输入序列连续的序列检测

https://www.nowcoder.com/practice/d65c2204fae944d2a6d9a3b32aa37b39

`timescale 1ns/1ns
module sequence_detect(
	input clk,
	input rst_n,
	input a,
	output reg match
	);

parameter IDLE  =  9'b000000001;
parameter S1    =  9'b000000010;
parameter S2    =  9'b000000100;
parameter S3    =  9'b000001000;
parameter S4    =  9'b000010000;
parameter S5    =  9'b000100000;
parameter S6    =  9'b001000000;
parameter S7    =  9'b010000000;
parameter S8    =  9'b100000000;

reg [8:0]       curr_state;
reg [8:0]       next_state;

//fsm
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        curr_state <= IDLE;
    end
    else
        curr_state <= next_state;
end

always @( *) begin
    case (curr_state)
        IDLE: next_state = (~a)? S1 : IDLE;
        S1:next_state = (a)? S2 : S1;
        S2:next_state = (a)? S3 : S1;
        S3:next_state = (a)? S4 : S1;
        S4:next_state = (~a)? S5 : IDLE;
        S5:next_state = (~a)? S6 : S2;
        S6:next_state = (~a)? S7 : S2;
        S7:next_state = (a)? S8 : S1;
        S8:next_state = (a)? S1 : IDLE;
        default : next_state = curr_state;
    endcase
end

always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        match <= 1'b0;
    end
    else
        if (curr_state == S8) begin
            match <= 1'b1;
        end
        else
            match <= 1'b0;
end

endmodule

全部评论

相关推荐

天降大厂offer:想从事前端就放前端的技术栈,然后项目描述,还有项目做了什么内容,使用了什么技术解决了什么问题优化了什么性能。然后头像可以不要,在读也可以不要,还有bg的话就不要放课程,写哪个学校什么本科,还有绩点排名(如果高的话),然后就是技术栈写好一点,接下来就是项目(有实习就写实习,没有就到项目),项目放两个好一点的,自己包装一下,然后有参加什么竞赛放两个就好了,接下来就是靠你自己了,毕竟211还是很难容易找的,不像我们学院本
点赞 评论 收藏
分享
已注销:bro不如吃顿疯狂星期四
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务