问答 店铺
热搜: ZYNQ FPGA discuz

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

微信扫一扫 分享朋友圈

已有 89 人浏览分享

开启左侧

[MILIANPAI-F01-EG4D]FPGA程序设计基础实验连载-12串口程序收发环路设计

[复制链接]
89 0
安路-FPGA课程
安路课程: 基础入门 » 新手入门实验
安路系列: EG4
本帖最后由 UT发布 于 2025-4-10 16:19 编辑

软件版本:TD_5.6.4_Release_97693
操作系统:WIN11 64bit
硬件平台:适用安路(Anlogic)FPGA
登录米联客”FPGA社区-www.uisrc.com视频课程、答疑解惑!
1概述

前面两课,我们完成了我们发送程序的测试,成功给PC主机发送了“HELLO FPGA的信息,主机显示接收成功。但是我们串口接收的程序仅仅是通过我们模拟仿真,虽然仿真结果达到了期望,但是不能直接上板测试难免差强人意。所以我们不妨将我们串口UART接收程序以及发送程序连接起来,做到能将PC端通过USB发送过来的数据接收,然后将接收到的数据再通过发送程序返回给我们的PC机。

在完成本实验前,请确保已经完成前面的实验,包括已经掌握以下能力:

1:完成了TD软件安装

2:完成了modelsim安装以及TD库的编译

3:掌握了TD仿真环境的设置

4:掌握了modelsim通过do文件启动仿真


实验目的:

1:实现UART串口发送控制器的设计

2:实现主程序中调用串口发送控制器发送字符“HELLO FPGA”

3:实用modelsim完成仿真验证

4:编译并且固化程序到FPGA验证

1.1 UART收发环路简介

电脑USB口和FPGA串口通信示意图:

image.jpg

一般RS232只使用到TXD和RXD两个信号,两个设备之间的TXDRXD必须交叉连接,例如对于PCTX 要和FPGA的RX连接,同样PCRX要和FPGATX连接才可以正常通信

image.jpg
1.2硬件电路分析

参照 “UART串口发送驱动设计”硬件电路分析部分

2 UART收发环路程序设计

在完成以下实验前,请确保已经完成了“UART串口发送实验“UART串口接收实验

2.1系统框图

