HDLBits (136) — 串口接收器和數(shù)據(jù)路徑
本題鏈接:
https://hdlbits.01xz.net/wiki/Fsm_serialdata
另請(qǐng)參閱:Serial receiver
現(xiàn)在你有了一個(gè)有限狀態(tài)機(jī),可以識(shí)別何時(shí)在串行比特流中正確接收到字節(jié),添加一個(gè)數(shù)據(jù)路徑來輸出正確接收到的數(shù)據(jù)字節(jié)。? out_byte 需要在 done 為 1 時(shí)有效,否則無關(guān)緊要。
請(qǐng)注意,串行協(xié)議首先發(fā)送最低有效位。
一些時(shí)序圖
無錯(cuò)誤:


題目
提示:
串行比特流需要一次只移一位,然后并行讀出。

答案

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

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