1、基于 FPGA 的 ASIC 设计RS232 接口功能一、设计说明为了配合课程设计,完成 RS232 通信功能,以 Verilog 为硬件描述语言在FPGA 开发板上实现串行通信的接受和发送模块,通过本项目掌握基于 FPGA的 ASIC 设计的流程方法。1. RS232 介绍RS232 是一种异步串行通信接口, RS232 只是一个物理层的标准,只规定了信号物理特性,链路层的协议是 UART,RS232 接口的逻辑设计就是这部分内容。其设置包括三部分:波特率、奇偶校验、停止位。所谓波特率,指单位时间内传送二进制数据的位数,以位/ 秒为单位,是衡量串行数据传输快慢的重要指标。如果某串口的波特率为
2、 115 200, 指的是该串口以 115 200bits/s 的速率在传输数据。奇偶校验:是用来验证数据的正确性。奇偶校验是通过修改每一发送字节(也可以限制发送的字节)来工作的。在偶校验中,因为奇偶校验位会被相应的置 1 或 0(一般是最高位或最低位) ,所以数据会被改变以使得所有传送的数位(含字符的各数位和校验位)中“1”的个数为偶数;在奇校验中,所有传送的数位(含字符的各数位和校验位)中“1”的个数为奇数。奇偶校验可以用于接受方检查传输是否发送生错误如果某一字节中“1”的个数发生了错误,那么这个字节在传输中一定有错误发生。如果奇偶校验是正确的,那么要么没有发生错误要么发生了偶数个的错误。
3、停止位:是在每个字节传输之后发送的,它用来帮助接受信号方硬件重同步。2. RS232 的特性 使用 9 针的“DB-9“插头(它一共有 9 个引脚,最重要的 3 个引脚是: 引脚 2 RxD (接收数据). 引脚 3: TxD (发送数据). 引脚 5: GND (地)). 允许全双工的双向通讯,最大可支持的传输速率为 10KBytes/sRS232 通信线上的电平RS-323 标准对逻辑电平的定义。对于数据(信息码):逻辑“1” (传号)的电平低于-3V,逻辑“0” (空号)的电平高于+3V;对于控制信号;接通状态(ON)即信号有效的电平高于+3V,断开状态(OFF)即信号无效的电平低于-3
4、V,也就是当传输电平的绝对值大于 3V 时,电路可以有效地检查出来,介于-3+3V 之间的电压无意义,低于 -15V 或高于+15V 的电压也认为无意义,因此,实际工作时,应保证电平在(315)V 之间。RS-232C 与 TTL 转换:RS-232C 是用正负电压来表示逻辑状态(EIA) ,与 TTL 以高低电平表示逻辑状态的规定不同。因此,为了能够同计算机接口或终端的 TTL 器件连接,必须在 RS-232C 与 TTL 电路之间进行电平和逻辑关系的变换。实现这种变换的方法可用分立元件,也可用集成电路芯片。目前较为广泛地使用集成电路转换器件,如 MC1488、SN75150 芯片可完成 T
5、TL 电平到 EIA 电平的转换,而MC1489、SN75154 可实现 EIA 电平到 TTL 电平的转换。MAX232 芯片可完成TTL EIA 双向电平转换。二、UART 的协议数据通信的基本方式可分为并行通信与串行通信两种:并行通信:是指利用多条数据传输线将一个资料的各位同时传送。它的特点是传输速度快,适用于短距离通信,但要求通讯速率较高的应用场合。串行通信:是指利用一条传输线将资料一位位地顺序传送。特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。异步通信以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符
6、中的两个相邻位代码间的时间间隔是固定的而且单位的本身也是固定的(决定于传输速率)。通信协议(通信规程):是指通信双方约定的一些规则。在使用异步串口传送一个字符的信息时,对资料格式有如下约定:规定有空闲位、起始位、资料位、奇偶校验位、停止位。其 中 各 位 的 意 义 如 下 : 空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。 起始位:先发出一个逻辑”0” 的信号,表示传输字符的开始。 资料位:紧接着起始位之后。资料位的个数可以是 4、5、6、7、8 等,构成一个字符。通常采用 ASCII 码。从最低位开始传送,靠时钟定位。 奇偶校验位:资料位加上这一位后,使得“1” 的位数应为偶数
7、(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。 停止位:它是一个字符数据的结束标志。可以是 1 位、1.5 位、2 位的高电平。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 四、模块显示UART 串行通讯模块由 3 个子模块组成:波特率发生器、接收模块和发送模块。波特率发生器专门产生一个本地时钟信号来控制 UART 的接收与发送; UART 接收模块的用途是接收 RxD 端的串行信
8、号 ,并将其转化为并行数据; UART 发送模块的用途是将准备输出的并行数据按照基本 UART 帧格式转为串行数据从 TxD 端串行输出。波特率发生器波特率产生器实际是一个分频器,将系统时钟转化为与串行通行匹配的波特率频率。其设计思想是一个基本计数器,该计数器工作在很高的系统时钟下,通过写入不同的数值到波特率发生器保持寄存器中,然后用计数器方式产生所需要的各种与波特率匹配的时钟,该输出为波特率的 16 倍频。发送模块发送模块分为空闲、载入数据、移位等 3 种模式。如图所示。当并行 8 位数据从总线写入发送模块后,发送模块将并行数据装入锁存器 thr 中,然后在移位寄存器 tsr 中将数据移位,
9、产生完整的发送序列 (包括起始位,数据位,奇偶校验位和停止位),以相应波特率从 tx 发送。发送模块的输入时钟 mclkx16是串行数据波特率的 16 倍,模块内部将其 16 分频后得到波特率时钟 txclk。图 1接收模块接收模块也分为空闲、检测起始位、移位等 3 种模式。如图 2 所示。首先捕捉起始位,在 mclkx16 时钟下不断检测从 rx 端输入数据的起始位,当检测到起始位后,接收模块由空闲模式转换为移位模式,并且 16 分频 mclkx16产生 rxclk 波特率时钟。此时 rxclk 时钟的上升沿位于串行数据每一位的中间,这样接下来的数据在每一位的中点采样。然后由 rxclk 控
10、制在上升沿将数据位写入移位寄存器 rgr 的 rsr7位,并且 rsr 右移 1 位,依次将 8 位数据全部写入rsr,并且停止产生 rxclk 波特率时钟。判断奇偶校验、帧结构和溢出标志正确后,rsr 寄存器中的数据写入 rhr 数据锁存寄存器中,最后由 8 位数据总线输出转换完成的数据。图 2五、系统设计及硬件验证整个系统框图如下接受部分端口说明:端口 宽度 方向 功能Clk 1 输入 时钟Rst 1 输入 全局复位信号Rxd 1 输入 转换允许信号Rdn 1 输入 输入数据Dout70 8 输出 输出数据Interupt 1 输出 中断指示Error 1 输出 错误标志Parity 1
11、输出 奇偶校验位发送部分端口说明:端口 宽度 方向 功能Clk 1 输入 时钟Rst 1 输入 全局复位信号Wrn 1 输入 允许转换信号Din 1 输入 输入数据PC 机电平转 换中断指示错误指示ClkRstRxdRdnDout70InteruptErrorParityDinClkDataRstwrnThreTsteTxd接受器发送器LED显示CLK50MHzRESET低电平有效Data 1 输入 数据传入寄存器信号Txd 8 输出 输出数据Tbre 1 输出 并串转换标志信号Tsre 1 输出 工作过程标志验证方法将 UART 的程序编译、仿真后,下载到 FPGA 的芯片上。引入 50 M
12、Hz 的晶振频率;发送使能端和复位端分别接一个开关;状态输出标志 TRE 和DATA-READTY 分别接一个 二极管,指示状态;串行数据帧的格式为:起始位0,8 位数据位,无校验位,1 位停止位。将 UART 的串行发送、接收端口分别与计算机的 RS-232 的串行接收、发送端口连接,以便与 PC 机进行串行通信;并行输入 DIN 接入并行输出 DOUT;连好线后,执行发送测试程序。在 PC 机上输入一数字,对应的 LED 点亮,且每发送一次数据,系统的的中断指示灯就会点亮一次,反复在 PC 上输入数据进行验证,如果有错误,系统要给与提示(可用 led 或蜂鸣器) 。小组成员:杜博,傅彬彬,李超轶,李亚军,罗永亮,薛洪亮,徐立佳