收藏 分享(赏)

基于FPGA的串口通信电路设计.doc

上传人:wo7103235 文档编号:7690501 上传时间:2019-05-23 格式:DOC 页数:56 大小:2.16MB
下载 相关 举报
基于FPGA的串口通信电路设计.doc_第1页
第1页 / 共56页
基于FPGA的串口通信电路设计.doc_第2页
第2页 / 共56页
基于FPGA的串口通信电路设计.doc_第3页
第3页 / 共56页
基于FPGA的串口通信电路设计.doc_第4页
第4页 / 共56页
基于FPGA的串口通信电路设计.doc_第5页
第5页 / 共56页
点击查看更多>>
资源描述

1、毕 业 论 文论文题目: 基于 FPGA 的串口通信电路设计专 业: 集成电路设计与集成系统摘要串行通信接口是一种应用广泛的通信接口。目前,大部分处理器都集成了支持 RS-232 接口(又称 EIA RS-232-C)的通用异步收发器(Universal Asynchronous Receiver/Transmitter,UART),本文设计了一个串口数据采集和处理程序,详细介绍了用 Verilog HDL 硬件描述语言来开发波特率发生器、接收模块和发送模块这三个模块,以及系统各个模块的具体设计方法和原理,用Quartus II 软件进行仿真并给出结果,分别验证各个模块的正确性。本设计还使用基

2、于 ALTERA 公司的 Cyclone II EP2C5T144 芯片的 FPGA 开发板,在 FPGA开发板上实现和 PC 通过串口调试软件完成双向通信,不仅要求将开发板的数据显示在 PC 的串口调试助手软件上,还要求用 PC 发送数据的 ASCII 码来驱动电路的 8 个 LED 灯,验证用 FPGA 实现串行通信的可行性。关键词串行通信;RS-232 ;UART;Verilog HDL;FPGAAbstractSerial communication interface is a widely used communication interface. At present, most

3、 of processor integrated RS-232(EIA RS-232-C) interface to support UART (Universal Asynchronous Receiver/Transmitter) communication, This thesis design a data acquisition and treatment program. Besides that, the thesis introduced Baud Rate Generator module、Receiver module、Send module based on langua

4、ge Verilog HDL and give the results by simulate in Quartus II software. This design also uses EP2C5T144 FPGA chip to achieve the two-way communication by simulate with Quartus II and PC through the serial port debugging software. Not only requires the development boards data displayed in the PCs ser

5、ial port debugging software, also ask ASCII data sent by PC Code to drive eight LED lights, meanwhile verified the serial communication with FPGA.Key wordsSerial communication; RS-232; UART; Verilog HDL; FPGA目录摘要 IAbstract .II第 1 章 语言和工具 11.1 Verilog HDL 语言概述 11.2 FPGA 概述 .31.3 Quartus II 软件介绍 .71.4

6、 FPGA 开发板介绍 .81.5 本章小结 .11第 2 章 串口通信协议简介 122.1 串口通信接口 .122.2 RS232 通信协议 .122.3 串口通信时序分析 .142.4 本章小结 .15第 3 章 串口通信的 Verilog HDL 实现 163.1 设计功能说明 .163.2 波特率发生器模块的 Verilog HDL 实现 .163.3 发送模块的 Verilog HDL 实现 .183.4 接收模块的 Verilog HDL 实现 .243.5 本章小结 .30第 4 章 串口通信的硬件调试 314.1 板级调试说明 .314.2 下载配置 FPGA .324.3 配

7、置串口调试软件 .344.4 调试结果 .344.5 本章小结 .37结论 38参考文献 39附录 1 波特率发生器 Verilog HDL 实现 .40附录 2 发送模块 Verilog HDL 实现 .41附录 3 接收模块 Verilog HDL 实现 .46致谢 51基于 FPGA 的串口通讯电路设计1第 1 章 语言和工具1.1 Verilog HDL 语言概述Verilog HDL 是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时

