Verilog刷题HDLBits——Fsm hdlc

Verilog刷题HDLBits——Fsm hdlc

题目描述

Synchronous HDLC framing involves decoding a continuous bit stream of data to look for bit patterns that indicate the beginning and end of frames (packets). Seeing exactly 6 consecutive 1s (i.e., 01111110) is a “flag” that indicate frame boundaries. To avoid the data stream from accidentally containing “flags”, the sender inserts a zero after every 5 consecutive 1s which the receiver must detect and discard. We also need to signal an error if there are 7 or more consecutive 1s.

Create a finite state machine to recognize these three sequences:

  • 0111110: Signal a bit needs to be discarded (disc).
  • 01111110: Flag the beginning/end of a frame (flag).
  • 01111111…: Error (7 or more 1s) (err).

When the FSM is reset, it should be in a state that behaves as though the previous input were 0.

Here are some example sequences that illustrate the desired operation.
在这里插入图片描述
Implement this state machine.
在这里插入图片描述

代码

module top_module(
    input clk,
    input reset,    // Synchronous reset
    input in,
    output disc,
    output flag,
    output err);
    
    parameter none=0,one=1,two=2,three=3,four=4,five=5,six=6,discard=7,fg=8,error=9;
    reg[3:0] state,next_state;
    
    always@(*)
        case(state)
            none:	next_state=in?one:none;
            one:	next_state=in?two:none;
            two:	next_state=in?three:none;
            three:	next_state=in?four:none;
            four:	next_state=in?five:none;
            five:	next_state=in?six:discard;
            six:	next_state=in?error:fg;
            discard:next_state=in?one:none;
            fg:		next_state=in?one:none;
            error:	next_state=in?error:none;
        endcase
    
    always@(posedge clk)
        if(reset)
            state<=none;
    	else
            state<=next_state;
    
    assign disc = (state==discard);
    assign flag = (state==fg);
    assign err = (state==error);

endmodule

结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值