HDLBits (138) — 序列識別
本題鏈接:
https://hdlbits.01xz.net/wiki/fsm_hdlc
Synchronous HDLC framing涉及對數(shù)據(jù)的連續(xù)比特流進行解碼,以尋找指示幀(數(shù)據(jù)包)開始和結束的比特模式。 看到 6 個連續(xù)的 1(即 01111110)是指示幀邊界的“標志”。 為避免數(shù)據(jù)流意外包含“標志”,發(fā)送方在每 5 個連續(xù)的 1 后插入一個零,接收方必須檢測并丟棄該 0。 如果有 7 個或更多連續(xù)的 1,我們還需要發(fā)出錯誤信號。
創(chuàng)建一個有限狀態(tài)機來識別這三個序列:
?0111110:需要舍棄信號位(disc)
?01111110:標記幀的開始/結束(flag)
?01111111...:錯誤(7 個或超過?1 秒)(err)
?當 FSM 被重置時,它應該處于和之前輸入為 0 一樣的狀態(tài),。
以下是說明所需操作的示例序列
舍棄?0111110:

標志 01111110:

重置和錯誤 01111111...:

實現(xiàn)這個狀態(tài)機

題目
提示:
使用具有大約 10 個狀態(tài)的 Moore 型狀態(tài)機。
提示:


答案

有限狀態(tài)機(Finite-State Machine,F(xiàn)SM),簡稱狀態(tài)機,是表示有限個狀態(tài)以及在這些狀態(tài)之間的轉移和動作等行為的數(shù)學模型。狀態(tài)機不僅是一種電路的描述工具,而且也是一種思想方法,在電路設計的系統(tǒng)級和 RTL 級有著廣泛的應用。
Verilog 中狀態(tài)機主要用于同步時序邏輯的設計,能夠在有限個狀態(tài)之間按一定要求和規(guī)律切換時序電路的狀態(tài)。狀態(tài)的切換方向不但取決于各個輸入值,還取決于當前所在狀態(tài)。狀態(tài)機可分為 2 類:Moore?狀態(tài)機和 Mealy 狀態(tài)機。
高級數(shù)據(jù)鏈路控制(High-Level Data Link Control或簡稱HDLC),是一個在同步網上傳輸數(shù)據(jù)、面向比特的協(xié)議的數(shù)據(jù)鏈路層協(xié)議,它是由國際標準化組織制訂的。
國際電信聯(lián)盟已把HDLC規(guī)程引入到X.25協(xié)議棧。HDLC是修改自IBM的SDLC,后者作為數(shù)據(jù)鏈路層協(xié)議用于IBM自己開發(fā)的系統(tǒng)網絡架構(SNA)?,F(xiàn)在HDLC作為同步點對點協(xié)議(PPP)的基礎已經被用于很多服務中來接入廣域網,通常最常見的是因特網。
HDLC的幀格式規(guī)定以01111110(十六進制7E)的位組合作為它的起始和結束的標志,這種位組合也被稱為幀界定符。
在HDLC的幀格式中,在起始標志后的是地址字段和控制字段,然后是長度在0到5000八位位組(octet)的數(shù)據(jù)字段和幀檢驗序列字段(FSC),最后是作為結束標志的幀界定符。一點需要指出的是,當暫時沒有信息傳送時,幀界定符被連續(xù)地發(fā)送直到下一次數(shù)據(jù)發(fā)送為止,產生如下圖的連續(xù)比特流:
01111110011111100111111001111110
______ ?______ ?______ ?______?
_ ? ? ?__ ? ? ?__ ? ? ?__ ? ? ?_
參考內容:
6.3 Verilog 狀態(tài)機?| 菜鳥教程:
https://www.runoob.com/w3cnote/verilog-fsm.html
高級數(shù)據(jù)鏈路控制 | 維基百科:
https://zh.m.wikipedia.org/wiki/高級數(shù)據(jù)鏈路控制