用VHDL语言在CPLD上实现串行通信

发布者:CaptivatingEyes最新更新时间:2007-03-09 手机看文章 扫描二维码
随时随地手机看文章
引言 随着EDA技术得发展,CPLD已经在许多方面得到了广泛应用,而串行通信是实现远程测控的重要手段。本文利用VHDL语言在CPLD上实现了串行通信,完全可以脱离单片机使用,克服了单片机的许多缺点。 串口结构及内容 本设计所采用的是异步通信方式,可以规定传输的一个数据是10位,其中最低位为启动位(逻辑0低电平),最高位为停止位(逻辑1高电平),中间8位是数据位。为了方便对数据进行正确控制,选取发送(接受)每位数据用4个时钟周期。为了能够达到串行通信的波特率,例如4800B/s,则需把时钟频率设为 19.2kHz。系统结构如图1所示: 图1 系统原理 首先介绍串行通信发送器的工作原理。6位计数器用于判断发送的数据是否发送完毕及在发送完毕后装入新的数据,其VHDL语言程序如下: 由于本设计中选取一位数据4个时钟周期,因此当计数到“100111”时,表示10位数据发送完毕;此时将加载信号“load”置1,则向移位寄存器加载10位数据。此计数器的时钟信号由3位计数器的进位信号提供,3位计数器程序为如下: 当计数脉冲为3时,计数器清零并发出进位信号“carry”,“carry”既是6位计数器的时钟信号,又是移位寄存器的移位脉冲,移位寄存器实际上在发送器中是一个并串转换器,其程序为如下: 当加载信号高有效时,10位数据从外部寄存器中并行载入REG10,载入后在“carry”有效时,即每4个CLK周期右移一位进入锁存器,进而从TXD发出。发送器的仿真波形如图2所示。 图2 接收器的结构与模块的功能与发送器相似。通过判断接收锁存器中的起始位是否为零,来确定接收与否。若有效时,3位计数器开始计数,将锁存器中的数据逐位右移到移位寄存器中,6位计数器同样计数到“100111”,此时表示已接收10位数据,发出信号把移位寄存器中的数据并行读出。接收器中的移位寄存器其实是一个串并转换器。 结论 以上就是串行通信的基本结构和原理,在工程中可能对波特率的要求不同。可以利用CPLD的在线可编程功能,通过修改发送(接收)每一位的时间来控制波特率,比如把一位数据每4个CLK改为2个CLK,则在时钟频率19.2kHz时,波特率为9600bps。除此之外,还可以通过增加时钟频率来增大波特率。
引用地址:用VHDL语言在CPLD上实现串行通信

上一篇:基于Verilog HDL设计的自动数据采集系统
下一篇:SDRAM控制器的设备与VHDL实现

热门资源推荐
热门放大器推荐
    Error

    An error occurred.

    Sorry, the page you are looking for is currently unavailable.
    Please try again later.

    If you are the system administrator of this resource then you should check the error log for details.

    Faithfully yours, OpenResty.

小广播
最新应用文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved