?? 用vhdl語言在cpld上實現串行通信.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0043)http://www.fpga.com.cn/application/a112.htm -->
<HTML><HEAD><TITLE>用VHDL語言在CPLD上實現串行通信</TITLE><!-- #BeginTemplate "/Templates/main.dwt" --><!-- DW6 -->
<META http-equiv=Content-Type content="text/html; charset=gb2312"><!-- #BeginEditable "doctitle" -->
<STYLE type=text/css>BODY {
FONT-SIZE: 10px
}
TD {
FONT-SIZE: 10px
}
TH {
FONT-SIZE: 10px
}
</STYLE>
<STYLE type=text/css>BODY {
FONT-SIZE: 10pt
}
TD {
FONT-SIZE: 10pt
}
TH {
FONT-SIZE: 10pt
}
</STYLE>
<!-- #EndEditable --><LINK href="用VHDL語言在CPLD上實現串行通信.files/Style.css"
type=text/css rel=stylesheet>
<META content="tb, default" name="Microsoft Border">
<META content="MSHTML 6.00.2800.1458" name=GENERATOR></HEAD>
<BODY text=#000000 vLink=#000066 aLink=#fe818d link=#0000ff bgColor=#ffffff
leftMargin=2 topMargin=2 rightMargin=2 MARGINWIDTH="2" MARGINHEIGHT="2">
<TABLE height=36 cellSpacing=0 cellPadding=0 width=778 align=center border=0>
<TBODY>
<TR>
<TD class=tbgc width=116 background=用VHDL語言在CPLD上實現串行通信.files/mast_logo.gif
rowSpan=2> </TD>
<TD width=37 bgColor=#504a8a height=20> </TD>
<TD width=303 bgColor=#504a8a height=20>
<DIV align=right><FONT class=font10 color=#ffffff><SPAN class=font10><B
class=font10_white>可編程邏輯器件 中文網站</B></SPAN></FONT></DIV></TD>
<TD width=304 bgColor=#504a8a height=20>
<DIV align=right><FONT color=#6699cc><FONT class=index2
color=#fafafa><SPAN class=index2>推薦使用1024x768分辨率</SPAN></FONT><SPAN
class=index2><FONT class=index2 color=#cccccc>
</FONT></SPAN></FONT></DIV></TD></TR>
<TR>
<TD class=font10 vAlign=center bgColor=#000066 colSpan=3>
<DIV align=left><FONT class=verysmall color=#000066 size=1><SPAN
class=verysmall2>xilinx,lattice,altera,actel,Quicklogic,EDA軟件,PLD,CPLD,FPGA,VHDL,verilog,IP
core,ABEL,單片機,8051,數字信號處理,DSP,MCU,PCI接口,數字邏輯電路,設計技巧,參考設計,電子元器件銷售,解密,license,crack,synplify,modlesim,開發板,學習資料,學習套件</SPAN></FONT></DIV></TD></TR></TBODY></TABLE>
<TABLE class=font10 cellSpacing=0 cellPadding=0 width=778 align=center
border=0><TBODY>
<TR vAlign=center align=middle bgColor=#000066>
<TD class=font9 width=119 height=17>
<DIV align=center><B><A class=index
href="http://www.fpga.com.cn/index.htm">主 頁</A></B></DIV></TD>
<TD class=font9 width=80 height=17><B><FONT color=#cccccc><A class=index
href="http://www.fpga.com.cn/introduction1.htm">新手入門</A></FONT></B></TD>
<TD class=font9 width=80 height=17><B><FONT color=#cccccc><A class=index
href="http://www.fpga.com.cn/advance.htm">設計進階</A></FONT></B></TD>
<TD class=font9 width=80 height=17><B><FONT color=#cccccc><A class=index
href="http://www.fpga.com.cn/hdl.htm">HDL語言</A></FONT></B></TD>
<TD class=font9 width=80 height=17><B><FONT color=#cccccc><A class=index
href="http://www.fpga.com.cn/manufacturer.htm">PLD廠商</A></FONT></B></TD>
<TD class=font9 width=80 height=17><B><FONT color=#cccccc><A class=index
href="http://www.fpga.com.cn/freeip.htm">參考設計</A></FONT></B></TD>
<TD class=font9 width=80 height=17><B class=index><A class=index
href="http://www.fpga.com.cn/software.htm">開發軟件</A></B></TD>
<TD class=font9 width=80 height=17><B><FONT color=#cccccc><A class=index
href="http://www.fpga.com.cn/application.htm">應用文章</A></FONT></B></TD>
<TD class=font9 width=80 height=17><B><FONT color=#cccccc><A class=index
href="http://www.pld.com.cn/BBS/index.asp">PLD論壇</A></FONT></B></TD></TR><!--msnavigation--></TBODY></TABLE>
<TABLE class=font10 cellSpacing=0 cellPadding=0 width=778 align=center
border=0><TBODY>
<TR>
<TD width=119 bgColor=#e8e8e8> </TD>
<TD colSpan=8>
<MARQUEE class=font9 scrollAmount=5 scrollDelay=100 width="100%"
bgColor=#ffffff border="0" align="middle"><FONT
color=#000066>歡迎來到可編程邏輯器件中文網站! www.PLD.com.cn </FONT></MARQUEE></TD></TR><!--msnavigation--></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=778 align=center border=0>
<TBODY>
<TR>
<TD vAlign=top width=119 bgColor=#e8e8e8>
<DIV align=left><!-- #BeginEditable "column" --><!-- #EndEditable -->
<P> </P>
<P> </P>
<P> </P></DIV></TD><!--msnavigation-->
<TD vAlign=top height=52>
<DIV align=center>
<CENTER><!-- #BeginEditable "Content" -->
<BLOCKQUOTE>
<P align=left>作者: 中國礦業大學信息與電氣工程學院 張鑫 出處:今日電子</P></BLOCKQUOTE>
<P align=left> </P>
<P class=font12B><STRONG><STRONG>用VHDL語言在CPLD上實現串行通信
</STRONG></STRONG></P>
<P> </P>
<BLOCKQUOTE>
<P class=font10 align=left><STRONG>摘 要</STRONG>:
串行通信是實現遠程測控的重要手段。采用VHDL語言在CPLD上實現了串行通信,完全可以脫離單片機使用。</P>
<P class=font10 align=left><BR><STRONG>關鍵詞</STRONG>:
CPLD;VHDL;串行通信<BR></P>
<P class=font10 align=left><STRONG>引言 </STRONG></P>
<P class=font10 align=left><SPAN
class=font10>隨著EDA技術得發展,CPLD已經在許多方面得到了廣泛應用,而串行通信是實現遠程測控的重要手段。本文利用VHDL語言在CPLD上實現了串行通信,完全可以脫離單片機使用,克服了單片機的許多缺點。
</SPAN></P>
<P class=font10 align=left> </P>
<P class=font10 align=left><STRONG>串口結構及內容 </STRONG></P>
<P class=font10
align=left><BR>本設計所采用的是異步通信方式,可以規定傳輸的一個數據是10位,其中最低位為啟動位(邏輯0低電平),最高位為停止位(邏輯1高電平),中間8位是數據位。為了方便對數據進行正確控制,選取發送(接受)每位數據用4個時鐘周期。為了能夠達到串行通信的波特率,例如4800B/s,則需把時鐘頻率設為19.2kHz。系統結構如圖1所示:
</P>
<DIV class=font10 align=left>
<DIV align=center>
<P><BR><IMG height=438 src="用VHDL語言在CPLD上實現串行通信.files/1.jpg"
width=392></P>
<P>圖1<BR></P></DIV></DIV>
<P class=font10 align=left><STRONG>系統原理 </STRONG></P>
<P class=font10
align=left><BR>首先介紹串行通信發送器的工作原理。6位計數器用于判斷發送的數據是否發送完畢及在發送完畢后裝入新的數據,其VHDL語言程序如下:</P>
<P class=font10 align=left><BR>process(carry) <BR>begin <BR>if
carry'event and carry='1'then <BR>if counter40="100111"then
<BR>load<='1'; <BR>counter40<="000000"; <BR>else
counter40<=counter40+1; <BR>load<='0'; <BR>end if; <BR>end if;
<BR>end process; </P>
<P class=font10
align=left><BR>由于本設計中選取一位數據4個時鐘周期,因此當計數到“100111”時,表示10位數據發送完畢;此時將加載信號“load”置1,則向移位寄存器加載10位數據。此計數器的時鐘信號由3位計數器的進位信號提供,3位計數器程序為如下:</P>
<P class=font10 align=left><BR>process(clk) <BR>begin <BR>if clk'event
and clk='1'then <BR>if counter4="0011"then <BR>counter4<="0000";
<BR>carry<='1'; <BR>else counter4<=counter4+1; <BR>carry<='0';
<BR>end if; <BR>end if; <BR>end process; </P>
<P class=font10
align=left><BR>當計數脈沖為3時,計數器清零并發出進位信號“carry”,“carry”既是6位計數器的時鐘信號,又是移位寄存器的移位脈沖,移位寄存器實際上在發送器中是一個并串轉換器,其程序為如下:</P>
<P class=font10 align=left><BR>process(load,carry) <BR>begin <BR>if
load='1'then <BR>reg10(9 downto 0)<=regin(9 downto 0); <BR>else
<BR>if carry'event and carry='1' then <BR>din<=reg10(0); <BR>reg10(8
downto 0)<=reg10(9 downto 1); <BR>end if; <BR>end if; <BR>end
process; </P>
<P class=font10
align=left><BR>當加載信號高有效時,10位數據從外部寄存器中并行載入REG10,載入后在“carry”有效時,即每4個CLK周期右移一位進入鎖存器,進而從TXD發出。發送器的仿真波形如圖2所示。</P>
<P class=font10 align=center><BR><IMG height=238
src="用VHDL語言在CPLD上實現串行通信.files/2.jpg" width=340></P>
<P class=font10 align=center>圖2</P>
<P class=font10
align=left><BR>接收器的結構與模塊的功能與發送器相似。通過判斷接收鎖存器中的起始位是否為零,來確定接收與否。若有效時,3位計數器開始計數,將鎖存器中的數據逐位右移到移位寄存器中,6位計數器同樣計數到“100111”,此時表示已接收10位數據,發出信號把移位寄存器中的數據并行讀出。接收器中的移位寄存器其實是一個串并轉換器。
</P>
<P class=font10 align=left><STRONG>結論 </STRONG></P>
<P class=font10
align=left><BR>以上就是串行通信的基本結構和原理,在工程中可能對波特率的要求不同。可以利用CPLD的在線可編程功能,通過修改發送(接收)每一位的時間來控制波特率,比如把一位數據每4個CLK改為2個CLK,則在時鐘頻率19.2kHz時,波特率為9600bps。除此之外,還可以通過增加時鐘頻率來增大波特率。</P>
<P class=font10 align=left><BR><STRONG>參考文獻 </STRONG></P>
<P class=font10 align=left><BR>1 胡漢才. 單片機原理及其接口技術.清華大學出版社 <BR>2 趙俊超等.
集成電路設計VHDL教程. 希望電子出版社 </P>
<P class=font10 align=left> </P>
<P class=font10 align=left> </P>
<P align=left> </P></BLOCKQUOTE>
<P>返回<A href="http://www.fpga.com.cn/application.htm">應用文章</A>欄目</P>
<P> </P>
<P> </P>
<P> </P>
<P> </P><!-- #EndEditable -->
<P
class=index2> </P></CENTER></DIV></TD></TR><!--msnavigation--></TBODY></TABLE>
<TABLE class=font9 height=35 cellSpacing=0 cellPadding=0 width=778 align=center
bgColor=#000000 border=0>
<TBODY>
<TR>
<TD align=middle width="4%" bgColor=#000066 height=10>
<DIV align=left><FONT face="Arial, Helvetica, sans-serif"
color=#ffffff><B><SPAN class=font9></SPAN></B></FONT></DIV></TD>
<TD align=middle width="96%" bgColor=#000066 height=10>
<DIV class=index>
<DIV align=left><B><A class=index
href="http://www.fpga.com.cn/others/aboutus.html" target=_blank><FONT
face="Arial, Helvetica, sans-serif" color=#cccccc><SPAN class=index2>about
us</SPAN></FONT></A> <FONT color=#cccccc><SPAN
class=index2>|</SPAN></FONT><SPAN class=font9><FONT
face="Arial, Helvetica, sans-serif" color=#cccccc> Site Map </FONT><FONT
color=#cccccc>| </FONT></SPAN></B></DIV></DIV></TD></TR>
<TR vAlign=center bgColor=#f3f3f3>
<TD align=middle colSpan=2 height=18>
<P><FONT color=#666666><SPAN class=font9>copyright© 1999-2003 all rights
reserved www.PLD.com.cn</SPAN></FONT></P></TD></TR>
<TR bgColor=#f3f3f3>
<TD align=middle colSpan=2 height=23><FONT color=#666666>e-mail: pld<SPAN
class=email><IMG height=10 src="用VHDL語言在CPLD上實現串行通信.files/@.gif"
width=7>fpga.com.cn</SPAN></FONT></TD></TR>
<TR bgColor=#ffffff>
<TD align=middle colSpan=2 height=23> </TD></TR></TBODY></TABLE>
<P class=index2> </P><!-- #EndTemplate --></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -