本科学生毕业论文

Similar documents
xilinx FPGA 串口设计笔记 在设计中, 需要用 FPGA 读取 GPS 内部的信息,GPS 的通信方式为串口, 所以在 FPGA 中移植了串口程序 本次移植的程序源代码是特权的串口程序, 本以为移植应该很快就能完成, 但其中还是出了一写小问题, 耽误了不少的时间, 下面将问题进行一个总结!

Siga-S16 FPGA开发板

Huawei Technologies Co

系统架构 - 模块划分 功能 状态机 H265 主要的模块 : 1. 顶层模块 H265ENC_top 包括 sys_ctrl,enc_core 及 fetch 三个模块 2. sys_ctrl 就是一个状态机, 控制 fetch 和 enc_core 中各子模块的工作 3. enc_core 编码

z x / +/- < >< >< >< >< > 3 b10x b10x 0~9,a~f,A~F, 0~9,a~f,A~F, x,x,z,z,?,_ x,x,z,z,?,_ h H 0~9,_ 0~9,_ d D 0~7,x,X,z,Z

128K Flash EPROM 的程序?\(Bank=64K\) 切?

第一章

图 片 展 示 : 资 源 简 介 : FPGA Altera CycloneII EP2C5T144C8 (4608 个 LE) 2 路 有 源 晶 振 (50M,25M) AS & JTAG 标 准 接 口 VGA 接 口 UART 接 口 蜂 鸣 器 8bit 并 行 DAC 8 路 按 键

勞動條件檢查執行重點(雲林)_ [相容模式]

醋 水 法 在 水 盆 內 放 入 約 七 分 滿 的 水 與 1/2 到 1 小 杯 的 醋 量, 將 髒 襪 子 浸 泡 一 晚, 隔 天 再 丟 入 洗 衣 機, 就 能 洗 得 相 當 乾 淨 醋 有 殺 菌 除 臭 和 漂 白 功 效, 使 用 過 的 醋 水, 還 可 清 理 地 板,

穨 PDF

第一冊 第四章 分裂與再統一 班級 座號 姓吊

本科学生毕业论文

Microsoft Word 箕æ−¥ï¼‹å®ı稿;

98年度即測即評學科測試與即測即評即發證技術士技能檢定簡章

Microsoft Word - FPGA的学习流程.doc

untitled

untitled

FPGAs in Next Generation Wireless Networks WPChinese

2. initial always initial always 0 always initial always fork module initial always 2 module clk_gen_demo(clock1,clock2); output clock1,clock2; reg cl

手册 doc

行业

本实验需要用到两个特征值, 两个特征值的属性各不相同, 我们同样在 SimpleGATTProfile 中新建即可, 接下来就开始吧 新建特征值表 : 表 3.3 串口透传特征值属性 长度 属性 UUID 功能 (byte) SIMPLEPROFILE_CHA R6 15 可读可写 FFF6 服务器

第一章.doc

audiogram3 Owners Manual

行业

Process Data flow Data store External entity 6-10 Context diagram Level 0 diagram Level 1 diagram Level 2 diagram

1

Microsoft Word - Delta Controller ASCII_RTU_SC

行业

9 什 么 是 竞 争 与 冒 险 现 象? 怎 样 判 断? 如 何 消 除?( 汉 王 笔 试 ) 在 组 合 逻 辑 中, 由 于 门 的 输 入 信 号 通 路 中 经 过 了 不 同 的 延 时, 导 致 到 达 该 门 的 时 间 不 一 致 叫 竞 争 产 生 毛 刺 叫 冒 险 如

CC213

untitled

邏輯分析儀的概念與原理-展示版


Microsoft Word - SC16C550应用实例.doc

untitled

行业

PROFINET到MODBUS协议网关

01

程式人雜誌

PowerPoint Presentation

STEP-MAX10 V2软件手册

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复


Electrical and Optical Clock Data Recovery Solutions - Data Sheet

Ps22Pdf

Microsoft Word - 目次範例-catalog doc

