



免费预览已结束
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机与现代化 2008年第8期J ISUANJ I YU XI ANDA IHUA总第156期 文章编号 100622475 2008 0820011205 收稿日期 2007206220 基金项目 山西省留学人员科研资助项目 20042 26 作者简介 扈华 19812 男 内蒙古巴彦淖尔人 太原理工大学计算机与软件学院硕士研究生 研究方向 计算机监控系统 白凤娥 19662 女 山西临县人 教授 研究方向 计算机监控系统 嵌入式系统 基于Verilog2HDL的UART串行通讯模块设计及仿真 扈 华 白凤娥 太原理工大学计算机与软件学院 山西 太原030024 摘要 UART协议是数据通信及控制系统中广泛使用的一种全双工串行数据传输协议 在实际工业生产中有时并不使用 UART的全部功能 只需将其核心功能集成即可 波特率发生器 接收器和发送器是UART的三个核心功能模块 利用 Verilog2HDL语言对这三个功能模块进行描述并加以整合 通过Modelsim仿真 其结果完全符合UART协议的要求 关键词 UART 串行通讯 Verilog2HDL Modelsim 仿真 中图分类号 TP311 文献标识码 A Design and Simulation of UART Serial Commun ication M odule Based on Verilog2HDL HU Hua BA I Feng2e Computer and Software College Taiyuan University of Technology Taiyuan 030024 China Abstract The protocol of the UART a full2duplex data trans mission protocol iswidely used in data communication and control systems In the industry it dose not use all the functionsof theUART but the core There are three kernel functionalmodules in UARTwhich consists of baud rate generator receiver and transmitter By using the Verilog2HDL to describe the three kernel functionalmodules of the UART making them as a whole and si mulating them with the Modelsim the results of the simulation are completely consistentwith the UART protocol Key words UART serial communication Verilog2HDL Modelsim simulation 0 引 言 UART UniversalAsynchronous Receiver Transmit2 ter 协议是一种串行数据传输协议 UART允许在串 行链路上进行全双工通信 在数据通信及控制系统中 得到了广泛运用 8250 NS16450等芯片都是常见的 UART器件 这类芯片具有多种功能 还有许多辅助 模块 如FIFO 但在实际应用中有时只需要使用 UART的部分功能 因而会造成一定的资源浪费 1 使用Verilog2HDL将所需要的UART的核心功能集成 到FPGA CPLD内部 就可以实现紧凑 稳定且可靠 的UART数据传输 基本的UART通信只需要两条信号线 RxD TxD 就可以完成数据的全双工通信任务 TxD是 UART发送端 为输出 RxD是UART接收端 为输 入 2 UART的基本特点是 在信号线上共有两种状 态 分别用逻辑 1 高电平 和逻辑 0 低电平 来区 分 例如 在发送器空闲时 数据线保持在逻辑高电 平状态 发送器是通过发送起始位来开始一个数据帧 的传送 起始位使数据线处于逻辑0状态 提示接收 器数据传输即将开始 接着发送数据位 数据位一般 为8位一个字节的数据 也有5位 6位或7位的情 况 低位 LSB 在前 高位 MSB 在后 然后发送 校验位 校验位一般用来判断传输的数据位有无错 误 一般是奇偶校验 在使用中 该位常取消 停止 位在最后 用以标识数据传送的结束 它对应于逻辑 1状态 UART的帧格式包括起始位 start bit 低电平 5 8位数据位 data bits 校验位 parity bit 可选 和 停止位 stop bit 位数可为1 1 5 2位 这种格式 是由起始位和停止位来实现字符的同步 3 如图1所 示 12 计 算 机 与 现 代 化2008年第8期 图1 UART的帧格式 1 UART的实现 比较复杂的数字电子系统的设计往往采用自顶 向下 Top 2Down 的方法 即首先把设计任务划分成 几个模块 然后分模块进行设计 4 本文所介绍的UART串行通讯模块由3个子模 块组成 波特率发生器 接收模块和发送模块 如图2 所示 所以对UART通讯模块的实现就是对组成 UART的三个子模块 即 波特率发生器 接收模块及 发送模块 的实现 波特率发生器专门产生一个本 地时钟信号来控制UART的接收与发送 UART接收 模块的用途是接收RxD端的串行信号 并将其转化 为并行数据 UART发送模块的用途是将准备输出的 并行数据按照基本UART帧格式转为串行数据从 TxD端串行输出 图2 UART的三个子模块 1 1波特率发生器模块的实现 1 波特率发生器模块的实现原理 波特率发生器实际上就是分频器 可以根据给定 的系统时钟频率 晶振时钟 和要求的波特率算出波 特率分频因子 把算出的波特率分频因子作为分频器 的分频系数 假设系统的时钟频率为10MHz 而要 求的波特率为9600bps 因此要设计分频模块 把 10MHz的时钟脉冲变为9600Hz的时钟脉冲 故设 要求的波特率因子为M 则 M 10MHz 9600Hz 1042 2 波特率发生器模块实现的流程 波特率发生器模块实现的流程如图3所示 3 波特率发生器模块实现的源代码 Module CNT CLK D I V CLK reset input CLK reset 输入信号 时钟信号CLK与复位信号reset reg 10 0 H 计数器H 用来记录输入时钟信号的跳变数 reg num 寄存器num 用来存放将要输出的电平信号 outputD I V CLK 输出信号 always posedge CLK or posedge reset begin if reset 复位信号到来 进行模块初始化 begin H 0 图3 波特率发生器模块实现的流程图 num 0 end else if H 1041 当计数器计数值为1041时 计数器清 0 准备进行新一次的计数 H 0 else begin if H 521 当计数器的值小于521时 输出为低电平 num 0 else 当计数器的值大于521时 输出为高电平 num 1 H H 1 end end assign D I V CLK num endmodule 4 波特率发生器模块实现的仿真结果 波特率发生器模块实现的仿真结果如图4所示 图4 波特率发生器模块实现的仿真图 2008年第8期扈华等 基于Verilog2HDL的UART串行通讯模块设计及仿真13 1 2接收模块的实现 1 接收模块的实现原理 UART通讯模块是从RxD端接收数据的 RxD端 由逻辑1跳变为逻辑0可视为一个数据帧的开始 所 以接收模块首先要判断起始位 当UART接收模块 复位后 接收模块一直在等待RxD的电平跳转 当 RxD电平从逻辑1变为逻辑0 即起始位到来 意味 着新的UART数据帧的开始 一旦检测到起始位 就 从起始位的下一位开始对UART通讯所要求的波特 率时钟D I V CLK的上升沿计数 每计一次数就对 RxD进行一次采样 把每次采样获得的逻辑电平值按 先后顺序存入寄存器Q中 当计数为8时 也就是确 保接收了所有的数据位 8位串行数据也被转换为8 位并行数据 2 接收模块实现的流程 接收模块实现的流程如图5所示 图5 接收模块实现的流程图 3 接收模块实现的源代码 module UART I N CLK 10MHz Q reset input CLK 10MHz I N reset 输入信号 时钟信号CLK 10MHz 输入的串行信号I N 复位信号reset output 7 0 Q 输出的并行信号 reg 7 0 P 寄存器P 存放接收到的串行数据值 reg 3 0 i 计数器i 用来记录接收到的数据位的数目 reg a 寄存器a 用来判断是否开始接收数据 reg k 寄存器k 用来判断模块是否完成数据接收 CNT CNT CLK 10MHz CLK 9600Hz reset 分频器 进行分频 always posedge CLK 9600Hz or posedge reset begin if reset 如果复位信号到来 则进行模块初始化 begin i 0 k 1 a 1 end if I N 0 if a 0 如果接收控制寄存器a表明可以接收数据 则开始接收数据 begin if i 8 i i 1 接收一位数据 则计数器加1 end else 如果接收到的数据位大于8位 则停止接收数据 k 0 end end assign Q P endmodule 4 接收模块实现的仿真结果 接收模块实现的仿真结果如图6所示 图6 接收模块实现的仿真图 接收时的输入信号为I N 其输入的位序列为 00110110001 此序列中已包含了起始位0 校验位0 和停止位1 接收到的数据位存放到寄存器 7 0 Q 中 可以看到 图6中Q为接收到的数据位 此数据 由高位到低位依次为00110110 正是UART帧中的 数据位部分 1 3发送模块的实现 1 发送模块的实现原理 发送模块实现的功能是将要发送的8位并行数 据变为串行数据 同时在数据头部加起始位 在数据 位尾部加奇偶校验位和停止位 即 当UART发送模 14 计 算 机 与 现 代 化2008年第8期 块被复位信号复位以后 发送模块将立刻进入准备发 送状态 在该状态下读8位并行数据到寄存器 7 0 I NSend中 之后输出逻辑0作为起始位 从起始位的 下一位开始对UART串行通讯所要求的波特率时钟 D I V CLK的上升沿计数 每计一次数从寄存器 7 0 I NSend中按照由低位到高位的顺序取出一位数据送 到TxD端 当计数为8时 也就是确保发送了所有的 数据位 同时也将8位并行数据转换为8位串行数 据 根据8位数据位中逻辑1的个数确定校验位 然 后输出校验位 最后输出逻辑1作为停止位 2 发送模块实现的流程 发送模块实现的流程如图7所示 图7 发送模块实现的流程图 3 发送模块实现的源代码 module UART CLK 10MHz I NSend QSend resetSend input 7 0 I NSend 输入的并行信号 input resetSend 复位信号 outputQSend 输出的串行信号 reg ack 寄存器ack 用来判断发送模块是否已经复位 reg start Bit 寄存器startBit 用来判断数据起始位是否 已经发送 reg 3 0 iSend 计数器iSend 用来记录已经发送的数 据位的数目 reg tt 寄存器tt 用来存放待发送的数据位 reg check 寄存器check 用来存放将要发送的数据校 验位 CNT CNT CLK 10MHz CLK 9600Hz resetSend 分频器进行分频 always posedge CLK 9600Hz or posedge resetSend begin if resetSend 如果复位信号到来 则进行模块初始化 begin ack 1 startBit 0 end else begin if ack 1 如果模块初始化完毕 则准备发送数据 begin if startBit 0 如果没有发送起始位 则发送起始位 begin tt 0 startBit 1 iSend 0 check 0 end else begin if startBit 1 tt I NSend iSend iSend iSend 1 发送一位数据 则计数器加1 end else if iSend 8 如果数据位发送完毕 则发送校验位 begin tt check iSend iSend 1 end else tt 1 发送停止位 end end end end assign QSend tt endmodule 4 发送模块实现的仿真结果 发送模块实现的仿真结果如图8所示 准备发送的数据由高位到低位依次为00110110 QSend为数据发送端 可以看到发送的串行位序列为 00110110001 符合UART帧格式的要求 1 4 UART各子模块的整合 1 各子模块的整合原理 2008年第8期扈华等 基于Verilog2HDL的UART串行通讯模块设计及仿真15 图8 发送模块实现的仿真图 在各模块功能实现的基础上 把它们有机地整合 在一起 使波特率发生器能够按照UART通讯的要求 正常工作 接收模块和发送模块能够根据各自的复位 信号使整合模块具有发送或接收功能 2 各子模块的整合流程 各子模块的整合流程如图9所示 图9 各子模块的整合流程图 3 各子模块的整合结果 各子模块的整合仿真结果如图10所示 图10 各子模块的整合仿真图 仿真是以接收和发送 6 为例的 图10中I N 信号为接收时的输入信号 接收完成后数据存放到寄 存器 7 0 Q中 可以看到Q中存放的8位数据是 00110110 正是 6 的ASCII码 I NSend寄存器中存 放的是发送时待发送的数据 数据的值为00110110 即 6 的ASCII码 QSend为发送输出信号 可以看到 发送出去的串行数据依次为00110110001 其中已经 包含了起始位0 校验位0和停止位1 2 主要问题及措施 问题1 在仿真过程中经常遇到一些寄存器没有 被初始化 导致仿真结果不正确 这是因为if语句嵌 套太复杂或循环语句使用不恰当使得寄存器初始化 语句未能执行 措施 尽量减少if语句的嵌套层数 这样可以减 少阅读程序的复杂度和程序调试的复杂度 能够更容 易发现错误以便及时寻找到解决方案 问题2 在程序中使用initial过程块进行寄存器 的初始化 会使源
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 员工福利人事考试试题及答案
- T-CIATCM 005-2019 中医药综合统计信息数据元值域代码
- (正式版)DB2312∕T 074-2023 《水稻干尖线虫病防治技术规程》
- 2025年社区护理学每章题库及答案
- 人教版《历史与社会》七年级下册第六单元 6-1-2 沟壑纵横的黄土高原 说课稿
- 2025年新生儿重症护理知识题库及答案
- 淘宝购物课件
- 12.2三角形全等的判定第3课时“角边角”“角角边”说课稿 2024-2025学年人教版数学八年级上册
- 公差与公差带说课稿-2025-2026学年中职专业课-极限配合与技术测量-机械制造技术-装备制造大类
- 1.3 土地改革 教学设计 2023-2024学年统编版八年级历史下册
- 幻影桌面云管理平台实践指导手册
- 沪教牛津版英语4A M3U1 In our school:animal school优质课课件
- (通用版)水利安全员考试试题库及答案
- 编版一年级下册 《荷叶圆圆》2022年小学语文作业设计
- 施工现场安全检查记录表(周)以及详细记录
- 汽车配件购销合同集合
- 雨污水管道表格全全套资料
- 石库门——中西合璧建筑的典范
- 数独比赛六宫练习题96道练习
- (高清正版)T_CAGHP 006—2018泥石流灾害防治工程勘查规范(试行)
- 典范英语ComingClean坦白翻译
评论
0/150
提交评论