首页 基于FPGA的串口通信设计

基于FPGA的串口通信设计

举报
开通vip

基于FPGA的串口通信设计基于FPGA的串口通信设计LT基于FPGA的UART设计与实现0引言通用异步收发器(UniversalAsynchronousReceiver/Transmitter,UART)可以和各种标准串行接口,如RS232和RS485等进行全双工异步通信,具有传输距离远、成本低、可靠性高等优点。一般UART由专用芯片如8250,16450来实现,但专用芯片引脚都较多,内含许多辅助功能,在实际使用时往往只需要用到UART的基本功能,使用专用芯片会造成资源浪费和成本提高。一般而言UART和外界通信只需要两条信号线RXD和TXD...

基于FPGA的串口通信设计
基于FPGA的串口通信 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 LT基于FPGA的UART设计与实现0引言通用异步收发器(UniversalAsynchronousReceiver/Transmitter,UART)可以和各种 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 串行接口,如RS232和RS485等进行全双工异步通信,具有传输距离远、成本低、可靠性高等优点。一般UART由专用芯片如8250,16450来实现,但专用芯片引脚都较多,内含许多辅助功能,在实际使用时往往只需要用到UART的基本功能,使用专用芯片会造成资源浪费和成本提高。一般而言UART和外界通信只需要两条信号线RXD和TXD,其中RXD是UART的接收端,TXD是UART的发送端,接收与发送是全双工形式。由于可编程逻辑器件技术的快速发展,FPGA的功能日益强大,其开发周期短、可重复编程的优点也越来越明显,在FPGA芯片上集成UART功能模块并和其他模块组合可以很方便地实现一个能与其他设备进行串行通信的片上系统。FPGA(FieldProgrammableGateArray)现场可编程门阵列在数字电路的设计中已经被广泛使用。这种设计方式可以将以前需要多块集成芯片的电路设计到一块大模块可编程逻辑器件中,大大减少了电路板的尺寸,增强了系统的可靠性和设计的灵活性。1UART功能设计UART的工作原理异步通信时,UART发送/接收数据的传输格式表1所示,一个字符单位由开始位、数据位、停止位组成。表1UART发送/接收数据的传输格式STARTD0D1D2D3D4D5D6D7PSTOP起始位数据位较验位停止位异步通信的一帧传输经历以下步骤:(1)无传输。发送方连续发送信号,处于信息“1”状态。(2)起始传输。发送方在任何时刻将传号变成空号,即“1”跳变到“O”,并持续1位时间表明发送方开始传输数据。而同时,接收方收到空号后,开始与发送方同步,并期望收到随后的数据。(3)奇偶传输。数据传输之后是可供选择的奇偶位发送或接收。(4)停止传输。最后是发送或接收的停止位,其状态恒为“1”。发送或接收一个完整的字节信息,首先是一个作为起始位的逻辑“0”位,接着是8个数据位,然后是停止位逻辑“1”位,数据线空闲时为高或“1”状态。起始位和停止位的作用是使接收器能把局部时钟与每个新开始接收的字符再同步。异步通信没有可参照的时钟信号,发送器可以随时发送数据,任何时刻串行数据到来时,接收器必须准确地发现起始位下降沿的出现时间,从而正确采样数据。设计时可参考由专用芯片实现的UART的功能并进行一定精简,如可以用FPGA的片内RAM替代UART的FIFO,不用单独在UART模块中实现。设计的基本 原则 组织架构调整原则组织架构设计原则组织架构设置原则财政预算编制原则问卷调查设计原则 是保留最主要的功能,基于FPGA的UART系统波特率时钟HYPERLINK"http://product.dzsc.com/product/searchfile/2907.html"\t"_blank"发生器、接收器和发送器3个子模块组成,如图1所示。图1基于FPGA的UART组成模块接收器设计接收器的工作过程如下,如图2所示,在接收数据寄存器被读出一帧数据或系统开始工作以后,接收进程被启动。接收进程启动之后,检测起始位,检测到有效起始位后,以约定波特率的时钟开始接收数据,根据数据位数的约定,HYPERLINK"http://product.dzsc.com/product/searchfile/3037.html"\t"_blank"计数器统计接收位数。一帧数据接收完毕之后,如果使用了奇偶校验,则检测校验位,如无误则接收停止位。停止位接收完毕后,将接收数据转存到数据寄存器中。图2数据接收图为确保接收器可靠工作,在接收端开始接收数据位之前,处于搜索状态,这时接收端以16倍波特率的速率读取线路状态,检测线路上出现低电平的时刻。BPS_CLK);inputCLK;inputRSTn;inputCount_Sig;outputBPS_CLK;/***************************/reg[12:0]Count_BPS;always@(posedgeCLKornegedgeRSTn)if(!RSTn)Count_BPS<=13'd0;elseif(Count_BPS==13'd5207)Count_BPS<=13'd0;elseif(Count_Sig)Count_BPS<=Count_BPS+1'b1;elseCount_BPS<=13'd0;/********************************/assignBPS_CLK=(Count_BPS==12'd2604)?1'b1:1'b0;/*********************************/endmodule1.4发送器设计图4发送数据原理图当发送数据时,对于每一个数据的发送,每一位采用的是定时发送。假设,配置的波特率是9600bps,那么当有一个发送标志位时,数据将会以1/9600的节拍将数据一位一位的发送出去。一帧数据有11位,需要12次定时。主要代码为:always@(posedgeCLKornegedgeRSTn)if(!RSTn)begini<=4'd0;rTX<=1'b1;isDone<=1'b0;endelseif(TX_En_Sig)case(i)4'd0:if(BPS_CLK)begini<=i+1'b1;rTX<=1'b0;end4'd1,4'd2,4'd3,4'd4,4'd5,4'd6,4'd7,4'd8:if(BPS_CLK)begini<=i+1'b1;rTX<=TX_Data[i-1];end4'd9:if(BPS_CLK)begini<=i+1'b1;rTX<=1'b1;end4'd10:if(BPS_CLK)begini<=i+1'b1;rTX<=1'b1;end4'd11:if(BPS_CLK)begini<=i+1'b1;isDone<=1'b1;end4'd12:begini<=4'd0;isDone<=1'b0;endendcase2数据传输仿真Modelsim仿真工具是Model公司开发的。它支持Verilog、VHDL以及他们的混合仿真,它可以将整个程序分步执行,使设计者直接看到他的程序下一步要执行的语句,而且在程序执行的任何步骤任何时刻都可以查看任意变量的当前值,可以在Dataflow窗口查看某一单元或模块的输入输出的连续变化等,比quartus自带的仿真器功能强大的多,是目前业界最通用的仿真器之一。2.1仿真串口发送模块编写一个仿真激励程序用于单独仿真串口发送模块。步骤0的时候,将数据8'h2E发送至串口发送模块后使能串口发送模块,然后等待串口发送模块反馈完成信号。同样的动作也有...步骤1是发送数据8'h3f,然而步骤2是发送数据8'hdd。步骤3是停止动作图5发送数据仿真放大第二个数据0x3f的发送过程,如下图所示。可以看出串口发送模块,发送数据的格式是一帧11位。[0]开始位-逻辑0,[1:8]数据位,[9]校验位没有需要可以随便填,这里填逻辑1,[10]停止位逻辑1。图6发送过程仿真结果图7发送数据的延时仿真串口发送模块配置的波特率是9600kbps,所以一个数据逗留的时间是大约104us。在仿真结果中,在B0~B1是数据[0],B1~B2是数据[1]......B10~B11是数据[10]。Bx~Bx之间的时间大约是104us。2.2仿真串口接收模块用串口发送模块作为串口接收模块的刺激,亦即串口接收模块的输入(复杂输入)。用串口发送模块作为串口接收模块的刺激,亦即串口接收模块的输入(复杂输入)。下图是仿真虚拟环境env_rx_module.v它组合了串口发送模块和串口接收模块。env_rx_module.v拥有TX_En_Sig,TX_Data,TX_Done_Sig,RX_En_Sig,RX_Done_Sig,RX_Data等信号。在激励的过程中,需要对这些信号控制。图8接收模块仿真建模图当RX_En_Sig拉高的时候,串口接收模块开始准备接收数据了。当一帧11位数据发送至串口接收模块,并且被串口接收模块过滤。最后经过过滤的数据会输出至RX_Data,然后产生一个完成信号至RX_Done_Sig。(在这里数据格式四1帧11位,并且波特率为9600kbps。仿真结果如下图所示:图10发送结果仿真图上图仿真结果显示了“串口发送模块作为串口接收模块的刺激”的激励过程。(Cursor省略为C)在C1~C2之间是第一帧数据的传送,C2~C3是第二位数据的传送,其他的以此类推,然和C1~C12是一帧数据11位的传送过程。注意,每个Cx~Cx之间的时间大约是104us,亦即9600kbps的波特率3结语本设计是基于FPGA的UART设计,用时较少,逻辑消耗小,成熟稳定的实现了数据的发送与接收,可以兼容到自己的程序中。本设计的仿真程序实现了激励的所有功能,完成初步设计要求。附录1:发送模块moduletx_control_module(CLK,RSTn,TX_En_Sig,TX_Data,BPS_CLK,TX_Done_Sig,TX_Pin_Out);inputCLK;inputRSTn;inputTX_En_Sig;input[7:0]TX_Data;inputBPS_CLK;outputTX_Done_Sig;outputTX_Pin_Out;/********************************************************/reg[3:0]i;regrTX;regisDone;always@(posedgeCLKornegedgeRSTn)if(!RSTn)begini<=4'd0;rTX<=1'b1;isDone<=1'b0;endelseif(TX_En_Sig)case(i)4'd0:if(BPS_CLK)begini<=i+1'b1;rTX<=1'b0;end4'd1,4'd2,4'd3,4'd4,4'd5,4'd6,4'd7,4'd8:if(BPS_CLK)begini<=i+1'b1;rTX<=TX_Data[i-1];end4'd9:if(BPS_CLK)begini<=i+1'b1;rTX<=1'b1;end4'd10:if(BPS_CLK)begini<=i+1'b1;rTX<=1'b1;end4'd11:if(BPS_CLK)begini<=i+1'b1;isDone<=1'b1;end4'd12:begini<=4'd0;isDone<=1'b0;endendcase/********************************************************/assignTX_Pin_Out=rTX;assignTX_Done_Sig=isDone;/*********************************************************/Endmodule附录2:接收模块:modulerx_control_module(CLK,RSTn,H2L_Sig,RX_Pin_In,BPS_CLK,RX_En_Sig,Count_Sig,RX_Data,RX_Done_Sig);inputCLK;inputRSTn;inputH2L_Sig;inputRX_En_Sig;inputRX_Pin_In;inputBPS_CLK;outputCount_Sig;output[7:0]RX_Data;outputRX_Done_Sig;/********************************************************/reg[3:0]i;reg[7:0]rData;regisCount;regisDone;always@(posedgeCLKornegedgeRSTn)if(!RSTn)begini<=4'd0;rData<=8'd0;isCount<=1'b0;isDone<=1'b0;endelseif(RX_En_Sig)case(i)4'd0:if(H2L_Sig)begini<=i+1'b1;isCount<=1'b1;end4'd1:if(BPS_CLK)begini<=i+1'b1;end4'd2,4'd3,4'd4,4'd5,4'd6,4'd7,4'd8,4'd9:if(BPS_CLK)begini<=i+1'b1;rData[i-2]<=RX_Pin_In;end4'd10:if(BPS_CLK)begini<=i+1'b1;end4'd11:if(BPS_CLK)begini<=i+1'b1;end4'd12:begini<=i+1'b1;isDone<=1'b1;isCount<=1'b0;end4'd13:begini<=4'd0;isDone<=1'b0;endendcase/********************************************************/assignCount_Sig=isCount;assignRX_Data=rData;assignRX_Done_Sig=isDone;/*********************************************************/endmodule附录3:波特率发生器modulerx_bps_module(CLK,RSTn,Count_Sig,BPS_CLK);inputCLK;inputRSTn;inputCount_Sig;outputBPS_CLK;/***************************/reg[12:0]Count_BPS;always@(posedgeCLKornegedgeRSTn)if(!RSTn)Count_BPS<=13'd0;elseif(Count_BPS==13'd5207)Count_BPS<=13'd0;elseif(Count_Sig)Count_BPS<=Count_BPS+1'b1;elseCount_BPS<=13'd0;/********************************/assignBPS_CLK=(Count_BPS==12'd2604)?1'b1:1'b0;/*********************************/endmodule
本文档为【基于FPGA的串口通信设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
张ge
暂无简介~
格式:doc
大小:3MB
软件:Word
页数:19
分类:
上传时间:2022-01-13
浏览量:0