8、序建模。Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL 语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。Verilog HDL 语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用 Verilog 仿真器进行验证。语言从 C 编程语言中继承了多种操作符和结构。Verilog HDL 提供了扩展的建模能力,其中许多扩展最初很难理解。但是,V

9、erilog HDL 语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。Verilog HDL 语言最初是于 1983 年由 Gateway Design Automation 公司为其模拟器产品开发的硬件建模语言。那时它只是一种专用语言。由于他们的模拟、仿真器产品的广泛使用,Verilog HDL 作为一种便于使用且实用的语言逐渐为众多设计者所接受。在一次努力增加语言普及性的活动中,Verilog HDL 语言于 1990 年被推向公众领域。Open Verilog International(OVI)是促

10、进 Verilog发展的国际性组织。1992 年,OVI 决定致力于推广 Verilog OVI 标准成为 IEEE标准。这一努力最后获得成功,Verilog 语言于 1995 年成为 IEEE 标准,称为IEEE Std 13641995。完整的标准在 Verilog 硬件描述语言参考手册中有详细描述 1。下面列出的是 Verilog HDL 硬件描述语言的主要能力: 基本逻辑门,例如 and、or 和 nand 等都内置在语言中。 用户定义原语(UDP)创建的灵活性。用户定义的原语既可以是组合逻基于 FPGA 的串口通讯电路设计2辑原语,也可以是时序逻辑原语。 开关级基本结构模型,例如 p

11、mos 和 nmos 等也被内置在语言中 2。 提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。 可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式使用过程化结构建模;数据流方式使用连续赋值语句方式建模;结构化方式使用门和模块实例语句描述建模。 Verilog HDL 中有两类数据类型:线网数据类型 wire 和寄存器数据类型reg。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。 能够描述层次设计,可使用模块实例结构描述任何层次。 设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。 Verilog HDL 不再是某些公司

12、的专有语言而是 IEEE 标准。 人和机器都可阅读 Verilog HDL 语言,因此它可作为 EDA 的工具和设计者之间的交互语言。 Verilog HDL 语言的描述能力能够通过使用编程语言接口(PLI)机制进一步扩展。PLI 是允许外部函数访问 Verilog 模块内信息、允许设计者与模拟器交互的例程集合。 设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL)到算法级,包括进程和队列级。 能够使用内置开关级原语在开关级对设计完整建模。 同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。 Verilog HDL 能够监控模拟验证的执行,即模拟验证执行过程

13、中设计的值能够被监控和显示。这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。 在行为级描述中,Verilog HDL 不仅能够在 RTL 级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述。基于 FPGA 的串口通讯电路设计3 能够使用门和模块实例化语句在结构级进行结构描述。 Verilog HDL 的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。 Verilog HDL 还具有内置逻辑函数,例如/ 系统时钟input clk;/ 采样时钟输出output clkout;reg clkout;reg 15:0 cnt;基于 FPGA 的串

14、口通讯电路设计18/ 分频进程always (posedge clk)beginif(cnt = 16d12)beginclkout = 1b1;cnt = cnt + 16d1;endelse if(cnt = 16d26)beginclkout = 1b0;cnt = 16d0;endelsebegincnt = cnt + 16d1;endendendmodule在 Quartus II 软件当前工程窗口打开 clkdiv.v 文件,单击 File Create/Update Create Symbol Files for Current File 命令,为 clkdiv.v 文件生成原

15、理图模块。新建一个原理图文件,在原理图空白处双节,在弹出的 Symbol对画框中选择 Project clkdiv 模块,单击 OK 按钮退出 Symbol 对话框。在原理图的适当位置放置 clkdiv 模块,并添加输入输出模块,如图 3-1 所示,保存原理图为 uartrxtx.bdf。图 3-1 波特率发生器的原理图编译工程文件,编译无误后单击 Processing Generate Functional Simulation Netlist,产生功能仿真网表。新建波形仿真文件,加入输入输出信号,设置系基于 FPGA 的串口通讯电路设计19统时钟信号 clk 的周期为 20ns,保存波形文

