HDLBits (138) — 序列识别
本题链接:
https://hdlbits.01xz.net/wiki/fsm_hdlc
Synchronous HDLC framing涉及对数据的连续比特流进行解码,以寻找指示帧(数据包)开始和结束的比特模式。 看到 6 个连续的 1(即 01111110)是指示帧边界的“标志”。 为避免数据流意外包含“标志”,发送方在每 5 个连续的 1 后插入一个零,接收方必须检测并丢弃该 0。 如果有 7 个或更多连续的 1,我们还需要发出错误信号。
创建一个有限状态机来识别这三个序列:
0111110:需要舍弃信号位(disc)
01111110:标记帧的开始/结束(flag)
01111111...:错误(7 个或超过 1 秒)(err)
当 FSM 被重置时,它应该处于和之前输入为 0 一样的状态,。
以下是说明所需操作的示例序列
舍弃 0111110:

标志 01111110:

重置和错误 01111111...:

实现这个状态机

题目
提示:
使用具有大约 10 个状态的 Moore 型状态机。
提示:


答案

有限状态机(Finite-State Machine,FSM),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。状态机不仅是一种电路的描述工具,而且也是一种思想方法,在电路设计的系统级和 RTL 级有着广泛的应用。
Verilog 中状态机主要用于同步时序逻辑的设计,能够在有限个状态之间按一定要求和规律切换时序电路的状态。状态的切换方向不但取决于各个输入值,还取决于当前所在状态。状态机可分为 2 类:Moore 状态机和 Mealy 状态机。
高级数据链路控制(High-Level Data Link Control或简称HDLC),是一个在同步网上传输数据、面向比特的协议的数据链路层协议,它是由国际标准化组织制订的。
国际电信联盟已把HDLC规程引入到X.25协议栈。HDLC是修改自IBM的SDLC,后者作为数据链路层协议用于IBM自己开发的系统网络架构(SNA)。现在HDLC作为同步点对点协议(PPP)的基础已经被用于很多服务中来接入广域网,通常最常见的是因特网。
HDLC的帧格式规定以01111110(十六进制7E)的位组合作为它的起始和结束的标志,这种位组合也被称为帧界定符。
在HDLC的帧格式中,在起始标志后的是地址字段和控制字段,然后是长度在0到5000八位位组(octet)的数据字段和帧检验序列字段(FSC),最后是作为结束标志的帧界定符。一点需要指出的是,当暂时没有信息传送时,帧界定符被连续地发送直到下一次数据发送为止,产生如下图的连续比特流:
01111110011111100111111001111110
______ ______ ______ ______
_ __ __ __ _
参考内容:
6.3 Verilog 状态机 | 菜鸟教程:
https://www.runoob.com/w3cnote/verilog-fsm.html
高级数据链路控制 | 维基百科:
https://zh.m.wikipedia.org/wiki/高级数据链路控制