第 卷 第 期 年 月 半 导 体 学 报! " # $%&'%' $!&' #% #$1 /#1 $'! / ?/ ?/ / 3 0,?/ ) * +!!! '!,!! -. & ' $! '! 4% %&1)/1(7%&)03 (% )

untitled

W7500EVB 开发指南 ( 库函数版 ) 第五章串口试验 前面几章介绍了 W7500 的 IO 口操作 本章教大家如何使用 W7500 的串口来发送和接收数据 本章将实现如下功能 :W7500 通过串口和上位机的对话,W7500 在收到上位机发过来的字符串后, 原原本本的返回给上位机 本章分为如

自动化接口

樣 的 深 不 管 是 怎 樣, 對 方 真 的 要 結 束 同 居 關 係, 真 的 都 會 好 好 講 清 楚 和 溝 通, 傷 害 是 一 定 會 有, 但 不 要 用 到 雙 方 像 敵 人 一 樣, 這 樣 對 雙 方 來 說, 有 什 麼 意 義 存 在 呢?! 因 為 彼 此 之 間

ebook122-11

ebook122-3

CH01.indd

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

untitled

<4D F736F F D FB971BEF7BB50B971A46CB8735FB773A55FA5ABA5DFB7E7AADAB0AAAFC5A475B77EC2BEB77EBEC7AED55FA97EAE61C0F4B9D2B4BCBC7AB1B1A8EEA874B2CE2E646F63>

SMART 7P 0 HR7P OTPMCU A/D I/O OTP ROM RAM HR7P HR7P HR7PPMB MSOP0 7+input HR7PPSC HR7PPSD SOP SOP6 +input input HR7PERB SSOP0 7

OB1

串口通信模块说明书

Microsoft Word - MAN2011A_CH_RTT.doc

JLX


Infrared Temperature Sensor 用户手册 Infrared Temperature Sensor 用户手册 产品特点 本模块是一款非接触式红外温度传感器, 能根据被测物体的红外辐射能量大小和波长分布来检测物体的表面温度 通讯接口是 SMBus, 支持 PWM 输出 传感器具体

Transcription:

第六章 UART 串口驱动设计 6.1 硬件分析 Mis603 使用 PL2303 桥接芯片, 将串口转 USB 这样做的好处在于, 不局限于台式机的使用 由于现在笔记本并没有传统意义上的 9 针串口接口, 故使用串口转 USB, 兼容台式机和笔记本 但无论使用何种桥接芯片, 其通信协议仍然保持一致 利用该芯片, 完成硬件调试之后, 只需安装完合适的驱动, 即可实现串口进行数据通信 具体的设计电路, 参见 Mis603 底板 其原理图如下所示 : 6.2 时序设计 在进行具体的串口设计之前, 先了解串口通信协议 通常串口的一次发送或接收由四个部分组成 : 起始位 S( 一般为逻辑 0 ) 数据位 D0~D7( 一般为 6 位 ~8 位之间可变, 数据低位在前 ) 校验位 ( 奇校验 偶检验或不需要校验位 ) 停止位( 通常为 1 位 1.5 位 2 位 ) 停止位必须为逻辑 1 在一次串口通信过程中, 数据接收与发送双方没有共享时钟, 因此, 双方必须协商好数据传输波特率 波特率即数据传输速率 根据双方协议好的传输速率, 接收端即可对发送端的数据进行采样 常见的波特率标准为 300bps,600bps,800bps,9600bps,19200bps 等 当然更块的速度意味着对采样的要求更高, 有可能误码率会逐渐提高 通常对串口进行数据采样, 采用更高频的时钟 这样做的目的是采用高频时钟来锁存低频时钟, 减少数据的误码率, 增加接收模块的自纠错能力 具体的工作流程为 : 发送端按照预先设定好的波特率, 发送起始位 (Start)+ 数据位 (data)+ 奇偶校验位 + 结束位 其中, 起始位为逻辑 0, 结束位为逻辑 1, 发送端在空闲状态为 1 发送数据包格式如下图所示 接收端通过检测电平 1 到 0 的跳变来确定一个数据包的开始 确定开始位接收完 成之后, 依次接收数据, 使用更高的采样时钟, 完成数据采集 接收完数据位后, 继续接收奇 偶校验位和停止位 串口的接收与发送, 其主要时序设计包括两个部分 :1 波特率的产生时序 ;2 数据传 官方论坛 :www.osrc.cn 第 105 共 262

