题解 | #序列发生器#

此为状态机写法,三段式状态机

module sequence_generator(

    input clk,

    input rst_n,

    output reg data

    );

    reg [2:0] state,nstate;

    parameter s0=3'd0,s1=3'd1,s2=3'd2,s3=3'd3,s4=3'd4,s5=3'd5;//定义6个状态

    always @(posedge clk or negedge rst_n)

    begin

    if(!rst_n)

    state<=s0;

    else

    state<=nstate;

    end

    

    always @(*)//状态转移

    begin

    if(!rst_n)

    nstate<=s0;

    else

    begin

    case(state)//因为是序列发生器,所以状态直接转移不需要条件

    s0:nstate<=s1;

    s1:nstate<=s2;

    s2:nstate<=s3;

    s3:nstate<=s4;

    s4:nstate<=s5;

    s5:nstate<=s0;

    default:state<=s0;

    endcase

    end

    end

    

always @(posedge clk or negedge rst_n)//数据输出

begin

if(!rst_n)

data<=0;

else

begin

if(nstate==s0)

data<=0;

else if(nstate==s1)

data<=0;

else if(nstate==s2)

data<=1;

else if(nstate==s3)

data<=0;

else if(nstate==s4)

data<=1;

else if(nstate==s5)

data<=1;

end

end

    endmodule

全部评论

相关推荐

牛客嘻嘻子:建议可以把mentor布置的任务和AI沟通一下
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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