版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、可编程逻辑设计课程设计报告 W. Dragon 2013210XXX2016年6月可编程逻辑设计课程报告串行通用收发器设计与实现姓 名: W. Dragon 学 号: 2013210XXX 班 级: 201321120X 班内序号: 1 X 专 业: 电子科学与技术 学 院: 电子工程学院 目 录1.概念简介21.1串行数据接口21.2串口通信协议22.串口接收模块设计42.1接收模块原理42.2接收模块代码设计53.串口发送模块设计103.1发送模块原理103.2发送模块代码设计104.仿真及结论14串行通用收发器设计与实现【摘要】串行通信接口是一种应用广泛的通信接口。目前,大部分处理器都集
2、成了支持RS-232接口的通用异步收发器UART,本报告设计了一个串口通用收发器,用Quarts软件进行仿真并给出结果,分别验证各个模块的正确性。1.概念简介1.1串行数据接口串口即串行数据接口,是一种常用的数据接口。在PC一般都有两个串行口,其形状如图所示,是典型的9针D形接口,也称为DB9。由于串口多采用RS-232-C传输协议并长达数十年,因此也常被称为RS-232接口。串口主要用于网管控制或主业务数据的传输,支持数据的双向传输,速率9600-115200bps,即可以完成和PC的通信,也可以完成与带有标准串口的外设相连,其典型的连接方式如图1-2所示。其中串口接口分为带插孔和带插针的两
3、种,其中插针端称为DCE,插孔端称为DTE。1.2串口通信协议RS-232全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”,该标准规定采用25个脚的串口连接器(DB25),不仅对连接器的每个引脚的信号内容加以规定,还规定了各种信号的电平。标准的RS-232-C协议具有25根信号线,其中有4根为数据线、11根控制线、3根定时线和7根备用线。通常情况下,使用其中的9根线就可以实现RS-232串口通信。 通常DB-25也可以像DB-9那样使用,但是它们的针号和针孔之间的连接关系是不一样的,下面给出常用的25针DB-25和DB-9的对照表以及管脚说明,如下表所
4、示。RS-232-C的串行总线在空闲的时候保持为逻辑“1”状态,即串行连接线上的电平为-3至+15V。当需要传送一个字符时,首先会发送一个逻辑为“0”的起始位,表示开始发送数据;之后就逐个发送数据位、奇偶校验位和停止位(逻辑“1”),每一次传输1个字符(8个比特)。由于任意两个字符对应瞬间的时间间隔是可变的,因此也被称为异步格式。典型的传输时序如图1-3所示。在RS-232-C协议中,可以设置数据的传输速率。除此之外,字符的位宽、奇偶校验位、停止位都可以被设置。字符可以被设置成58比特,奇偶校验位可以被去除;停止位可以设置成1位、2位甚至1.5位。每秒传输的比特数也被称为二进制波特率,即位周期
5、的倒数,简称为比特率,用于衡量RS-232的传输速率。RS-232-C有一系列波特率标准:110bps、300bps、600bps、1200bps、1800bps、2400 bps、4800bps、9600bps、14.4kbps、19.2kbps、28.8kbps、33.6kbps 和56kbps 等。有两点注意的是:首先,在设置波特率时,必须同时通知通信双方;其次,波特率的计算包括了起始位、字符、校验位、停止位在内所有的比特,而不是仅针对字符。发送数据过程:空闲状态,线路处于高电位;拉低线路一个数据位的时间T,接着数据按低位到高位依次发送,数据发送完毕后,接着发送奇偶校验位和停止位(停止位
6、为高电位),一帧资料发送结束。接收数据过程:空闲状态,线路处于高电位;当检测到线路的下降沿(线路电位由高电位变为低电位)时说明线路有数据传输,按照约定的波特率从低电位到高电位接收数据,数据发送完毕后,接着接收并比较奇偶校验位是否正确,如果正确则通知后续设备准备接收数据或存入缓存。由于UART是异步传输,没有传输同步时钟。为了能保证数据传输的正确性,UART采用16倍数据波特率的时钟进行采样。每个数据有16个时钟采样,取中间采样值,以保证采样不会发生误码。一般UART一帧的数据位数为8,这样即使每个数据有一个时钟的误差,接收端也能正确地采样到数据。2.串口接收模块设计2.1接收模块原理串口接收的
7、基本原理就是定时采样,因为发送端的数据是定时发送的,那么只要接收端和发送端的保持一致,按照一定时间间隔进行采样就可恢复数据。虽然接收模块只要定时采样就可以了,但是采样的时机很重要。如上图所示,采集的最佳时机是发送端的数据的中间时刻,这个时候的数据是最稳定的。串口一帧数据有很多位,不一定每一个位都要接收,例如起始位不需要接收,我们采取忽略的态度。实际上只需要采集8位数据即可。值得注意的是,串口数据最开始发送的是数据的最低位,最后发送的才是最高位。上图就是接收模块原理图,电平检测模块用于检测起始位,发出信号表明串口传送开始。波特率定时模块用于产生恒定波特率,用来定时采集数据。接受控制模块用于控制接
8、收的过程。2.2接收模块代码设计以下即为接收模块的实现代码。Detect_module.v module detect_module ( CLK, RSTn, RX_Pin_In, H2L_Sig); input CLK; input RSTn; input RX_Pin_In; output H2L_Sig; /*/ reg H2L_F1; reg H2L_F2; always ( posedge CLK or negedge RSTn ) if( !RSTn ) begin H2L_F1 = 1b1; H2L_F2 = 1b1;end else begin H2L_F1 = RX_Pin_
9、In; H2L_F2 = H2L_F1;end/*/assign H2L_Sig = H2L_F2 & !H2L_F1;/*/endmoduleRx_bps_module.vmodule rx_bps_module( CLK, RSTn, Count_Sig, BPS_CLK); input CLK; input RSTn; input Count_Sig; output BPS_CLK; /*/ reg 12:0Count_BPS; always ( posedge CLK or negedge RSTn ) if( !RSTn ) Count_BPS = 13d0; else if( Co
10、unt_BPS = 13d5000 ) Count_BPS = 13d0; else if( Count_Sig ) Count_BPS = Count_BPS + 1b1; else Count_BPS = 13d0; /*/ assign BPS_CLK = ( Count_BPS = 13d2500 ) ? 1b1 : 1b0; /*/endmoduleRx_control_module.vmodule rx_control_module( CLK, RSTn, H2L_Sig, RX_Pin_In, BPS_CLK, RX_En_Sig, Count_Sig, RX_Data, RX_
11、Done_Sig ); input CLK; input RSTn; input H2L_Sig; input RX_En_Sig; input RX_Pin_In; input BPS_CLK; output Count_Sig; output 7:0RX_Data; output RX_Done_Sig; /*/ reg 3:0i; reg 7:0rData; reg isCount; reg isDone; always ( posedge CLK or negedge RSTn ) if( !RSTn ) begin i = 4d0; rData = 8d0; isCount = 1b
12、0; isDone = 1b0; end else if( RX_En_Sig ) case ( i ) 4d0 : if( H2L_Sig ) begin i = i + 1b1; isCount = 1b1; end 4d1 : if( BPS_CLK ) begin i = i + 1b1; end 4d2, 4d3, 4d4, 4d5, 4d6, 4d7, 4d8, 4d9 : if( BPS_CLK ) begin i = i + 1b1; rData i - 2 = RX_Pin_In; end 4d10 : if( BPS_CLK ) begin i = i + 1b1; end
13、 4d11 : if( BPS_CLK ) begin i = i + 1b1; end 4d12 : begin i = i + 1b1; isDone = 1b1; isCount = 1b0; end 4d13 : begin i = 4d0; isDone = 1b0; end endcase /*/ assign Count_Sig = isCount; assign RX_Data = rData; assign RX_Done_Sig = isDone; /*/ endmoduleRx_module.vmodule rx_module( CLK, RSTn, RX_Pin_In,
14、 RX_En_Sig, RX_Done_Sig, RX_Data); input CLK; input RSTn; input RX_Pin_In; input RX_En_Sig; output 7:0RX_Data; output RX_Done_Sig; /*/ wire H2L_Sig; detect_module U1 ( .CLK( CLK ), .RSTn( RSTn ), .RX_Pin_In( RX_Pin_In ), / input - from top .H2L_Sig( H2L_Sig ) / output - to U3 ); /*/ wire BPS_CLK; rx
15、_bps_module U2 ( .CLK( CLK ), .RSTn( RSTn ), .Count_Sig( Count_Sig ), / input - from U3 .BPS_CLK( BPS_CLK ) / output - to U3 ); /*/ wire Count_Sig; rx_control_module U3 ( .CLK( CLK ), .RSTn( RSTn ), .H2L_Sig( H2L_Sig ), / input - from U1 .RX_En_Sig( RX_En_Sig ), / input - from top .RX_Pin_In( RX_Pin
16、_In ), / input - from top .BPS_CLK( BPS_CLK ), / input - from U2 .Count_Sig( Count_Sig ), / output - to U2 .RX_Data( RX_Data ), / output - to top .RX_Done_Sig( RX_Done_Sig ) / output - to top ); /*/endmodule3.串口发送模块设计3.1发送模块原理串口发送的基本原理是定时发送,只要按照设定波特率定时发送数据,就可以准确的把数据发送出去。上图是发送时序图,发送的时间间隔为1/Baud,例如Bau
17、d=2400bps,那么发送时间间隔就是0.416ms。3.2发送模块代码设计以下即为发送模块的实现代码。Tx_bps_module.vmodule tx_bps_module( CLK, RSTn, Count_Sig, BPS_CLK); input CLK; input RSTn; input Count_Sig; output BPS_CLK; /*/ reg 12:0Count_BPS; always ( posedge CLK or negedge RSTn ) if( !RSTn ) Count_BPS = 13d0; else if( Count_BPS = 13d5000 )
18、 Count_BPS = 13d0; else if( Count_Sig ) Count_BPS = Count_BPS + 1b1; else Count_BPS = 13d0; /*/ assign BPS_CLK = ( Count_BPS = 13d2500 ) ? 1b1 : 1b0; /*/endmoduleTx_control_module.vmodule tx_control_module( CLK, RSTn, TX_En_Sig, TX_Data, BPS_CLK, TX_Done_Sig, TX_Pin_Out ); input CLK; input RSTn; inp
19、ut TX_En_Sig; input 7:0TX_Data; input BPS_CLK; output TX_Done_Sig; output TX_Pin_Out; /*/ reg 3:0i; reg rTX; reg isDone; always ( posedge CLK or negedge RSTn ) if( !RSTn ) begin i = 4d0; rTX = 1b1; isDone = 1b0;end else if( TX_En_Sig ) case ( i ) 4d0 : if( BPS_CLK ) begin i = i + 1b1; rTX = 1b0; end
20、 4d1, 4d2, 4d3, 4d4, 4d5, 4d6, 4d7, 4d8 : if( BPS_CLK ) begin i = i + 1b1; rTX = TX_Data i - 1 ; end 4d9 : if( BPS_CLK ) begin i = i + 1b1; rTX = 1b1; end 4d10 : if( BPS_CLK ) begin i = i + 1b1; rTX = 1b1; end 4d11 : if( BPS_CLK ) begin i = i + 1b1; isDone = 1b1; end 4d12 : begin i = 4d0; isDone = 1b0; end endcase /*/ assign TX_Pin_Out = rTX; assign TX_Done_Sig = isDone; /*/ endmoduleTx_module.vmodule
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 厚积薄发 2026-2027学年第一学期初一道德与法治部编版12月月考试卷(含答案)
- 更上一层楼 2026年秋季九年级道德与法治部编版第六单元单元测试卷(含答案)
- 2027年中考河北省历史中考临考冲刺卷(含答案)
- 2027年中考福建省语文初三综合演练卷(含答案)
- 2027年云南省语文初三预测模拟卷(含答案)
- 提分利器 2027届河南省语文中考沪教版考前仿真模拟卷(含答案)
- 2027年河南省语文初三考前保温卷(含答案)
- 山东事业编计算机岗 历年真题试卷
- 2026 湖北事业编会计岗 高频考题试卷 含答案
- 2026年事业编综合岗面试题库 考点梳理 含解析
- 昭通市2026年市直事业单位公开选调工作人员(42人)笔试参考题库及答案解析
- 中证信用增进股份有限公司招聘笔试题库2026
- 小学六年级少先队建队日活动方案课件
- ISO9001-2026《质量管理体系-要求》正文与附录整合版(雷泽佳编辑-2026年9月)
- 重症医学科进修汇报
- 2025年下半年安徽交控驿达集团招聘3人笔试历年参考题库附带答案详解
- 山东青岛华通国有资本投资运营集团有限公司招聘笔试真题2025
- 工厂内部5s巡查制度
- GB/T 46588-2025精细陶瓷粉体压实性能的测定
- 防盗窗安装合同协议书
- NBT高原用变压器现场绝缘干燥第1部分:低频短路加热法
评论
0/150
提交评论