基于VHDL的異步串行通信電路設計

發(fā)布時(shí)間:2010-6-30 17:50    發(fā)布者:我芯依舊
關(guān)鍵詞: VHDL , 通信電路 , 異步串行
1 引 言
隨著(zhù)電子技術(shù)的發(fā)展,現場(chǎng)可編程門(mén)陣列 FPGA和復雜可編程邏輯器件CPLD的出現,使得電子系統的設計者利用與器件相應的電子CAD軟件,在實(shí)驗室里就可以設計自己的專(zhuān)用集成電路ASIC器件。這種可編程ASIC不僅使設計的產(chǎn)品達到小型化、集成化和高可靠性,而且器件具有用戶(hù)可編程特性,大大縮短了設計周期,減少了設計費用,降低了設計風(fēng)險。目前數字系統的設計可以直接面向用戶(hù)需求,根據系統的行為和功能要求,自上至下地逐層完成相應的描述﹑綜合﹑優(yōu)化﹑仿真與驗證,直到生成器件,實(shí)現電子設計自動(dòng)化。其中電子設計自動(dòng)化(EDA)的關(guān)鍵技術(shù)之一就是可以用硬件描述語(yǔ)言(HDL)來(lái)描述硬件電路。 VHDL是用來(lái)描述從抽象到具體級別硬件的工業(yè)標準語(yǔ)言,它是由美國國防部在80年代開(kāi)發(fā)的HDL,現在已成為IEEE承認的標準硬件描述語(yǔ)言。VHDL支持硬件的設計、驗證、綜合和測試,以及硬件設計數據的交換、維護、修改和硬件的實(shí)現,具有描述能力強、生命周期長(cháng)、支持大規模設計的分解和已有設計的再利用等優(yōu)點(diǎn)。利用VHDL這些優(yōu)點(diǎn)和先進(jìn)的EDA工具,根據具體的實(shí)際要求,我們可以自己來(lái)設計串口異步通信電路。

2 串口異步通信的幀格式和波特率

2.1 串行異步通信的幀格式

在串行異步通信中,數據位是以字符為傳送單位,數據位的前、后要有起始位、停止位,另外可以在停止位的前面加上一個(gè)比特位(bit)的校驗位。其幀格式如圖1所示。


起始位是一個(gè)邏輯0,總是加在每一幀的開(kāi)始,為的是提醒數據接收設備接收數據,在接收數據位過(guò)程中又被分離出去。數據位根據串行通信協(xié)議,允許傳輸的字符長(cháng)度可以為5、6、7或8位。通常數據位為7位或8位,如果要傳輸非ASCII數據(假如使用擴展字符設置的文本或者二進(jìn)制數據),數據位格式就需要采用8位。數據位被傳輸時(shí)從一個(gè)字符的最低位數據開(kāi)始,最高位數據在最后。例如字母C在A(yíng)SCII表中是十進(jìn)制67,二進(jìn)制的01000011,那么傳輸的將是11000010。校驗位是為了驗證傳輸的數據是否被正確接收,常見(jiàn)的校驗方法是奇、偶校驗。另外校驗位也可以為0校驗或者1校驗,即不管數據位中1的個(gè)數是多少,校驗位始終為0或者1,如果在傳輸的過(guò)程中校驗位發(fā)生了變化,這就提示出現了某類(lèi)錯誤。不過(guò),在傳輸數據的時(shí)候,也可以不用校驗位。停止位,為邏輯1,總在每一幀的末尾,可以是1位、1.5位或者2位。最常用的是1位,超過(guò)1位的停止位通常出現在這樣的場(chǎng)合:在處理下一個(gè)即將發(fā)送來(lái)的字符之前接收設備要求附加時(shí)間。

2.2 串行異步通信的波特率

串行口每秒發(fā)送或接收數據的位數為波特率。若發(fā)送或接收一位數據需要時(shí)間為t,則波特率為1/ t,相應的發(fā)送或接收時(shí)鐘為1/t Hz。發(fā)送和接收設備的波特率應該設置成一致,如果兩者的波特率不一致,將會(huì )出現校驗錯或者幀錯。

3 串行發(fā)送電路的設計

為簡(jiǎn)化電路設計的復雜性,采用的幀格式為: 1位開(kāi)始位+8位數據位+1位停止位,沒(méi)有校驗位,波特率為9600。

3.1 波特率發(fā)生器的設計

要產(chǎn)生9600波特率,要有一個(gè)不低于9600 Hz的時(shí)鐘才可以。為產(chǎn)生高精度的時(shí)鐘,我選了6MHz(6M能整除9600)的晶振來(lái)提供外部時(shí)鐘。當然,你也可以選其它頻率的時(shí)鐘來(lái)產(chǎn)生9600 Hz的時(shí)鐘。對于6MHz時(shí)鐘,需要設計一個(gè)625進(jìn)制的分頻器來(lái)產(chǎn)生9600波特率的時(shí)鐘信號。用VHDL設計分頻器較簡(jiǎn)單,在這里就不再給出源程序了。

3.2 發(fā)送電路的設計