输时序, 包括接收与发送 波特率产生时序设计 :FPGA 输入时钟 50Mhz, 为得到常用的波特率, 仍然采用计数分频来得到 BAUD_DIV=50_000000/ 波特率 其中采样中心点为发送或接收时钟的中心点, 即 BAUD_DIV_CAP=50_000000/(2* 波特率 ) 该部分在数据接收和发送部分均单独完成 数据接收模块 : 在设置好传输波特率的情况下, 根据串口传输时序, 进行解串 空闲状态时, 接收数据为逻辑高电平, 等待起始位逻辑低电平的到来 当起始位到达后, 由低位到高位, 依次采集 8 位数据, 并进行相应的解串, 存入临时寄存器 接收有效数据完成后, 判断结束位, 接收完毕 数据发送模块 : 设置发送使能信号和待发送的数据 通过计数器, 表示 10 个数据发送的周期 这 10 个数据, 依次为起始位 +8 位数据位 +1 位结束位, 实现数据位的逐个发送 本设计中, 采用 PC 机的串口调试助手, 发送数据位至 FPGA,FPGA 接收到数据位之后, 立即回传至 PC 机 具体的设计原理和代码思路, 在后续章节逐一介绍 6.3 程序源码 数据接收文件 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: 南京米联电子科技有限公司 // Engineer:Milinker_XU // WEB:www.milinker.com // BBS:www.osrc.cn // Create Date: 20:12:50 09/12/2015 // Design Name: uart_rx_path // Module Name: uart_rx_path // Project Name: uart_top // Target Devices: XC6SLX16-FTG256/XC6SLX25-FTG256 Mis603 // Tool versions: ISE14.7 // Description: 串口数据接收路径 // Revision: V1.0 // Additional Comments: ////////////////////////////////////////////////////////////////////////////////// module uart_rx_path( input clk_i, input uart_rx_i, ); output [7:0] uart_rx_data_o, output uart_rx_done, output baud_bps_tb //for simulation parameter [12:0] BAUD_DIV = 13'd5208;// 波特率时钟,9600bps,50Mhz/9600=5208 parameter [12:0] BAUD_DIV_CAP = 13'd2604;// 波特率时钟中间采样点,50Mhz/9600/2=2604 官方论坛 :www.osrc.cn 第 106 共 262

reg [12:0] baud_div=0; // 波特率设置计数器 reg baud_bps=0; // 数据采样点信号 reg bps_start=0; // 波特率启动标志 if(baud_div==baud_div_cap) // 当波特率计数器计数到采样点时, 产生采样信号 baud_bps baud_bps<=1'b1; baud_div<=baud_div+1'b1; else if(baud_div<baud_div && bps_start)// 当波特率计数器启动时, 计数器累加 baud_div<=baud_div+1'b1; baud_bps<=0; else baud_bps<=0; baud_div<=0; reg [4:0] uart_rx_i_r=5'b11111; // 数据接收缓存器 uart_rx_i_r<={uart_rx_i_r[3:0],uart_rx_i}; // 数据接收缓存器, 当连续接收到五个低电平时, 即 uart_rx_int=0 时, 作为接收到起始信号 wire uart_rx_int=uart_rx_i_r[4] uart_rx_i_r[3] uart_rx_i_r[2] uart_rx_i_r[1] uart_rx_i_r[0]; reg [3:0] bit_num=0; reg uart_rx_done_r=0; reg state=1'b0; // 接收数据个数计数器 // 数据接收完成寄存器 reg [7:0] uart_rx_data_o_r0=0;// 数据接收过程中, 数据缓存器 reg [7:0] uart_rx_data_o_r1=0;// 数据接收完成, 数据寄存器 uart_rx_done_r<=1'b0; case(state) 官方论坛 :www.osrc.cn 第 107 共 262

