數字系統實驗:串口通信A

A級任務:本次實驗採用狀態圖形成VHDL文件方法
之前的BCD級任務已經完成,得到的如下所示:

名稱 針腳號
輸入數據D7-D0 28-24,9-7
控制信號RXF 144
控制信號TXE 4
控制信號RD 143
控制信號WR 3
傳送AA 在這裏插入圖片描述在這裏插入圖片描述
傳送55 在這裏插入圖片描述在這裏插入圖片描述
雙向傳輸 在這裏插入圖片描述在這裏插入圖片描述

接下來是實現CRC算法,A級實驗實際上就是要求通過電腦輸入一個數值,然後經過實驗板處理之後,返回該數據的CRC循環冗餘檢驗碼,比方說輸入A5應該返回05。這裏我取CRC算法中的p=110101,R=5
A5=10100101,在實驗板中加上5個0後爲1010010100000,然後該數對P=110101進行除法操作(異或操作),直到剩下一個五位數,具體如下:
1010010100000
110101
0111000
110101
00110110
110101
0000110000
110101
000101
最終得到的校驗碼爲00101,因爲要補齊八位,所以在首三位添加0,最終得到的輸出數據爲00000101,即十六進制的05。
再取輸入數據爲BF,即10111111,p=110101,R=5,補齊之後得到的處理數據爲1011111100000,進行異或操作:
1011111100000
110101
0110101
110101
000000100000
110101
010101
最終得到的校驗碼爲10101,補齊八位後得到的輸出數據 爲00010101,即十六進制的15,。結果如下;

A5-05 BF-15
在這裏插入圖片描述 在這裏插入圖片描述

結果正確,證明實驗方法可行性爲100%,結果正確且完整,表示實驗成功

實驗方法:
這次實驗採用狀態圖輸入方法,由於狀態圖無法直接進行數據集合的輸入輸出(繁瑣且不能賦值),所以採用狀態圖生成狀態控制信號VHDL文件,另建數據控制VHDL文件,由此生成兩個模塊實現實驗的主要控制功能,狀態控制模塊的狀態圖書上已經有了一個基本的構架,另外可以從書上的VHDL中找到每個狀態應該進行什麼操作。因爲有六個狀態,所以我在狀態圖中另外設計了3個控制信號t1~t3,用來表示當前是什麼狀態,以此來作爲數據控制模塊的控制信號。最後生成的狀態圖如圖所示:
在這裏插入圖片描述
另外在數據控制模塊中,由於這個實驗的電路是時序的是,所以我將數據輸入,數據處理,數據輸出都分別拿了出來,作爲三個process進程,通過這種方法來實現時間上的串行進行,最終實驗結果證明我這種實驗方法是正確的。
不過最後我發現這兩個模塊可以進行修改,合成一個大的VHDL模塊,通過這樣可以簡化畫圖,更加簡潔明瞭,所以最後我就合併爲了一個模塊實現:
在這裏插入圖片描述

實驗總結
這次我做這個實驗的主要特色就是快,在4月22日下午老師公佈實驗題目之後,我用了一個下午的時間實現了B,C,D級的實驗操作,仿真結果和實驗板實驗結果完全正確,然後在4月22日晚上1點寫出來了A級實驗的初始版本,在4月23日中午(上午滿課)在工訓中心完成了A級實驗的仿真驗證和實驗板下載驗證,四個實驗總共用時不超過11個小時,進度之快實在超乎我自己的想象。
實際上這次實驗也是有很多坑的,比方說針腳的確定,因爲板子上雖然有通信模塊(本次實驗)的針腳命名,但是命名名稱和書上的代碼並不是完全相同,導致我在做C,D級實驗的時候就因爲一個控制信號沒有連接到芯片的控制信號輸出導致不能連續的向板子傳送數據,後來經過仿真才發現這個問題;
另外,對於狀態圖的使用方法也是一個難點,我所使用的這種狀態控制模塊+數據控制模塊是我自己想出來的,雖然本身並不是很難,但能否想到這一點決定這這個實驗能否正常進行,當然我個人也不認爲只有我這一種方法,還有拓展的空間。
A級實驗的坑主要就在於狀態如何表示和進程需要分開這兩點。我和三班的幾位大佬一起做的A級實驗,而就是因爲他們將狀態表示僅通過兩個控制信號,並且沒有將數據輸入、數據處理、數據輸出這三個進程分開,所以我在他們之前完成了這個實驗。實際上這兩點並不難想,畢竟六個狀態,雖然有些狀態或許可以合併,但合併之後的控制信號的狀態就不好控制了;而如果將數據輸入、數據處理、數據輸出放到同一個進程裏,並行串行就是一個難以控制的問題。
另外,我還在思考能否對實驗進行更深層次的拓展,實現兩個實驗板之間的無線通信,更近一步或許可以實現兩個電腦之間的無線通信。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章