根據采用的幀格式,需要發(fā)送的數據為10位(1位開(kāi)始位、8位數據位、1位停止位),在發(fā)送完這10位后,就應該停止發(fā)送,并使發(fā)送端電平處于邏輯1,然后等候下次的發(fā)送。下面是實(shí)現上述功能的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);
serialut 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+1;
end if;
end if;
end process;
end com_arc;

其中,Send_data(0 to 9)表示需要發(fā)送的數據幀,發(fā)送時(shí),開(kāi)始位Send_data(0)必須為邏輯0,停止位Send_data(9)必須為邏輯1,否者與硬件電路連接的設備接收到的數據會(huì )出現錯誤。在發(fā)送每一幀之前,首先給輸入端en一個(gè)低電平脈沖,讓電路復位(count置0),然后開(kāi)始發(fā)送。變量count 在進(jìn)程中用來(lái)記錄發(fā)送的數據數目,當數據幀發(fā)送完后,發(fā)送端就一直發(fā)送停止位(邏輯1)。

3.3 時(shí)序仿真

選EDA工具,對VHDL源程序編譯。用的是 Altera公司的MAX+plus II 9.3 Baseline,這個(gè)工具支持VHDL的編譯、仿真。圖2是編譯后的仿真結果,其中,Clk為頻率9600Hz的時(shí)鐘,Send_data0為開(kāi)始位,Send_data[8..0]為數據位, Send_data9為停止位。結果顯示,輸出完全是按數據幀格式發(fā)送的。


4 串行接收電路的設計

接收電路比發(fā)送電路要復雜,接收電路要時(shí)實(shí)檢測起始位的到來(lái),一旦檢測到起始位到,就要將這一幀數據接收下來(lái)。為提高接收的準確性,減少誤碼率,每一位數據都用3倍頻的波特率對數據進(jìn)行采樣(如圖3所示),然后對3次采樣結果進(jìn)行判決:如果3次采樣中至少有2次為高電平,則接收這一位數據被判決為高電平,否者,為低電平。


4.1 波特率發(fā)生器和采樣時(shí)鐘的設計

為完成3次采樣,除了頻率為9600Hz的接收時(shí)鐘外,還要有一個(gè)3倍頻的采樣時(shí)鐘。下面是實(shí)現上述功能的VHDL源程序:

library ieee;
use ieee.std_logic_1164.all;
entity count625 is
port(clk,en:in std_logic; Clock1,Clock3ut std_logic);
end count625;
architecture count625_arc of count625 is
begin
process(clk,en)
variable count:integer range 0 to 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 process;
end count625_arc;

其中clk為6MHz的時(shí)鐘;en控制波形的產(chǎn)生; Clock1為9600Hz的接收時(shí)鐘; Clock3為3倍頻的采樣時(shí)鐘。

4.2 接收電路的設計

串行接收電路首先要能判斷接收數據的到來(lái),即每一幀的開(kāi)始,然后對數據進(jìn)行3次采樣,最后判決輸出。為簡(jiǎn)化設計,幀格式仍然采用1位開(kāi)始位+8位數據位+1位停止位。下面是設計的接收電路VHDL程序:

library ieee;
use ieee.std_logic_1164.all;
entity com_receive10 is

port(com,clr,clk1,clk3:in std_logic;Qut std_logic_vector(0 to 9);Validut 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)
variable 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;
end 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) then
Hold<='1';
end if;
end process;
end com_receive10_arc;

其中,N(m)<=com 用來(lái)對波形采樣;Q(Num)<=(N(0) and N(1)) or (N(1) and N(2)) or (N(0) and N(2))是對其中1位數據的3次采樣結果判決;Num用來(lái)記錄接收的數據位數;falling_edge(com)是用來(lái)時(shí)實(shí)檢測每一幀的起始位(即下降沿)的到來(lái);Valid<=Enable and Hold用來(lái)輸出到波特率發(fā)生器電路單元控制時(shí)鐘的產(chǎn)生,最后將一幀的10位數據輸出。

用MAX+plus II 9.3 Baseline將上面兩個(gè)VHDL文件制成庫器件,然后在電路圖上調出來(lái),最后做成的串行接收電路圖如圖4所示。


4.3 時(shí)序仿真

時(shí)序仿真如圖5所示,Receive為接收到的序


列波形,最后結果:接收到的數據位為6D,起始位為0,停止位為1。

5 結束語(yǔ)

VHDL語(yǔ)言設計的出現從根本上改變了以往數字電路的設計模式,使電路設計由硬件設計轉變?yōu)檐浖O計,這樣提高了設計的靈活性,降低了電路的復雜程度,修改起來(lái)也很方便。 利用VHDL設計的靈活性,根據串行通信協(xié)議的要求,可以在實(shí)驗室利用先進(jìn)的EDA工具,用VHDL設計出符合自己實(shí)際需求的異步串行通信電路。

本文設計出的基于VHDL異步串行通信電路,在實(shí)驗室已經(jīng)與計算機串口RS-232進(jìn)行了通信實(shí)驗(注意:TTL和RS-232邏輯電平的轉換)。實(shí)驗證明,0至255的所有數據都能被正確收、發(fā)。
本文地址:http://selenalain.com/thread-14192-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
wmf000000 發(fā)表于 2011-1-13 10:58:02
好東西,謝謝!
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页