赞
踩
PC端通过串口模块UART_RX发送读写命令以及数据到Cmd_encode模块,由后者分离出数据存入wfifo模块,剩下的读写命令传送到Sdram_top模块对SDRAM进行写操作或者从SDRAM读数据到rfifo模块并通过UART_TX模块将数据送出到PC端。
主体代码(见本文最后)由六个时序逻辑块组成,对波特计数器、接收信号线标志位、比特计数器、接收数据、以及Po标志位进行操作,使其能够遵从固定的时序逻辑(图1.2),完成串口的接收功能。
测试代码主要由两个task组成,从txt文件中读取待传输数据,然后按位、按每位560个时钟周期的时序发送。仿真结果如下图1.3所示。
观察到rx_data信号端口已输出预先设定好的数据(h55 h12 h34 haa)。
主体代码主要由六个时序模块组成,分别对数据发送寄存器、数据发送标志位、波特计数器、比特标志位、串口发送端进行设置,使其能够遵从图1.4所示的时序逻辑,完成串口的发送功能。
测试代码将固定的数据(如:h55)送入UART_TX模块的Tx_data端并在tx_trig端给到一个小脉冲用以激活发送模块,仿真结果如图1.5所示。
可以观察到rs232_tx端口已输出给定数据(h55)。
整合两个模块使PC端与FPGA能够通过串口进行通信,如图1.6所示将po_flag与tx_trig,rx_data与tx_data相连,外部只留出时钟信号线、复位信号线以及数据的输入输出信号线。
1、采样时间点的选择:应在rs232_tx信号线每一位的最中间进行采样,这样能得到最稳定的信号
2、时钟周期的计算:串口每发送一位数据所占用的FPGA的时钟周期计算公式为:
一
位
数
据
占
用
时
钟
周
期
=
系
统
时
钟
串
口
波
特
率
一位数据占用时钟周期 = \frac{系统时钟}{串口波特率}
一位数据占用时钟周期=串口波特率系统时钟
例如:波特率为9600的串口每发送一位数据占用50M Hz FPGA时钟周期数为
50
×
1
0
6
9600
≈
5280
\frac{50 \times10^6}{9600}\approx5280
960050×106≈5280
3、编写UART_RX与UART_TX的目的在于让PC与FPGA能够通过统一的通信标准——串口通信进行数据的交流,在对两个模块进行整合后由于没有FPGA板子进行测试,所以又编写了一个测试文件进行模拟。模拟结果如图1.7。
可以看到,在RS232模块的数据接收端rs232_rx(PC数据发送端)收到的数据与一定延迟后数据发送端rs232_tx(FPGA数据接收端)发送的数据保持一致。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。