基于现场可编程门阵列FPGA的系统开发可以广泛应用于各行各业,ASIC设计、通信、控制、电力电子等。其主要优点有:设计周期短、功耗低,可实现更高集成度的数字系统和嵌入式系统等。用户可对FPGA内部的逻辑模块和I/O模块重新进行配置,以实现数字逻辑电路以及基于FPGA的SRAM、查找表(LUT)等。FPGA还具有静态可重复编程和动态在系统重构的特性,使得硬件的功能可以像软件一样通过编程来修改,从而提高设计的可靠性、稳定性和灵活性。传统的设计中,FPGA的功能仅局限于集成电路的应用和验证,然而随着电子技术的迅猛发展,集成度更高,功耗更低,基于FPGA的电路设计将发挥出更大的优势,使得在一片FPGA中实现一个完备的数字处理系统成为可能[1-3]。本文提出的基于FPGA的串行通信控制系统的设计与实现,是在Altera公司的FPGA Cyclone II芯片EP2C5的基础上实现的,运用VHDL语言编程,在Quartus II软件上进行编译、仿真,最终在FPGA开发板上成功实现下载和调试验证。
1 串行通信控制系统的基本原理
基本的通信方式可分为并行通信和串行通信两种。并行通信就是数据以成组的方式在多个并行信道上同时传输;而串行通信则是在传输过程中,二进制数据一位一位的通过一条通信信道,并且按照规定的规程依次传输,实现计算机与计算机或计算机与外部设备之间的通信(数据交换)。由于串行通信的收发方都只需要一条数据线,比较容易实现,而且长距离传输时也更加可靠,因此其应用十分广泛[4]。
串行通信控制系统的模型如图1所示,其基本原理是:信息源将待传输的消息转换成原始电信号(如电话系统中的电话机就可看成是信息源);发送设备对原始电信号进行某种变换或处理,使电信号符合信道的传输特性要求;信道是信息传输的通道,在串行通信时,代表信息的数字信号序列按时间顺序一个接一个地在信道中传输;接收端从收到的信号中恢复出相应的原始信号;受信者则将复原的原始信号转变成相应的消息(如电话机将对方传来的电信号还原成了声音);噪声源是信道中的所有噪声及通信系统中噪声的集合[5]。
2 系统整体设计方案
2.1 系统功能
(1)通过4×4键盘输入0~F数据,并将此输入数据发送给上位机,上位机可以准确接收所发送的数据。
(2)通过LED准确接收上位机串口调试助手发送的数据。
(3)波特率可分为2 400 b/s、4 800 b/s、9 600 b/s、19 200 b/s、38 400 b/s,并且可以随意修改。
2.2 设计方案
整个设计在Altera Cyclone II平台上采用了“自顶向下”的模块化设计思想,并使用硬件描述语言VHDL对电路进行描述。
根据功能要求,系统可分为4×4键盘扫描输入模块、LED显示模块、接收模块、发送模块和波特率产生模块5个功能模块,系统原理框图如图2所示。
设计原理为:4×4键盘扫描输入模块将所输入的数据转换为二进制代码传输给发送模块,发送模块再将此数据通过串口TXD发送到PC机;接收模块通过串口RXD接收由上位机或串口调试助手发送的数据,并且显示在数码管上;数据传输速率由波特率产生模块的输出频率决定,可以根据需要进行设置,如可设置为2 400 b/s、4 800 b/s等。
3 功能子模块的设计与实现
3.1 接收模块的设计
接收模块的主要功能为接收PC机发送8 bit二进制数。根据功能要求,采用VHDL硬件描述语言对其功能进行描述,模块顶层设计文件如图3所示,各端口分别为:bclkr(传输速率控制端,输入波特率产生模块的输出频率)、resetr(复位端)、rxd(接收端口,串行输入)、r_ready(接收就绪)、rbuf(接收寄存器)。该模块采用有限状态机设计。
3.2 发送模块的设计
发送模块的主要功能是将键盘按键值以给定的波特率发送给PC机。本文的设计思想是:当不发送数据时,数据信号线表现为高电平,即空闲位;当开始发送数据后,数据信号为低电平,也就是起始位,为了保证能够在发送数据时准确采样,采用频率为波特率16倍的输入时钟。输入时钟信号由波特率产生模块的输出提供。该模块采用VHDL硬件描述语言进行描述,顶层设计文件如图4所示,各端口分别为:bclkt(输入时钟)、resett(复位)、xmit_cmd_p(发送命令端)、txdbuf[7...0](发送缓冲器输入端)、txd(发送数据端)、txd_done(发送完毕)。该模块采用有限状态机设计,根据功能要求,电路包括空闲、起始、等待、移位、停止5个状态。
3.3 波特率产生模块的设计
波特率产生模块的主要功能:当输入不同数据时,将对输入的时钟信号有不同的分频比,从而产生不同的波特率。波特率发生器采用加法计数器来实现多种分频。产生38 400 b/s的VHDL程序如下: