




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、基于VHDL的異步串行通信電路設(shè)計1 引 言 隨著電子技術(shù)的發(fā)展,現(xiàn)場可編程門陣列 FPGA和復(fù)雜可編程邏輯器件CPLD的出現(xiàn),使得電子系統(tǒng)的設(shè)計者利用與器件相應(yīng)的電子CAD軟件,在實驗室里就可以設(shè)計自己的專用集成電路ASIC器 件。這種可編程ASIC不僅使設(shè)計的產(chǎn)品達到小型化、集成化和高可靠性,而且器件具有用戶可編程特性,大大縮短了設(shè)計周期,減少了設(shè)計費用,降低了設(shè)計風(fēng) 險。目前數(shù)字系統(tǒng)的設(shè)計可以直接面向用戶需求,根據(jù)系統(tǒng)的行為和功能要求,自上至下地逐層完成相應(yīng)的描述綜合優(yōu)化仿真與驗證,直到生成器件,實現(xiàn)電 子設(shè)計自動化。其中電子設(shè)計自動化(EDA)的關(guān)鍵技術(shù)之一就是可以用硬件描述語言(HD
2、L)來描述硬件電路。 VHDL是用來描述從抽象到具體級別硬件的工業(yè)標(biāo)準(zhǔn)語言,它是由美國國防部在80年代開發(fā)的HDL,現(xiàn)在已成為IEEE承認(rèn)的標(biāo)準(zhǔn)硬件描述語言。VHDL 支持硬件的設(shè)計、驗證、綜合和測試,以及硬件設(shè)計數(shù)據(jù)的交換、維護、修改和硬件的實現(xiàn),具有描述能力強、生命周期長、支持大規(guī)模設(shè)計的分解和已有設(shè)計的再 利用等優(yōu)點。利用VHDL這些優(yōu)點和先進的EDA工具,根據(jù)具體的實際要求,我們可以自己來設(shè)計串口異步通信電路。 廣告插播信息維庫最新熱賣芯片: EL1501CM EL7457CU LT1640ALCS8 LTC1439CG MAX241EEAI AD9203ARUZ QMV72DP5 I
3、RF7459 MAX706CPA PBL3770A 2串口異步通信的幀格式和波特率 2.1 串行異步通信的幀格式 在串行異步通信中,數(shù)據(jù)位是以字符為傳送單位,數(shù)據(jù)位的前、后要有起始位、停止位,另外可以在停止位的前面加上一個比特位(bit)的校驗位。其 幀格式如圖1所示。 起始位是一個邏輯0,總是加在每一幀的開始,為的是提醒數(shù)據(jù)接收設(shè)備接收數(shù)據(jù),在接收數(shù)據(jù)位過程中又被分離出去。數(shù)據(jù)位根據(jù)串行通信協(xié)議, 允許傳輸?shù)淖址L度可以為5、6、7或8位。通常數(shù)據(jù)位為7位或8位,如果要傳輸非ASCII數(shù)據(jù)(假如使用擴展字符設(shè)置的文本或者二進制數(shù)據(jù)),數(shù)據(jù)位 格式就需要采用8位。數(shù)據(jù)位被傳輸時從一個字符的最低
4、位數(shù)據(jù)開始,最高位數(shù)據(jù)在最后。例如字母C在ASCII表中是十進制67,二進制的 01000011,那么傳輸?shù)膶⑹?1000010。校驗位是為了驗證傳輸?shù)臄?shù)據(jù)是否被正確接收,常見的校驗方法是奇、偶校驗。另外校驗位也可以為0校驗 或者1校驗,即不管數(shù)據(jù)位中1的個數(shù)是多少,校驗位始終為0或者1,如果在傳輸?shù)倪^程中校驗位發(fā)生了變化,這就提示出現(xiàn)了某類錯誤。不過,在傳輸數(shù)據(jù)的時 候,也可以不用校驗位。停止位,為邏輯1,總在每一幀的末尾,可以是1位、1.5位或者2位。最常用的是1位,超過1位的停止位通常出現(xiàn)在這樣的場合:在 處理下一個即將發(fā)送來的字符之前接收設(shè)備要求附加時間。 2.2 串行異步通信的波特率
5、 串行口每秒發(fā)送或接收數(shù)據(jù)的位數(shù)為波特率。若發(fā)送或接收一位數(shù)據(jù)需要時間為t,則波特率為1/ t,相應(yīng)的發(fā)送或接收時鐘為1/t Hz。發(fā)送和接收設(shè)備的波特率應(yīng)該設(shè)置成一致,如果兩者的波特率不一致,將會出現(xiàn)校驗錯或者幀錯。 3 串行發(fā)送電路的設(shè)計 為簡化電路設(shè)計的復(fù)雜性,采用的幀格式為: 1位開始位+8位數(shù)據(jù)位+1位停止位,沒有校驗位,波特率為9600。 3.1 波特率發(fā)生器的設(shè)計 要產(chǎn)生9600波特率,要有一個不低于9600 Hz的時鐘才可以。為產(chǎn)生高精度的時鐘,我選了6MHz(6M能整除9600)的晶振來提供外部時鐘。當(dāng)然,你也可以選其它頻率的時鐘來產(chǎn)生9600 Hz的時鐘。對于6MHz時鐘,
6、需要設(shè)計一個625進制的分頻器來產(chǎn)生9600波特率的時鐘信號。用VHDL設(shè)計分頻器較簡單,在這里就不再給出源程序 了。 3.2 發(fā)送電路的設(shè)計 根據(jù)采用的幀格式,需要發(fā)送的數(shù)據(jù)為10位(1位開始位、8位數(shù)據(jù)位、1位停止位),在發(fā)送完這10位后,就應(yīng)該停止發(fā)送,并使發(fā)送端電平處于邏 輯1,然后等候下次的發(fā)送。下面是實現(xiàn)上述功能的VHDL源程序: library ieee; use ieee.std_logic_1164.all; entity Com is port(clk,en:in std_logic; Send_data:in std_logic_vector(9 downto 0); s
7、erial:out std_logic); end com; architecture com_arc of com is begin process(clk) variable count:integer range 0 to 9 :=0; begin if en='0' then count:=0; serial<='1' elsif rising_edge(clk) then if count=9 then serial<=Send_data(9); else serial<=Send_data(count); count:=count+
8、1; end if; end if; end process; end com_arc; 其中,Send_data(0 to 9)表示需要發(fā)送的數(shù)據(jù)幀,發(fā)送時,開始位Send_data(0)必須為邏輯0,停止位Send_data(9)必須為邏輯1,否者與硬件電路連接的設(shè) 備接收到的數(shù)據(jù)會出現(xiàn)錯誤。在發(fā)送每一幀之前,首先給輸入端en一個低電平脈沖,讓電路復(fù)位(count置0),然后開始發(fā)送。變量count 在進程中用來記錄發(fā)送的數(shù)據(jù)數(shù)目,當(dāng)數(shù)據(jù)幀發(fā)送完后,發(fā)送端就一直發(fā)送停止位(邏輯1)。 3.3 時序仿真 選EDA工具,對VHDL源程序編譯。用的是 Altera公司的MAX+plus II 9
9、.3 Baseline,這個工具支持VHDL的編譯、仿真。圖2是編譯后的仿真結(jié)果,其中,Clk為頻率9600Hz的時鐘,Send_data0為開始 位,Send_data8.0為數(shù)據(jù)位, Send_data9為停止位。結(jié)果顯示,輸出完全是按數(shù)據(jù)幀格式發(fā)送的。4 串行接收電路的設(shè)計 接收電路比發(fā)送電路要復(fù)雜,接收電路要時實檢測起始位的到來,一旦檢測到起始位到,就要將這一幀數(shù)據(jù)接收下來。為提高接收的準(zhǔn)確性,減少誤碼率,每 一位數(shù)據(jù)都用3倍頻的波特率對數(shù)據(jù)進行采樣(如圖3所示),然后對3次采樣結(jié)果進行判決:如果3次采樣中至少有2次為高電平,則接收這一位數(shù)據(jù)被判決為高 電平,否者,為低電平。4.1 波
10、特率發(fā)生器和采樣時鐘的設(shè)計 為完成3次采樣,除了頻率為9600Hz的接收時鐘外,還要有一個3倍頻的采樣時鐘。下面是實現(xiàn)上述功能的VHDL源程序: library ieee; use ieee.std_logic_1164.all; entity count625 is port(clk,en:in std_logic; Clock1,Clock3:out std_logic); end count625; architecture count625_arc of count625 is begin process(clk,en) variable count:integer range 0 t
11、o 625 :=0; begin if en='0' then NUll; elsif (rising_edge(clk) then count:=count+1; if count=625 then Clock1<='1' count:=0; else Clock1<='0' end if; if (count=100 or count=300 or count=500 ) then Clock3<='1' else Clock3<='0' end if; end if; end proc
12、ess; end count625_arc; 其中clk為6MHz的時鐘;en控制波形的產(chǎn)生; Clock1為9600Hz的接收時鐘; Clock3為3倍頻的采樣時鐘。 4.2 接收電路的設(shè)計 串行接收電路首先要能判斷接收數(shù)據(jù)的到來,即每一幀的開始,然后對數(shù)據(jù)進行3次采樣,最后判決輸出。為簡化設(shè)計,幀格式仍然采用1位開始位+8位 數(shù)據(jù)位+1位停止位。下面是設(shè)計的接收電路VHDL程序: library ieee; use ieee.std_logic_1164.all; entity com_receive10 is port(com,clr,clk1,clk3:in std_logic;Q:o
13、ut std_logic_vector(0 to 9);Valid:out std_logic); end com_receive10; architecture com_receive10_arc of com_receive10 is Signal Enable:std_logic :='1' Signal Hold:std_logic :='0' Signal N:std_logic_vector(0 to 2) :="000" begin Valid<=Enable and Hold; process(clk1,clr) var
14、iable Num:integer range 0 to 9 :=0; begin if clr='0' then Enable<='1' ; Num:=0; Q<="0000000000" elsif (rising_edge(clk1) then Q(Num)<=(N(0) and N(1) or (N(1) and N(2) or (N(0) and N(2); if Num=9 then Enable<='0' Num:=0; else Num:=Num+1; end if; end if; e
15、nd process; process(clk3,clr) variable m:integer range 0 to 2 :=0; begin if clr='0' then m:=0; elsif(rising_edge(clk3) then N(m)<=com; if m=2 then m:=0; else m:=m+1; end if; end if; end process; process(clr,com) begin if clr='0' then Hold<='0' elsif falling_edge(com) th
16、en Hold<='1' end if; end process; end com_receive10_arc; 其中,N(m)<=com 用來對波形采樣;Q(Num)<=(N(0) and N(1) or (N(1) and N(2) or (N(0) and N(2)是對其中1位數(shù)據(jù)的3次采樣結(jié)果判決;Num用來記錄接收的數(shù)據(jù)位數(shù);falling_edge(com)是用來時實檢測每一幀的起始位(即下 降沿)的到來;Valid<=Enable and Hold用來輸出到波特率發(fā)生器電路單元控制時鐘的產(chǎn)生,最后將一幀的10位數(shù)據(jù)輸出。 用MAX+plus II 9.3 Baseline將上面兩個VHDL文件制成庫器件,然后在電路圖上調(diào)出來,最后做成的串行接收電路圖如圖4所示。 4.3 時序仿真 時序仿真如圖5所示,Receive為接收到的序 列波形,最后結(jié)果:接收到的數(shù)據(jù)位為6D,起始位為0,停止位為1。 5 結(jié)束語 VHDL語言設(shè)計的出現(xiàn)從根本上改變了以往數(shù)字電路的設(shè)計模式,使電路設(shè)計由硬件設(shè)計轉(zhuǎn)變?yōu)檐浖O(shè)計,這樣提高了設(shè)計的靈活性,降低了電路的復(fù)雜程 度,修改起來也很方便。 利用VHDL設(shè)計的靈活性,根據(jù)串行通信協(xié)議的要求,可以在實驗室利用先進的EDA工具,用VHDL設(shè)計出符合自己實際需求的異步串行
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家庭裝飾裝修工程施工合同
- 停車場承包服務(wù)合同
- 合同抵押貸款裝修合同
- 財務(wù)檔案管理制度文檔
- 2024-2025學(xué)年第二學(xué)期天域全國名校協(xié)作體高三3月聯(lián)考 歷史試卷(含答案)
- 2025年上半年宣恩貢水融資擔(dān)保限公司公開招聘工作人員【2人】易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年宣城市績溪縣事業(yè)單位招考(53人)易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年安徽阜陽市12345政務(wù)服務(wù)便民熱線招聘35人易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年安徽蕪湖市人社局所屬事業(yè)單位招考易考易錯模擬試題(共500題)試卷后附參考答案
- 2024福建福州文體產(chǎn)業(yè)開發(fā)運營有限公司社會招聘2人筆試參考題庫附帶答案詳解
- 兒童健康產(chǎn)業(yè)行業(yè)研究報告
- 任務(wù)型閱讀-小升初英語專項練習(xí)(譯林版三起)
- 部編版語文二年級下冊第三單元教材解讀大單元集體備課
- 七年級地理上冊期末試卷(可打印)
- ISO28000:2022供應(yīng)鏈安全管理體系
- 重癥監(jiān)測治療與復(fù)蘇
- 袁家村規(guī)劃方案
- 電力計量人員培訓(xùn)課件
- 富氫水完整課件
- 國家臨床版3.0手術(shù)操作編碼(ICD-9-CM3)
- A320飛機空調(diào)系統(tǒng)非正常操作A要點分析
評論
0/150
提交評論