UISRC工程师学习站

标题: 10串口程序收发环路设计 [打印本页]

作者: uisrc    时间: 2022-7-11 20:31
标题: 10串口程序收发环路设计
软件版本:Anlogic -TD5.6.1-64bit
操作系统:WIN10 64bit
硬件平台:适用安路(Anlogic)FPGA
登录"米联客"FPGA社区-www.uisrc.com视频课程、答疑解惑!
1概述
UART串口通信是应用非常广泛的一种串行异步通信方式,常用的异步串口包括RS232\RS482\RS485。
RS232的逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,下图是老式的DB9串口线。
[attach]9256[/attach]
标准的DB9接口定义如下:
序号
DB9公头
DB9母头
1
CD
载波检测
CD
载波检测
2
RXD
接收端接收
TXD
发送端发送数据
3
TXD
发送数据
RXD
接收端接收数据
4
DTR
数据终端就绪
DTR
数据终端就绪
5
GND
系统接地
GND
系统接地
6
DSR
数据准备就绪
DSR
数据准备就绪
7
RTS
发送请求
CTS
清除请求
8
CTS
清除发送
RTS
发送请求
9
RI
振铃指示器
RI
振铃指示器


实际上一般RS232只使用到TXD RXD两个信号。
[attach]9257[/attach]
    RS485/422采用差分信号负逻辑,逻辑"1"以两线间的电压差为-(2~6)V表示;逻辑"0"以两线间的电压差为+(2~6)V表示,由于采用差分方式可以具有更高的速度和更强的抗干扰能力,具有更远的传输距离。由于RS485/RS422更多出现在工业场合,因此一般采用接线端子方式接线
    老式DB9串口基本上已经消失了,但是UART串口更加广泛的实用,比如我们常见的USB串口,就是通过一颗芯片实现了通过USB接口芯片,实现了以TTL电平方式的UART串口通信。数据通过USB接口进行传输,通过UART串口芯片完成USB协议到UART串口协议的相互转换。

在完成本实验前,请确保已经完成前面的实验,包括已经掌握以下能力:
1:完成了TD软件安装
2:完成了modelsim安装以及TD库的编译
3:掌握了TD仿真环境的设置
4:掌握了modesim通过do文件启动仿真

实验目的:
1:实现UART串口发送控制器的设计
2:实现主程序中调用串口发送控制器发送字符"HELLO FPGA"
3:实用modelsim完成仿真验证
4:编译并且固化程序到FPGA验证
2UART收发环路
在完成以下实验前,请确保已经完成了"UART串口发送实验"和"UART串口接收实验"
1:系统框图
上位机通过串口发送数据到FPGA开发板的UART数据接收模块,数据接收模块接收数据后,通过UART数据发送模块把数据发回到串口芯片,之后数据在串口调试助手上打印,实现环路测试。对于发送控制器中的uart_busy信号,不需要使用,因为这里uart发送模块是被动发送。
[attach]9258[/attach]
2:顶层模块调用UART收发驱动源码
顶层模块只需要调用uart的首发模块驱动接口。并且设置uart_rdata和uart_wdata互联,uart_wreq和uart_rvalid互联。