上位机通过串口发送数据到FPGA开发板的UART数据接收模块,将串口接收端口(I_uart_rx)的串行数据解析回并行数据输出,再将并行数据作为输入给数据发送模块,UART数据发送模块将并行数据转成串行数据发送回上位机。通过串口发送端口(O_uart_tx把数据发回到串口芯片,之后数据在串口调试助手上打印,实现环路测试。需要注意的是,数据并不是一直有效的,所以将UART数据接收模块的数据有效信号(O_uart_rvalid)接入到UART数据发送模块的发送数据请求信号(I_uart_wreq,当接收的信号有效时,触发UART数据发送模块,就可以发送接收的有效数据。对于发送驱动模块中的O_uart_wbusy信号,不需要使用,因为这里uart发送模块是被动发送。


image.jpg
2.2驱动源码

顶层模块只需要调用uart发模块驱动接口。并且设置uart_rdatauart_wdata互联,uart_wrequart_rvalid互联

  1. module uart_top
  2. (
  3. input I_sysclk,//系统时钟输入
  4. input I_uart_rx,//uart rx接收信号
  5. output O_uart_tx //uart tx发送信号
  6. );
  7. localparam SYSCLKHZ = 25_000_000; //系统输入时钟
  8. reg [11:0] rstn_cnt = 0;//上电后延迟复位
  9. wire uart_rstn;//内部复位信号
  10. wire uart_wreq,uart_rvalid;
  11. wire [7:0]uart_wdata,uart_rdata;
  12. assign uart_wreq = uart_rvalid;//用uart rx接收数据有效的uart_rvalid信号,控制uart发送模块的发送请求
  13. assign uart_wdata = uart_rdata; //接收的数据给发送模块发送
  14. assign uart_rstn = rstn_cnt[11];//延迟复位设计,用计数器的高bit控制复位
  15. //同步计数器实现复位
  16. always @(posedge I_sysclk)begin
  17.    if(rstn_cnt[11] == 1'b0)
  18.      rstn_cnt <= rstn_cnt + 1'b1;
  19.    else
  20.      rstn_cnt <= rstn_cnt;
  21. end
  22. //例化uart 发送模块
  23. uiuart_tx#
  24. (
  25. .BAUD_DIV(SYSCLKHZ/115200-1)  
  26. )
  27. uart_tx_u
  28. (
  29. .I_clk(I_sysclk),//系统时钟输入
  30. .I_uart_rstn(uart_rstn), //系统复位
  31. .I_uart_wreq(uart_wreq), //uart发送驱动的写请求信号,高电平有效
  32. .I_uart_wdata(uart_wdata), //uart发送驱动的写数据
  33. .O_uart_wbusy(),//uart 发送驱动的忙标志
  34. .O_uart_tx(O_uart_tx)//uart 串行数据发送
  35. );
  36. //例化uart 接收
  37. uiuart_rx#
  38. (
  39. .BAUD_DIV(SYSCLKHZ/115200-1)  
  40. )
  41. uiuart_rx_u
  42. (
  43. .I_clk(I_sysclk), //系统时钟输入
  44. .I_uart_rx_rstn(uart_rstn),//系统复位
  45. .I_uart_rx(I_uart_rx), //uart 串行数据接收
  46. .O_uart_rdata(uart_rdata), //uart 接收数据
  47. .O_uart_rvalid(uart_rvalid)//uart 接收数据有效,O_uart_rvalid =1'b1 O_uart_rvalid输出的数据有效
  48. );
  49. endmodule
复制代码
3 FPGA工程

fpga工程的创建过程不再重复,如有不清楚的请看前面实验,具体的FPGA型号以对应的开发板上芯片为准

image.jpg

米联客的代码管理规范,在对应的FPGA工程路径下创建uisrc路径,并且创建以下文件夹

01_rtl:放用户编写的rtl代码

02_sim:仿真文件或者工程

03_ip:放使用到的ip文件

04_pin:fpgapin脚约束文件或者时序约束文件

05_boot:放编译好的bit或者bin文件(一般为空)

06_doc:放本一些相关文档(一般为空)

image.jpg
4 Modelsim仿真4.1准备工作

Modelsim仿真的创建过程不再重复,如有不清楚的请看前面实验


仿真测试文件源码如下:

  1. `timescale 1ns / 1ns
  2. module uart_top_tb;
  3. reg   I_sysclk;
  4. reg   I_uart_rx;
  5. wire  O_uart_tx;
  6. uart_top u_uart_top
  7. (
  8. .I_sysclk       (I_sysclk),
  9. .I_uart_rx      (I_uart_rx),
  10. .O_uart_tx      (O_uart_tx)
  11. );
  12. parameter FREQ      = 25000000;
  13. parameter BAUD      = 115200;
  14. parameter TBAUD     = FREQ/BAUD*40;
  15. initial
  16. begin
  17.       I_sysclk  = 0;
  18.                   I_uart_rx = 1'b1;
  19.             #200000 // Wait  for global reset to finish
  20.                     #TBAUD
  21.                     I_uart_rx = 1'b1;
  22.                     #TBAUD
  23.         I_uart_rx = 1'b0;//start
  24.         //1001_0101
  25.         #TBAUD
  26.         I_uart_rx = 1'b1;
  27.          #TBAUD
  28.         I_uart_rx = 1'b0;
  29.          #TBAUD
  30.         I_uart_rx = 1'b1;
  31.          #TBAUD
  32.         I_uart_rx = 1'b0;
  33.          #TBAUD
  34.         I_uart_rx = 1'b1;
  35.          #TBAUD
  36.         I_uart_rx = 1'b0;
  37.          #TBAUD
  38.         I_uart_rx = 1'b0;
  39.          #TBAUD
  40.         I_uart_rx = 1'b1;        
  41.          #TBAUD
  42.         I_uart_rx = 1'b1;//stop            
  43.          #808320
  44.         //00000101
  45.         I_uart_rx = 1'b0;//start
  46.         #TBAUD
  47.         I_uart_rx = 1'b1;
  48.          #TBAUD
  49.         I_uart_rx = 1'b0;
  50.          #TBAUD
  51.         I_uart_rx = 1'b1;
  52.          #TBAUD
  53.         I_uart_rx = 1'b0;
  54.          #TBAUD
  55.         I_uart_rx = 1'b0;
  56.           #TBAUD
  57.         I_uart_rx = 1'b0;
  58.           #TBAUD
  59.         I_uart_rx = 1'b0;
  60.           #TBAUD
  61.         I_uart_rx = 1'b0;        
  62.            #TBAUD
  63.         I_uart_rx = 1'b1;//stop   
  64.         
  65.            #808320
  66.       //10000100
  67.         I_uart_rx = 1'b0;//start
  68.         #TBAUD
  69.         I_uart_rx = 1'b0;
  70.         #TBAUD
  71.         I_uart_rx = 1'b0;
  72.         #TBAUD
  73.         I_uart_rx = 1'b1;
  74.         #TBAUD
  75.         I_uart_rx = 1'b0;
  76.         #TBAUD
  77.         I_uart_rx = 1'b0;
  78.         #TBAUD
  79.         I_uart_rx = 1'b0;
  80.         #TBAUD
  81.         I_uart_rx = 1'b0;
  82.         #TBAUD
  83.         I_uart_rx = 1'b1;           
  84.         #TBAUD
  85.         I_uart_rx = 1'b1;//stop                     
  86. end
  87. always
  88.     begin
  89.         #20 I_sysclk = ~I_sysclk;
  90.     end
  91.    
  92. endmodule
复制代码
4.2启动modelsim仿真

启动后,右击需要观察的信号,添加到波形窗口

image.jpg

设置restart

image.jpg

设置运行2ms(如果时间太长需要找下数据位置,时间太短需要继续跑直到波形出来)

image.jpg
image.jpg
5下载演示

下载程序前,先确保FPGA工程已经编译。

5.1硬件连接

(该教程为通用型教程,教程中仅展示一款示例开发板的连接方式,具体连接方式以所购买的开发板型号以及结合配套代码管脚约束为准。)

请确保下载器和开发板已经正确连接,并且开发板已经上电(注意JTAG端子不支持热插拔,而USB接口支持,所以在不通电的情况下接通好JTAG后,再插入USB到电脑,之后再上电,以免造成JTAG IO损坏)

image.jpg
5.2运行结果
image.jpg









































您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

0

粉丝

293

主题
精彩推荐
热门资讯
网友晒图
图文推荐

  • 微信公众平台

  • 扫描访问手机版