2.4 MODEM控制器模块
在UART中,MODEM控制器模块的作用是用来和外部的调制解调器或者其他的UART设备进行通信,它主要通过MODEM控制器和MODEM状态寄存器来进行具体操作。MODEM控制器用来控制DTRn(Data Terminal Ready)和RTSn(Request To Send)的输出状态。DCDn(Data Carrier Detect)、CTSn(ClearTo Send)、DSRn(Data Set Ready)和RIn(Ring Indieator)的线性状态由MODEM控制模块来监控,同时存储于MODEM状态寄存器中。
3 基于UART的FPGA设计验证方法
对于大多数FPGA设计来讲,UART也可以作为设计模块与PC的接口嵌入到FPGA芯片当中,通过RS 232接口连接到计算机,使用相关的串口调试软件即可在计算机上对FPGA进行数据的输入,并且在显示器上直接观察到其输出的结果,这样就衍生出一种针对FPGA设计功能验证的直观有效的方法,即基于UART与串口调试软件的功能验证方法。该方法的关键在于如何将UART嵌入待验证的模块,本文以卷积编码加交织模块为例,详细介绍其与UART的连接方法,连接示意图如图3所示。
在本方案中,每次实验由键盘输入26 b数据,通过串口调试软件和UART发送到FPGA芯片,经码率为1/2的卷积编码后得到52 b数据进行交织,交织后的数据分为4 b一组送到UART发送模块,经UART通过串口发送到计算机上,最终在屏幕上看到编码和交织的结果。
卷积编码模块采用Xilinx的IP核实现,该模块要求串行输入,而UART接收模块的输出为8位并行数据,故在他们之间加上并串转换模块。随着每一次并行数据的写入,并串转换模块会接收到一个写入的指示信号,同时开始顺序输出8位串行数据到卷积编码模块。卷积编码器的输出是2位并行数据,由于先前的接收模块及串并转换模块每次处理8 b数据的关系,故可以认为卷积编码器每次连续输出8个2位并行数据,而我们的系统要求每26个输入比特进行一次卷积编码和交织,所以在编码和交织之间连接一个FIFO作为数据缓冲,累计到26 b数据后输出一次,同时设置其输入为2 b并行,输出为串行,即实现了并串转换的功能,满足了交织器串行数据输入的要求。最后发送回计算机的数据为52 b,所以对UART发送模块作了简单的修改,使其每次发送4 b数据,这样就可以将52 b分13次发完,同时为了实现交织器输出的连续数据与UART的衔接,我们在此处再加一个FIFO作为缓冲以及串并转换,将输入的串行数据变为4 b并行数据逐次发送。
这些模块的工作都由一些控制信号来指示,所以本例中采用了一个自己编写的控制信号模块来生成这些指示信号,比如每次UART接收到数据后即产生一个写入信号指示串并转换模块开始工作,同时在其输出有效时产生信号告诉编码器开始工作;同理,两个FIFO何时接收数据、何时输出数据以及交织器何时工作都受该模块产生的信号控制,这样,就能够保证多个模块协调统一的工作。
将输入数据1101 0101 0101 1101 0111 1111 011001通过计算机发送到UART,按照每帧8 b的要求将该26 b的数据补0至32位,得到数据1101 0101 01011101 0111 1111 0110 0100 0000,转换成16进制为D55D7F40,写入FPGA进行编码交织再经由UART传回计算机得数据0D 0E 06 0B 00 0C 0C 09 03 0C 040C 0D,如图4所示。每8位数据取后4位得D E 6 B 0C C 9 3 C 4 C D,转换为二进制得1101 1110 0110 10110000 1100 1100 1001 0011 1100 0100 1100 1101。通过Matlab进行理论验证,确为我们采用的(2,1,7)卷积编码(171,133)再经交织后得到的输出。同时该实验也验证了UART在实际应用中的效果。
4 结 语
使用FPGA实现UART模块的功能,可以减小系统面积,降低功耗,同时使得设计更加紧凑和稳定。本文使用VHDL语言在Xilinx公司FPGA芯片Vertax II Pro上实现了标准UART模块并加以验证,在某些具体应用中,也可以将本实现中的发送和接收模块单独使用,进一步体现了FPGA设计的灵活性。此外,本设计的验证方案也能够用来验证FPGA设计的功能,只要将UART集成在需要验证的模块上,就可以通过连接开发系统与计算机,在PC终端方便地观察系统的输入和输出,为FPGA设计的功能验证提出了新的方法。