1'b0 : if(!uart_rx_int)// 当连续接收到五个低电平时, 即 uart_rx_int=0 时, 作为接收到起始信号, 启动波特率时钟 bps_start<=1'b1; state<=1'b1; 1'b1 : if(baud_bps) // 每次等待波特率采样中心时, 接收数据, 放入数据缓存器中 bit_num<=bit_num+1'b1; if(bit_num<4'd9) // 接收 1bit 起始信号,8bit 有效信号,1bit 结束信号 uart_rx_data_o_r0[bit_num-1]<=uart_rx_i; else if(bit_num==4'd10) // 接收完成时候, 接收数据个数计数器清零, 产生接收完成标志位, 并将数据写入数据寄存器, 关闭波特率时候 bit_num<=0; uart_rx_done_r<=1'b1; uart_rx_data_o_r1<=uart_rx_data_o_r0; state<=1'b0;// 进入状态 0, 再次循环检测 bps_start<=0; default:; case assign baud_bps_tb=baud_bps;//for simulation assign uart_rx_data_o=uart_rx_data_o_r1; assign uart_rx_done=uart_rx_done_r; module 数据发送文件 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: 南京米联电子科技有限公司 // Engineer:Milinker_XU // WEB:www.milinker.com // BBS:www.osrc.cn // Create Date: 20:18:50 09/12/2015 // Design Name: uart_tx_path // Module Name: uart_tx_path // Project Name: uart_top // Target Devices: XC6SLX16-FTG256/XC6SLX25-FTG256 Mis603 // Tool versions: ISE14.7 官方论坛 :www.osrc.cn 第 108 共 262

// Description: 串口数据发送路径 // Revision: V1.0 // Additional Comments: ////////////////////////////////////////////////////////////////////////////////// module uart_tx_path( input clk_i, input [7:0] uart_tx_data_i, input uart_tx_en_i, // 待发送数据 // 发送发送使能信号 ); output uart_tx_o parameter BAUD_DIV = 13'd5208;// 波特率时钟,9600bps,50Mhz/9600=5208, 波特率可调 parameter BAUD_DIV_CAP = 13'd2604;// 波特率时钟中间采样点,50Mhz/9600/2=2604, 波特率可调 reg [12:0] baud_div=0; // 波特率设置计数器 reg baud_bps=0; // 数据发送点信号, 高有效 reg [9:0] s_data=10'b1111111111;// 待发送数据寄存器,1bit 起始信号 +8bit 有效信号 +1bit 结束信号 reg [3:0] bit_num=0; // 发送数据个数计数器 reg uart_s_flag=0; // 数据发送标志位 reg uart_tx_o_r=1; // 发送数据寄存器, 初始状态位高 if(baud_div==baud_div_cap) // 当波特率计数器计数到数据发送中点时, 产生采样信号 baud_bps, 用来发送数据 baud_bps<=1'b1; baud_div<=baud_div+1'b1; else if(baud_div<baud_div && uart_s_flag)// 数据发送标志位有效期间, 波特率计数器累加, 以产生波特率时钟 baud_div<=baud_div+1'b1; baud_bps<=0; else baud_bps<=0; baud_div<=0; 官方论坛 :www.osrc.cn 第 109 共 262

if(uart_tx_en_i) // 接收数据发送使能信号时, 产生数据发送标志信号 uart_s_flag<=1'b1; s_data<={1'b1,uart_tx_data_i,1'b0};// 待发送数据寄存器装填,1bit 起始信号 0+8bit 有效信号 +1bit 结束信号 else if(bit_num==4'd10) // 发送结束时候, 清楚发送标志信号, 并清楚待发送数据寄存器内部信号 uart_s_flag<=1'b0; s_data<=10'b1111_1111_11; if(uart_s_flag) // 发送有效时候 if(baud_bps)// 检测发送点信号 if(bit_num<=4'd9) uart_tx_o_r<=s_data[bit_num]; // 发送待发送寄存器内数据, 从低位到高位 bit_num<=bit_num+1'b1; else if(bit_num==4'd10) bit_num<=4'd0; else uart_tx_o_r<=1'b1; // 空闲状态时, 保持发送端位高电平, 以备发送时候产生低电平信号 bit_num<=0; assign uart_tx_o=uart_tx_o_r; 官方论坛 :www.osrc.cn 第 110 共 262

