HDLbit参考Exams/2013 q2bfsm

这篇博客详细介绍了如何利用寄存器存储和状态转换来实现101序列验证,并通过计数器检测2位序列中的1。通过案例展示了在时序逻辑设计中,如何结合状态机和计数器技术来控制输出信号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Exams/2013 q2bfsm
思路:
在进行101验证时使用寄存器存储10且此时为1即为101序列,可切换状态

在进行2bit中是否存在1时可使用计数(因只计数2拍,故只用了1bit记0 1 )当计数到1时判断上一时刻(y_reg)内和当前时刻是否有1 ,若有则到输出1状态,若无则到输出0状态。

一个简单的随手画的波形图,供参考
在这里插入图片描述

module top_module (
    input clk,
    input resetn,    // active-low synchronous reset
    input x,
    input y,
    output f,
    output g
); 

    localparam [2:0]A = 0,B = 1, C = 2 , D = 3,E = 4,F = 5;
    
    reg [2:0]CS , NS;
    always@(posedge clk)begin
        if(!resetn)
            CS <= A;
        else
            CS <= NS; 
    end
    
    always@(*)begin
        case(CS)
            A	:	NS = B;
            B	:	NS = C;
            C	:	NS = (x_reg[1:0] ==2'b10 && x == 1)?D:C;
            D	:	NS = y_cnt?((y_reg ||y)?E:F):D;
            E	:	NS = E;
            F	:	NS = F;
        endcase
    end
    
    reg [1:0]x_reg;
    always@(posedge clk)begin
        if(CS != C)
            x_reg <= 2'b0;
        else
            x_reg <= {x_reg[0],x};
    end
    reg y_reg;
    reg y_cnt;
    always@(posedge clk)begin
        if(CS!= D)begin
            y_reg <= 0;
            y_cnt <= 0;
            end
        else begin
            y_reg <= y;
            y_cnt <= 1;
            end
    end
    
    assign f= (CS == B);
    assign g = (CS == D)||(CS  == E);
endmodule
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值