HDLBits (135) — 串口接收器
本題鏈接:
https://hdlbits.01xz.net/wiki/Fsm_serial
在許多(較舊的)串行通信協(xié)議中,每個數(shù)據(jù)字節(jié)都會和一個起始位和一個停止位一起發(fā)送以幫助接收器從比特流中劃定固定字節(jié)。 一種常見的方案是使用 1 個起始位 (0)、8 個數(shù)據(jù)位和 1 個停止位 (1)。 當(dāng)沒有傳輸任何內(nèi)容(空閑)時,該線路也處于邏輯 1。
設(shè)計一個有限狀態(tài)機,當(dāng)給定比特流時,它將識別何時正確接收到字節(jié)。 它需要識別起始位,然后等待所有 8 個數(shù)據(jù)位,最后驗證停止位是否正確。 如果停止位未按預(yù)期出現(xiàn),則有限狀態(tài)機必須等待找到停止位后再嘗試接收下一個字節(jié)。
一些時序圖
無錯誤:

未找到停止位。 則把第一個字節(jié)丟棄:


題目

答案

有限狀態(tài)機(Finite-State Machine,F(xiàn)SM),簡稱狀態(tài)機,是表示有限個狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動作等行為的數(shù)學(xué)模型。狀態(tài)機不僅是一種電路的描述工具,而且也是一種思想方法,在電路設(shè)計的系統(tǒng)級和 RTL 級有著廣泛的應(yīng)用。
Verilog 中狀態(tài)機主要用于同步時序邏輯的設(shè)計,能夠在有限個狀態(tài)之間按一定要求和規(guī)律切換時序電路的狀態(tài)。狀態(tài)的切換方向不但取決于各個輸入值,還取決于當(dāng)前所在狀態(tài)。狀態(tài)機可分為 2 類:Moore?狀態(tài)機和 Mealy 狀態(tài)機。
在遠(yuǎn)程通信和計算機科學(xué)中,串行通信(英語:Serial communication)是指在計算機總線或其他數(shù)據(jù)通道上,每次傳輸一個比特數(shù)據(jù),并連續(xù)進(jìn)行以上單次過程的通信方式。與之對應(yīng)的是并行通信,它在串行端口上通過一次同時傳輸若干比特數(shù)據(jù)的方式進(jìn)行通信。

每個字符表示為一個幀,以邏輯低電平為開始比特,然后是數(shù)據(jù)比特,可選的奇偶校驗比特,最后是一個或多個停止比特(邏輯高電平)。
接收器在每個時鐘脈沖時測試接收到的信號狀態(tài)是否為開始比特。如果開始比特的低電平持續(xù)傳輸1個比特所需時間的一半以上,則認(rèn)為開始了一個數(shù)據(jù)幀的傳輸;否則,則認(rèn)為是毛刺脈沖并忽略。到了下一個比特時間后,線路狀態(tài)被采樣并送入移位寄存器。
簡化的UART在開始比特下降沿開始重新同步時間,然后在每個數(shù)據(jù)比特的中心時刻采樣。
參考內(nèi)容:
6.3 Verilog 狀態(tài)機?| 菜鳥教程:
https://www.runoob.com/w3cnote/verilog-fsm.html
通用異步收發(fā)傳輸器?| 維基百科:
https://zh.wikipedia.org/wiki/UART
串行通信?| 維基百科:
https://zh.wikipedia.org/wiki/串行通信