`timescale 1ns / 1ns
module uart_top
(
input  sysclk_i,
input  uart_rx_i,
output uart_tx_o
);

reg [11:0] rstn_cnt = 0;
wire uart_rstn_i;
wire uart_wreq,uart_rvalid;
wire [7:0]uart_wdata,uart_rdata;

assign uart_wreq  = uart_rvalid;
assign uart_wdata = uart_rdata;

assign uart_rstn_i = rstn_cnt[11];

always @(posedge sysclk_i)begin
    if(rstn_cnt[11] == 1'b0)
        rstn_cnt <= rstn_cnt + 1'b1;
    else
        rstn_cnt <= rstn_cnt;
end

//uart send controller  
uiuart_tx#
(
.BAUD_DIV(25000000/115200 -1)   
)
uart_tx_u
(
.clk_i(sysclk_i),
.uart_rstn_i(uart_rstn_i),
.uart_wreq_i(uart_wreq),
.uart_wdata_i(uart_wdata),
.uart_wbusy_o(),
.uart_tx_o(uart_tx_o)
);

uiuart_rx#
(
.BAUD_DIV(25000000/115200 -1)   
)
uiuart_rx_u
(
.clk_i(sysclk_i),
.uart_rx_rstn_i(uart_rstn_i),
.uart_rx_i(uart_rx_i),
.uart_rdata_o(uart_rdata),
.uart_rvalid_o(uart_rvalid)
);

endmodule



3FPGA工程
fpga工程的创建过程不再重复,如有不清楚的请看前面实验,这里以型号为EG4D20EG176的FPGA作为演示demo
[attach]9259[/attach]
米联客的代码管理规范,在对应的FPGA工程路径下创建uisrc路径,并且创建以下文件夹
01_rtl:放用户编写的rtl代码
02_sim:仿真文件或者工程
03_ip:放使用到的ip文件
04_pin:放fpga的pin脚约束文件或者时序约束文件
05_boot:放编译好的bit或者bin文件(一般为空)
06_doc:放本一些相关文档(一般为空)
[attach]9260[/attach]
3Modelsim仿真1:准备工作
再次提醒,在进行modelsim仿真前,请提前完成,如果有不清楚的,以下3步请看前面课程内容:
1:完成了modelsim安装以及TD库的编译
2:掌握了TD仿真环境的设置
3:掌握了modesim通过do文件启动仿真

对于向执行什么级别的仿真,就执行对应的HDL2Bit Flow
当 HDL2Bit Flow 运行至 Read Design 这一步时,可执行 Behavioral Simulation;
当 HDL2Bit Flow 运行至 Optimize RTL 这一步时,可执行 Post-RTL Simulation;
当 HDL2Bit Flow 运行至 Optimize Gate 这一步时,可执行 Post-Gate Simulation;
当 HDL2Bit Flow 运行至 Optimize Routing 这一步时,可执行 Post-Route Simulation。
以执行Behavioral Simulation仿真来说,只要执行Read Design 这一步,如下图
右击FPGA Flow中 Read Design,Rerun
[attach]9261[/attach]
2:产生do文件
在tool菜单中选择simulation
[attach]9262[/attach]
我们这里也是选择已经编写好的仿真测试文件
[attach]9263[/attach]
仿真测试文件源码如下:
`timescale 1ns / 1ns

module uart_top_TB;

reg   sysclk_i;
reg   uart_rx_i;
wire  uart_tx_o;

uart_top u_uart_top
(
.sysclk_i       (sysclk_i),
.uart_rx_i      (uart_rx_i),
.uart_tx_o      (uart_tx_o)
);

parameter FREQ      = 25000000;
parameter BAUD      = 115200;
parameter TBAUD     = FREQ/BAUD*40;

initial
begin
      sysclk_i  = 0;
      uart_rx_i = 1'b1;

      #200000 // Wait  for global reset to finish

        #TBAUD
        uart_rx_i = 1'b1;
        #TBAUD
        uart_rx_i = 1'b0;//start
        //1001_0101
        #TBAUD
        uart_rx_i = 1'b1;
         #TBAUD
        uart_rx_i = 1'b0;
         #TBAUD
        uart_rx_i = 1'b1;
         #TBAUD
        uart_rx_i = 1'b0;
         #TBAUD
        uart_rx_i = 1'b1;
         #TBAUD
        uart_rx_i = 1'b0;
         #TBAUD
        uart_rx_i = 1'b0;
         #TBAUD
        uart_rx_i = 1'b1;        
         #TBAUD
        uart_rx_i = 1'b1;//stop            
         #808320
        //00000101
        uart_rx_i = 1'b0;//start
        #TBAUD
        uart_rx_i = 1'b1;
         #TBAUD
        uart_rx_i = 1'b0;
         #TBAUD
        uart_rx_i = 1'b1;
         #TBAUD
        uart_rx_i = 1'b0;
         #TBAUD
        uart_rx_i = 1'b0;
          #TBAUD
        uart_rx_i = 1'b0;
          #TBAUD
        uart_rx_i = 1'b0;
          #TBAUD
        uart_rx_i = 1'b0;        
           #TBAUD
        uart_rx_i = 1'b1;//stop  

           #808320
      //10000100
        uart_rx_i = 1'b0;//start
        #TBAUD
        uart_rx_i = 1'b0;
        #TBAUD
        uart_rx_i = 1'b0;
        #TBAUD
        uart_rx_i = 1'b1;
        #TBAUD
        uart_rx_i = 1'b0;
        #TBAUD
        uart_rx_i = 1'b0;
        #TBAUD
        uart_rx_i = 1'b0;
        #TBAUD
        uart_rx_i = 1'b0;
        #TBAUD
        uart_rx_i = 1'b1;         
        #TBAUD
        uart_rx_i = 1'b1;//stop                    