16、件为 uartrxtx.vwf,单击 按钮进行分频器的波形仿真,波形仿真图形如图 3-2 所示。图 3-2 波特率发生器的仿真图形由波形仿真图形可以看出,输入的时钟周期为 20ns,即 50MHz。分频时钟输出实现了所需的 27 分频,波特率发生模块得到正确验证。3.3 发送模块的 Verilog HDL 实现UART 发送模块的功能:接收到发送指令后,把数据按 UART 协议输出,先输出一个低电平的起始位,然后从低到高输出 8 个数据位,接着是可选的奇偶校验位,最后是高电平的停止位 16。由于波特率发生器产生的时钟信号 clkout 的频率为 115200Hz 的 16 倍,因此在发送器中,

17、每 16 个 clkout 周期发送一个有效比特,发送数据格式严格按照图 2-3 所示的串口数据帧来完成:首先是起始位(发送端口从逻辑 1 转化为逻辑 0,并持续 1/115200s),其次是 8 个有效数据比特(低位在前,高位在后),一位奇偶校验位,最后是一位停止位。本设计中的发送模块的代码如下所列,代码即附录 2 中 uarttx.v 文件。module uarttx(clk, datain, wrsig, idle, tx);/ UART 时钟input clk;/ 需要发送的数据input 7:0 datain;/ 发送命令,上升沿有效input wrsig;/ 线路状态指示,高为线路

