📄 用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 + -