end
always
    begin
        #20 sysclk_i = ~sysclk_i;
    end

endmodule


可以看到产生的do文件中,自动添加了仿真文件、库的路径
[attach]9264[/attach]
3:启动modelsim仿真
[attach]9265[/attach]
[attach]9266[/attach]
[attach]9267[/attach]
输入do fpga_prj_behavioral_sim.do
[attach]9268[/attach]
启动后,右击需要观察的信号,添加到波形窗口
[attach]9269[/attach]
设置restart
[attach]9270[/attach]
设置运行2.2ms(如果时间太长需要找下数据位置,时间太短需要继续跑直到波形出来)
[attach]9271[/attach]
[attach]9272[/attach]
4下载演示
下载程序前,先确保FPGA工程已经编译。
1:硬件连接
请确保下载器和开发板已经正确连接,并且开发板已经上电(注意JTAG端子不支持热插拔,而USB接口支持,所以在不通电的情况下接通好JTAG后,再插入USB到电脑,之后再上电,以免造成JTAG IO损坏)

[attach]9273[/attach]
2:程序下载
单击下载按钮
[attach]9274[/attach]
可以看到已经识别到芯片,但是请注意,实际芯片是EG4D20EG176,而识别出来的变成了EAGLE_S20_EG176,但是这个不影响我们下载,所以继续。
[attach]9275[/attach]
选择bit文件
[attach]9276[/attach]
选中后单击Run
[attach]9277[/attach]
下载成功
[attach]9278[/attach]
2:运行结果
[attach]9279[/attach]
附录:常见问题1联系方式
米联客官方社区:www.uisrc.com

米联客社区FPGA/SOC QQ群:
群1:516869816         群2:543731097
群3:86730608         群4:34215299

技术微信:18951232035
技术电话:18951232035

官方微信公众号(新微信公众号):
[attach]9280[/attach]
2售后
1、7天无理由退货(人为原因除外)
2、质保期限:本司产品自快递签收之日起,提供一年质保服务(主芯片,比如FPGA 或者CPU等除外)。
3、维修换货,需提供淘宝订单编号或合同编号,联系销售/技术支持安排退回事宜。
售后维修请登录工单系统:https://www.uisrc.com/plugin.php?id=x7ree_service
4、以下情形不属于质保范畴。
A:由于用户使用不当造成板子的损坏:比如电压过高造成的开发板短路,自行焊接造成的焊盘脱落、铜线起皮 等
B:用户日常维护不当造成板子的损坏:比如放置不当导致线路板腐蚀、基板出现裂纹等
5、质保范畴外(上方第4条)及质保期限以外的产品,本司提供有偿维修服务。维修仅收取器件材料成本,往返运 费全部由客户承担。
6、寄回地址,登录网页获取最新的售后地址:https://www.uisrc.com/t-1982.html
3销售
天猫米联客旗舰店:https://milianke.tmall.com
京东米联客旗舰店:https://milianke.jd.com/
米联客生态淘宝店:https://milianke.taobao.com

销售电话:18921033576

公司地址:常州溧阳总部:常州溧阳市中关村吴潭渡路雅创高科智造谷10-1幢楼
南京研发基地:南京市栖霞区仙林大道181号5幢1820室
4在线视频
https://www.uisrc.com/video.html
5软件下载
https://www.uisrc.com/f-download.html
6经验分享
https://www.uisrc.com/f-390.html
7官方博文
https://www.uisrc.com/portal.php?mod=list&catid=35






欢迎光临 UISRC工程师学习站 (https://www.uisrc.com/) Powered by Discuz! X3.5