18、忙,低为线路空闲output idle;/ 发送数据信号基于 FPGA 的串口通讯电路设计20output tx;reg idle, tx;reg send;reg wrsigbuf, wrsigrise;reg presult;/ 计数器reg7:0 cnt;parameter paritymode = 1b0;/ 检测发送命令是否有效always (posedge clk)beginwrsigbuf = wrsig;wrsigrise = (wrsigbuf) endalways (posedge clk)begin/ 当发送命令有效且线路为空闲时,启动新的数据发送进程if (wrsigr

19、ise end/ 一帧资料发送结束else if(cnt = 8d175)beginsend = 1b0;endendalways (posedge clk)beginif(send = 1b1)begincase(cnt)/ 产生起始位8d0:begintx = 1b0;idle = 1b1;cnt = cnt + 8d1;基于 FPGA 的串口通讯电路设计21end/ 发送第 0 位数据8d16:begintx = datain0;presult = datain0paritymode;idle = 1b1;cnt = cnt + 8d1;end/ 发送第 1 位数据8d32:begint

20、x = datain1;presult = datain1presult;idle = 1b1;cnt = cnt + 8d1;end/ 发送第 2 位数据8d48:begintx = datain2;presult = datain2presult;idle = 1b1;cnt = cnt + 8d1;end/ 发送第 3 位数据8d64:begintx = datain3;presult = datain3presult;idle = 1b1;cnt = cnt + 8d1;end/ 发送第 4 位数据8d80:begintx = datain4;presult = datain4pres

21、ult;idle = 1b1;cnt = cnt + 8d1;end/ 发送第 5 位数据8d96:begin基于 FPGA 的串口通讯电路设计22tx = datain5;presult = datain5presult;idle = 1b1;cnt = cnt + 8d1;end/ 发送第 6 位数据8d112:begintx = datain6;presult = datain6presult;idle = 1b1;cnt = cnt + 8d1;end/ 发送第 7 位数据8d128:begintx = datain7;presult = datain7presult;idle = 1

22、b1;cnt = cnt + 8d1;end/ 发送奇偶校验位8d144:begintx = presult;presult = datain0paritymode;idle = 1b1;cnt = cnt + 8d1;end/ 发送停止位8d160:begintx = 1b1;idle = 1b1;cnt = cnt + 8d1;end/ 一帧资料发送结束8d170:begintx = 1b1;idle = 1b0;cnt = cnt + 8d1;end8d175:基于 FPGA 的串口通讯电路设计23begintx = 1b1;idle = 1b0;cnt = 0;enddefault:b

23、egincnt = cnt + 8d1;endendcaseendelsebegintx = 1b1;cnt = 8d0;idle = 1b0;endendendmodule在 Quartus II 软件当前工程窗口打开 uarttx.v 文件,单击 File Create/Update Create Symbol Files for Current File 命令,为 uarttx.v 文件生成原理图模块。为了测试 UART 发送模块的正确性,需要编写一个测试模块来测试 UART 发送模块,testuart .v 代码如下所列,即附录 2 中 testuart.v 文件。module tes

24、tuart(clk, dataout, wrsig);input clk;output7:0 dataout;output wrsig;reg 7:0 dataout;reg wrsig;reg 7:0 cnt;always (posedge clk)beginif(cnt = 254)begin基于 FPGA 的串口通讯电路设计24/ 每次数据加 1dataout = dataout + 8d1;/ 产生发送命令wrsig = 1b1;cnt = 8d0;endelsebeginwrsig = 1b0;cnt = cnt + 8d1;endendendmodule在 Quartus II 软

25、件当前工程窗口打开 testuart.v 文件,单击 File Create/Update Create Symbol Files for Current File 命令,为 testuart.v 文件生成原理图模块。新建一个原理图文件,在原理图空白处双节,在弹出的 Symbol对画框中选择 Project testuart 模块和 uart 模块,单击 OK 按钮退出 Symbol 对话框。在原理图的适当位置放置 testuart 模块和 uart 模块,并添加输入输出模块,如图 3-3 所示,保存原理图为 uartrxtx.bdf。图 3-3 发送模块连接图保存原理图为 uartrxtx.

26、bdf。编译工程文件,编译无误后单击 Processing Generate Functional Simulation Netlist,产生功能仿真网表。新建波形仿真文件,基于 FPGA 的串口通讯电路设计25加入输入输出信号,设置系统时钟信号 clk 的周期为 20ns,保存波形文件为uartrxtx.vwf,单击 按钮进行数据发送的波形仿真,波形仿真图形如图 3-4 所示。图 3-4 串口发送模块的波形仿真图对图 3-4 分析看出,当发送命令 wrsig 的上升沿有效时,启动发送数据,串行数据的波形与发送数据 dataout 相一致,UART 的发送模块的功能得到正确验证。3.4 接收模

27、块的 Verilog HDL 实现但凡涉及到双方通信的系统,接收机的复杂度往往都是高于发送机的,对于串口通信系统也如此。在接收系统中,起始状态和数据都需要依靠接收端检测得到,为了避免毛刺影响,能够得到正确的起始信号和有效数据,需要完成一个简单的最大似然判决,其方法如下:由于 bclk 信号的频率为 115200Hz 的16 倍,则对于每个数据都会有 16 个样值,最终的采样比特值为出现次数超过8 次的电平逻辑值 17。UART 接收模块的功能:时时检测线路,当线路产生下降沿是,即认为线路有数据传输,启动接收数据进行接收,按从低位到高位接收数据 18。UART 接收模块的 Verilog HDL

28、 语言的代码如下所列,代码即附录 3 中uartrx.v 文件。基于 FPGA 的串口通讯电路设计26module uartrx(clk, rx, dataout, rdsig, dataerror, frameerror);/ 采样时钟input clk;/ UART 数据输入input rx;/ 接收数据输出output dataout;output rdsig;/ 资料出错指示output dataerror;/ 帧出错指示output frameerror;reg7:0 dataout;reg7:0 datatemp;reg rdsig, dataerror;reg frameerror;reg 7:0 cnt;reg rxbuf, rxfall, receive;parameter paritymode = 1b0;reg presult, idle;/ 检测线路的下降沿always (posedge clk)beginrxbuf = rx;rxfall = rxbuf endalways (posedge clk)begin/ 检测到线路的下降沿并且原先线路为空闲,启动接收数据进程if (rxfall end/ 数据接收完成else if(cnt = 8d175)beginreceive = 1b0;end

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报