module 6.4 程序分析 接收端和发送端分别通过波特率启动信号和数据发送标志信号启动波特率时钟 串口接收数据路径, 当无数据接收是, 串口接收端 uart_rx_i 保持高电平 通过高频时钟采集 uart_rx_i 端信号, 当连续监测五个低电平时候, 表示有数据过来, 准备接收 此时, 启动接收波特率计数器, 一次接收 8 位有效数据 跳过 1bit 结束位后, 清除数据接收指示, 并将接收寄存器放入数据缓存器 uart_rx_data_o_r1 里面, 并关闭波特率计数器 串口发送数据路径, 在不发送数据时, 串口发送端口始终保持高电平 当数据待发送寄存器内装填数据完成, 且发送使能信号有效时, 先发送低电平, 再发送 8 位有效信号和 1 位结束位 同样, 发送开始之前, 启动波特率计数器, 发送结束后, 关闭波特率计数器 串口环路测试顶层设计, 接收数据完成后, 数据接收 8 位寄存器作为待发送数据, 当接收完成后, 接收完成信号作为发送使能信号, 立即开始发送已接收的数据 需要注意的是, 数据发送和接收波特率保持一致, 且接收数据和发送数据所用的时间保持一致, 接收完成立即发送, 否则会在 PC 串口调试助手接收到错误数据 本例子波特率设置为 9600bps, 连续测试时始终保持数据发送和接收正确, 工作稳定可靠 6.5 综合布线前仿真时序 为保证数据接收和发送的正确性, 分别对串口接收模块和串口发送模块, 进行了仿真 其对应的仿真测试文件, 参见工程文件夹里面的源文件 接收端仿真如下所示, 预先接收到低电平, 之后再接收 8 位有效信号, 接收寄存器得到 8bit 数据分别为 10101010 和 11110000 发送端仿真如下所示, 待发送数据为 01010101, 当发送使能信号到来之后, 发送低电平 +8 位有 效信号 +1 位结束位 串口回路仿真, 进行此项仿真, 必须注意, 保持和接收发送文件中设置的波特率一致, 即在底层文件中, 我们设置波特率为 9600bps, 那么定义的 BAUD_DIV 和 BAUD_DIV_CAP 分别为 5208 和 2604 则仿真测试文件中, 每个数据写入的时间间隔为 5208*20=104160 具体请查看工程中的 Testbench 其仿真图如下所示, 从中可以看出, 接收数据和发送数据保持一致 官方论坛 :www.osrc.cn 第 111 共 262

6.6 Chipscope 在线逻辑分析仪仿真 选用 uart_rx_done_r 作为触发信号, 发送字符 a, 从 chipscope 抓取的信号可以看出,uart_rx_data_r1 接收到 ASCII 码为 61, 证明接收正确 Chipscope 在线仿真图如下所示 其他更为具体的信号分析, 不在一一介绍了, 希望大家自行实验 6.7 输出结果 为了更具体的说明接收和发送数据的正确性, 在顶层设计了串口回传实验 选用波特率为 9600bps, 通过大量测试, 发现该设计准确可靠, 暂未发现误码 实验结果如下 6.8 小结 本章对串口协议和其他的关于串口必要的知识, 并没有具体的详细描述 如果存在不理解的地 方, 请大家参考其他更为详细的串口书籍资料 串口在工业应用中是很频繁的, 也算是 FPGA 当中, 大家必须掌握的一个接口设计 官方论坛 :www.osrc.cn 第 112 共 262