FPGA-UART协议与实现学习笔记

      上一段时间学习了一下FPGA,现在写一些学习心得,以及自已在学习的过程之中遇到的一些问题。

      首先介绍一下UART(Universal Asynchronous Receiver/Transmitter)通用异步收发传输器。将数据在串行通信和并行通信之间的传输转换。也就是说把多比特的数据转化为单比特的数据,或者把单比特的数据转化为多比特的数据。工作原理也就是把每一个比特一位接一位的传输的过程。UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。RS232是UART的一种,是目前最常用的一种串行通讯接口,用于PC机与跟外部板级通信。至于具体内容可以自行百度,下面我就来讲一讲主要做了什么。

     具体就是运用RS232与串口调试助手,实现PC机与FPGA开发板上的通信。首先要进行通行我们就必须知道我们需要传输什么数据,以及需要用多少的速率来传输这些数据,这里我们选用9600的波特率来传输。波特率是什么?波特率指的是单片机或者计算机在串口通信时的速率。指的是信号被调制以后在单位时间内的变化,即单位时间内载波的参数变化的次数。打个比方就是,比如载波是一条传输带,然后我们要传输的数据就是一个一个的货物类似为正方形,以1s作为单位时间,然后我们的波特率就是指在一秒中之内,这条传输带传送的货物数量。如每秒钟传输240个字节,而每个字符格式包含10位(为什么会是10位详见RS232通行协议)。也就是说1秒钟可以传输10×240=2400位,那么此时波特率就是2400波特。

    下面就是如何在FPGA上面实现这个通信。首先我们需要知道FPGA系统时钟是多少,在这里系统时钟是50MHZ,也就是一个周期时间是20ns。整个实验流程是一开始从串口调试助手选择9600的波率通过PC端的TX线传送给FPGA端的RX线。我们是对FPGA进行操作,在这一步我们只需要考虑,FPGA板怎样完整的接收到PC端传输来的数据信号。首先计算一下发送一个位数需要多久时间。1s中之内可以传输9600位,也就是传输1位需要1/9600s,FPGA系统时钟周期为20ns,也就是发送一位的时间应该为1/9600s/20ns=5208个时钟周期,我们需要采样这个信号,只需要在这一段时间之内,让RX线赋值给我们自己所设置的寄存器就可以。但是为了更加准确,我们选择在发送时间的中间部位进行采样,也就是在2604的计数时钟进行采集,这样可以保证我们采集的数据位准确无误。所以我们要做的就是设计一个满足RS232协议的接收模块。然后会很轻松的确定输入信号,输出信号,以及设置寄存器。下面是我的部分时序。

      

 

posted @ 2018-09-02 20:59  Freaco  阅读(270)  评论(0编辑  收藏  举报