- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.5?? UART串口通信设计实例(1)
接下来用刚才采用的方法设计一个典型实例。在一般的嵌入式开发和FPGA设计中,串口UART是使用非常频繁的一种调试手段。下面我们将使用Verilog RTL编程设计一个串口收发模块。这个实例虽然简单,但是在后续的调试开发中,串口使用的次数比较多,这里阐明它的设计方案,不仅仅是为了讲解RTL编程,而且为了后续使用兼容ARM9内核实现嵌入式开发。
串口在一般的台式机上都会有。随着笔记本电脑的使用,一般会采用USB转串口的方案虚拟一个串口供笔记本使用。图2-7为UART串口的结构图。串口具有9个引脚,但是真正连接入FPGA开发板的一般只有两个引脚。这两个引脚是:发送引脚TxD和接收引脚RxD。由于是串行发送数据,因此如果开发板发送数据的话,则要通过TxD线1 bit接着1 bit发送。在接收时,同样通过RxD引脚1 bit接着1 bit接收。
再看看串口发送/接收的数据格式(见图2-8)。在TxD或RxD这样的单线上,是从一个周期的低电平开始,以一个周期的高电平结束的。它中间包含8个周期的数据位和一个周期针对8位数据的奇偶校验位。每次传送一字节数据,它包含的8位是由低位开始传送,最后一位传送的是第7位。
? (点击查看大图)图2-8?? 串口发送串行数据的格式示意图 上述格式只是发送串口数据最通常的格式。打开Windows自带的串口收发软件:超级终端,可以配置相关的选项。比如,每秒位数,可以设定一个周期的长度:如果我们设定为9600,则上图中1位持续的时间是:1/9600s。数据位也可以从5、6、7、8中选一位。奇偶校验可以从偶校验、奇校验、无、标记、空格中任选一个。停止位可以是:1、1.5、2。在这里,我们选择最通常的配置,如图2-9所示。
? 这个设计有两个目的:一是从串口中接收数据,发送到输出端口。接收的时候是串行的,也就是一个接一个的;但是发送到输出端口时,我们希望是8位放在一起,成为并行状态(见图2-10)。我们知道,串口中出现信号,是没有先兆的。如果出现了串行数据,则如何通知到输出端口呢?我们引入“接收有效”端口。“接收有效”端口在一般情况下都是低电平,一旦有数据到来时,它就变成高电平。下一个模块在得知“接收有效”信号为高电平时,它就明白:新到了一个字节的数据,放在“接收字节”端口里面。
? 图2-10?? 串口接收和发送数据时进行串并转换的示意图 二是发送数据到串口。发送数据的时候,我们也希望输入端口能够给出一个简单的形式。我们引入“发送有效”信号,它为高电平,表示我们希望把“发送字节”送入TxD发送出去。但是“发送有效”信号是否生效是有限制的,也就是正在发送的时候,是不能接收新的数据并发送的。所以,我们引入一个“发送状态”信号,它标识当前的“发报机”是否处于忙碌状态。如果“发报机”处于忙碌状态,则它拒绝“发送有效”信号,不予执行。
根据上面的分析,可以确定端口信号如下:
module?rxtx?( ?
????????????????clk, ?
????????????????rst, ?
????????????????rx, ?
????????????????tx_vld, ?
????????????????tx_data, ?
???????????????? ?
????????????????rx_vld, ?
????????????????rx_data, ?
????????????????tx, ?
????????????????txrdy ?
????????????????); ?
input???????????clk; ?
input???????????rst; ?
input???????????rx; ?
input???????????tx_vld; ?
input??[7:0]????tx_data; ?
?
output?????????rx_vld; ?
output?[7:0]???rx_data; ?
output?????????tx; ?
output?????????txrdy;?
rx对应RxD,tx对应TxD。rx_vld就是“接收有效”信号,rx_data则是“接收字节”信号。tx_vld是“发送有效”信号,tx_data是“发送字节”信号。txrdy是“发送状态”信号,它是低电平表示正处于发送状态,不接收新的字节而进行发送。
我们知道,串行数据的频率是9600Hz,而FPGA开发板的频率却是非常高的。这里,我们假定FPGA的工作频率是25MHz,则串口发送1位信息,则FPGA上的clk需要计数:25 000 000/9600=2604次。我们知道rx一旦变化,不论是从0到1,还是从1到0,都表示
文档评论(0)