HDL设计数字UART中英文翻译.docx
- 文档编号:23812720
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:35
- 大小:1.35MB
HDL设计数字UART中英文翻译.docx
《HDL设计数字UART中英文翻译.docx》由会员分享,可在线阅读,更多相关《HDL设计数字UART中英文翻译.docx(35页珍藏版)》请在冰豆网上搜索。
HDL设计数字UART中英文翻译
译文
基于FPGA的串行控制器设计
ThomasOelsner
QuickLogicEurope
应用注释:
QAN20
简介
目前设计开发和验证FPGA系统时,硬件描述语言HDL的使用变得越来越主流。
采用行为级描述不仅提高了产品的设计效率,而且在设计验证中显示出其独特的优势。
目前最流行的HDL语言是Verilog和VHDL语言。
本文介绍了采用verilog语言对数字异步串行收发器进行设计和验证。
UART
通用异步串行收发器(UART)由二个独立的HDL模块组成。
一个模块实现发射功能,而另一个模块则实现接收功能。
发射和接收功能模块在顶层设计时组合到一起,这种接收和发射的组合是通信所必需的。
数据写入发射器,从接收器读出,所有的数据是以二进制8字节的形式通过一个双向CPU接口。
由地址映射的发射机和接收机通道可以很容易地建立接口。
两个模块共用一个主控时钟,该时钟为mclkx16,在每个模块里,主控时钟mclkx16被分频成独立的波特率时钟。
图1通用异步串行收发器
通用异步串行收发器的特点
是否具有
全双工操作
标准UART数据帧格式
偶校验或奇校验模式
奇偶错误校验
帧错误校验
溢出错误校验
数据接收准备中断
数据发送准备中断
是
是
是
是
是
是
是
是
表UART功能概述
UART的功能概况
UART的基本功能概况见下图。
左边为“发送寄存器”、“发送移位寄存器”以及“发送控制逻辑模块”,这些模块包含在发送模块”txmix”中。
右边为“接收移位寄存器”、“接收寄存器”和“接收控制逻辑模块”,这些模块包含在发送模块”rxmix”中。
这两个模块有单独的输入和输出的控制线路,只有双向的数据总线、主时钟和复位线是共享的。
图2UART框图
顶层UART系统的I/O功能描述
符号
类型
描述
mclkx16
输入
用于主控时钟波特率的生产。
reset
输入
主复位输入信号。
parityerr
输出
表明被检测的数据帧有无奇偶校验错误。
校验编码可以基于偶数或奇数模式。
framingerr
输出
表明从rx输入的数据串是否符合如图2所示的UART数据帧格式。
overrun
输出
表明接收模块准备接收新数据是,模块中仍然有数据未读取。
rxrdy
输出
表明接收模块已经接收新数据,并准备读取。
txrdy
输出
表明数据已准备好加载到发送模块。
read
输入
低电平有效的读选通信号,用于从接收模块中读取数据。
write
输入
低电平有效的写选通信号,用于将数据写入发送模块。
data[7:
0]
输入
双向数据总线。
数据通过该总线进行发送或接收。
tx
输出
发送模块串行输出。
复位或闲置时为高电平。
rx
输入
接收模块串行输入。
复位或闲置时为高电平。
表3UART的I\O接口
UART的标准数据格式
图3UART数据帧格式
图3为UART的串行数据格式,在串行数据帧中包含8位数据位以及编码比特的信息。
在连续传输线路之间,传输线路处于高电平。
传输从低位的起始比特开始,接下来的是8比特的数据信息,低位对于后边高位有重要的作用。
然后是1比特的奇偶校验位,对之前的8比特的数据位进行奇偶校验。
奇偶校验位由奇校验或偶校验的形式进行编码。
奇偶校验位之后是高位停止比特,标志数据帧的结束。
UART时序图
下面显示了数据是如何写入“发送寄存器”并如何加载给“发送移位寄存器”,及在波特率时钟上升沿时如何传输到tx端进行输出的。
图4发送时序图
下图显示了数据如何从rx端输入写入“接收移位寄存器”并加载到“接收寄存器”。
最后接收模块发出rxrdty标志位。
图5接收时序图
发送模块
主控时钟称为mclkx16,被分频成等于mclkx16/16的称为txclk的时钟频率。
数据以并行的形式写入模块,而按照波特率时钟的频率以串行的形式从tx端输出。
从tx端输出的数据按照图3所示的UART数据帧格式发送。
图6发送模块
符号
类型
描述
mclkx16
输入
用于生成主控时钟波特率。
reset
输入
主复位输入信号
write
输入
低电平有效的写选通信号,将数据写入发送模块。
data[7:
0]
输入
数据传输是通过数据总线写入发送模块。
在写选通脉冲的上升沿,数据总线的内容锁定在一个内部的“发送寄存器”。
tx
输出
串行数据输出。
串行数据帧通过这个端口发送,当复位或闲置时,tx保持高电平。
txrdy
输出
表明数据锁存到“发送寄存器”,同时加载到“发送移位寄存器”,“发送寄存器”准备好接收新数据。
表2发送模块I\O接口功能
符号
类型
内部标志或信号的描述
thr
reg[7:
0]
8位“发送寄存器”,用于锁存发送模块接收到的数据。
tsr
reg[7:
0]
8位“发送移位寄存器”,发送模块的数据通过此输出。
paritymode
wire
奇偶校验模式位表明了发送模块进行奇偶校验的模式。
值为“1”时,为奇校验,为“0”时,偶校验。
txparity
reg
输出tx奇偶校验的结果。
tag1,tag2
reg
此标志位表明发送模块的状态。
txclk
reg
波特率时钟,根据时钟频率将数据通过tx输出。
txdone
wire
表明一个数据串发送完成。
txdatardy
reg
表明“发送寄存器”已锁存新数据,准备好进行发送。
paritycycle
wire
表明tx输出端接收到txparity的值时,发送模块的状态。
cnt
reg[3:
0]
暂存器,用于将clkx16时钟分频为txclk时钟。
表3发送模块的内部信号
发送模块的行为描述
发送模块等待新的数据来写入模块,新的数据在发送模块初始化后发送。
以并行形式写入模块的数据转换成串行的形式并由tx端输出。
当没有传输序列的时候,tx端输出高电平。
图7发送的流程
发送模块的实现
用Verilog语言声明模块端口,这里定义的信号,是来自于模块并在这里输出的。
在这里并没有详细地说明方向。
moduletxmit(mclkx16,write,reset,tx,txrdy,data);
图8发送模块的声明
端口定义之后是端口的方向,方向为输入、输出或输入(双向),这在表1中已说明。
描述端口方向之后是声明内部信号,内部信号在Verilog语言中内部信号声明为“wire”或“reg”数据类型,wire类型用于连续的赋值,也叫做组合声明。
reg类型在Verilog语言中用于“always”块,常常用于时序逻辑的赋值,但有时并不是这样,进一步解释见Verilog参考书。
模块内部信号的数据类型说明见表3。
我们现在已经进行所有必要的声明,并作好准备看看实际的执行情况。
硬件描述语言使我们可以用更多的行为模式来描述发送模块的功能,而不是把重点放在门一级的实际实现上。
软件编程语言,函数和过程将庞杂的程序变得更具可读性和易于维护。
Verilog语言提供类似的函数和任务结构类似于软件编程语言的函数和过程。
一个Verilog语言的函数和任务相当于几行Verilog代码,这些代码使得输入信号影响输出信号或变量。
函数和任务通常用在多行代码都是重复出现的地方,从而使得设计易于阅读和维护。
一个Verilog的函数可以有多个输入,但始终只有一个输出,而Verilog的任务在某些情况下可以同时有多个输入和多个输出。
下图显示了Verilog的任务格式,保留了所有必要的语句,用来描述发送模块的传输模式。
图9发送传输模式
我们可以看到在移位寄存器有2个标志位tag1和tag2,创建类似的任务来描述发送模块的“闲置”和“负载”模式。
使用Verilog语言,现在我们可以创建一个“容易阅读”的行为模型的空穴传输过程。
如在波特率时钟的上升沿,tsr中的内容传输到tx端输出。
在tsr传输的同时,奇偶校验位也产生了,如图10所示。
重要的一点,就是在传输过程中tsr会进行补零。
不同的后置标志位tag和tsr补零位的组合表示不同的传输模式。
如果奇偶校验循环周期的第二个周期是高电平,这意味着以标志位tg2的值对tsr[1]赋值。
当传输结束时,Txdone置高电平,这意味着以标志位tg2的置对tx赋值。
基于所述传输序列中的不同状态,“数据位”,“奇偶校验位”或“停止位”被多路复用到tx输出。
图10发送传输过程
传输序列模拟
在写操作信号上升沿时数据总线被锁存,在txclk的下一个上升沿,thr的内容加载到tsr,tx端输出低电平的起始位,同时txrdy标志位表明,该thr再次准备好要写入新的数据。
在txclk的每个上升沿,tsr的内容被转移到totx。
在数据传输的同时,奇偶校验位也随之产生。
在第一个奇偶校验周期,tx持续为高电平,在第二个周期,tx端获得奇偶校验的结果。
传输结束时内部的txdone信号为高电平,tx端也持续高电平。
图11波特率为2Mhz时的发送时序图
接收模块
主控时钟mclkx16分频到合适的波特率时钟频率,即rxclk时钟,它等于mclkx16/16。
串行数据在rx端接收输入模块,其中串行数据以如图3所示的UART数据帧格式传输,收到的数据通过8位数据总线以并行的形式输出。
图14接收模块
符号
类型
I\O接口描述
mclkx16
输入
用于输入主控时钟波特率的生成。
reset
输入
主复位输入信号。
read
输入
低电平有效的读选通信号,用于从接收模块中读取数据。
data[7:
0]
输出
数据总线,数据以并行的形式从总线中读取。
在读选通信号的下降沿,数据加载到数据总线。
rx
输入
接收信号,处于闲置状态时,保持为高电平。
rxrdy
输出
表明已接收新数据,并准备将其读取。
parityerr
输出
表明无论是否发生奇偶校验错误,都可以进行奇偶校验编码。
framingerr
输出
表明发送到rx的串行信号的数据格式是否符合如图3所示的UART数据帧格式。
overrun
输出
表明新数据准备传输到接收模块时,接收模块仍然有数据未读取。
表4接收模块I\O接口信号
符号
类型
内部标志或信号的描述
rhr
reg[7:
0]
8位“接收寄存器”,用于锁存接收模块接收到的数据。
rsr
reg[7:
0]
8位“接收移位寄存器”,接收模块的数据通过此输入。
paritymode
wire
奇偶校验模式位表明了发送模块进行奇偶校验的模式。
值为“1”时,为奇校验,为“0”时,偶校验。
rxparity
reg
输出rsr奇偶校验的结果。
paritygen
reg
表明数据帧奇偶校验后,发生错误。
rxclk
reg
波特率时钟,根据时钟频率进行数据传输。
rxstop
wire
获取从rx接收到的数据帧的结束位。
idle
reg
接收模块的状态位。
hunt
reg
接收模块的状态位。
rxdatardy
reg
表明新数据以接收,并准备读取。
rxcnt
reg[3:
0]
暂存器,用于将clkx16时钟分频为rxclk时钟。
表5接收模块的内部信号
接收模块行为描述
在连续发送时,传输线保持高电平,根据异步串行UART标准,接收模块在等待“闲置”模式的rx端变为低电平。
在rx的下降沿时,接收模块进入“捕获”模式,因为现在正在寻找一个新的数据帧的有效起始位。
当有效的开始位被检测到时,接收器进入“数据传输”模式。
如果检测到无效的起始位,接收模块则进入“闲置”模式。
当接收到一个数据帧时,各种校验和检查同时进行。
接收模块接收到一个完整的数据帧时,接收端返回待机模式,接收模块基本运作如下所示。
图13接收的流程
接收频率为mclkx16,和第一上升沿的rxclk常常发生在中心点开始位,如下图显示,对于中心点的起始位及后边的数据字节,波特率时钟是同步。
图14同步时钟rxclk起始位的中心点
接收器模块的实现
为了创建一个易读易操作的接收模块,用两个Verilog任务来描述不同的接收方式,当接收在空闲状态时,其中一个Verilog称为“空闲复位”,下图中有用来描述该接收机复位条件的必要的语句。
图15复位条件和闲置模式下的接收模块
当接收模块不在复位状态,也不在空闲状态下,接收模块在rx输入端采样数据,传输到移位寄存器中,同时根据输入的数据产生奇偶校验位。
这个Verilog任务称为“数据传输”,下图包括所有以描述上述行为的必要语句。
图16接收模块数据的传输
利用两个Verilog任务实现上述功能,现我们可以在接收模块的复位状态、空闲状态或者数据传输状态对接收模块进行行为级的描述,所有上述行为是和一个叫做rxclk的波特率时钟同步的,它们的实现如下所示。
图17接收模块进程
当低电平起始位到达rsr[0]时,一个完整的数据帧将会被接收,在下一个接收时钟上升沿到来时,接收模块又回到空闲状态。
当返回空闲状态时,接收模块发出“数据接收准备”中断,表明新的数据可以以并行的方式读取。
返回空闲状态时,对错误的标志位进行更新,并清除已经读取的数据。
在读信号的下降沿,rhr的内容被锁存到数据总线。
在表8中列举接收模块进行的各种错误检查。
错误类型
描述
奇偶校验错误检查
接收数据时,奇偶校验即已经开始。
奇偶校验寄存器预先设置为空闲模式(1=奇校验,0=偶校验)。
经过一次完整的传输过程,奇偶校验寄存器的值表明是否在传输过程中发生奇偶校验错误。
帧传输错误
如果接收到的数据帧的结束位不为1,可以认为发生了帧传输错误。
数据的格式不符合如图2所示的UART数据帧格式。
溢出
新数据通过rsr接收时,之前接收的数据仍未读取,可以认为发生了溢出错误。
Rsr的内容无法加载到rhr中。
表8接收模块支持的错误检查
接收序列的模拟
在连续传输时线路保持高电平,在rx输入的下降沿,内部信号rxcnt开始计数,保持和mclkx16同步。
如果rx输入在mclkx16的8个循环周期内保持低电平,内部空闲标志位复位,这由rxclk信号进行。
这时,Rxclk信号与低位的起始位中心点同步,在接受时钟上升沿,数据从rx传输到rsr。
当低位起始位到达rsr[0]时,在下一个接收时钟上升沿时,空闲标志位被强行置为高电平。
在接收序列时,产生rxclk的11个周期,主要是为了采样1位低位起始位,8位数据位,1位奇偶位,1位高位停止位。
在返回空闲状态,rsr的内容加载至rhr,内部标志位更新,“rxrdy”标志位表明,rhr的内容可以读出,在读信号的下降沿,rhr的内容锁存到数据总线。
图18波特率为2Mhz时接收模块的时序仿真
硬件描述语言仿真
在这里,我们研究如何将HDL用于行为级设计,实现数字UART设计。
利用HDL进行设计可以使设计更容易阅读,更容易理解,它还提供了能够方便地描述在一个复杂的事件系统中相互紧密结合的各种过程,例如UART。
我们将了解到这种依靠各种进程来描述复杂系统的能力对于仿真而言是必需的。
在Verilog语言中仿真激励叫做“测试工具”。
测试工具是Verilog的一个模块,拥有要生成仿真激励所需的所有HDL代码。
进行仿真时,模块端口将会把信号映射到进行仿真的设计中。
端口映射是由将UART顶层模块的模块分层实例化应用到“测试工具”中实现的,如下所示。
图19顶层UART模块实例化
这使得仿真激励可以用来表示设计的输入,并同时检测该输入条件下设计的输出情况。
可以有条件地通过输出激励对输入激励的响应对设计进行调试,图19显示说明测试工具端口如何映射到UART的顶层。
图20UART模型和测试工具
通过测试工具,发送模块输出端返回到接收模块输入端,这使得发送模块的信号可以用来作为接收模块的测试信号。
数据以并行的方式从发送模块发送,同时以串行的形式回送到接收模块的输入端,收到的数据最终从接收模块以并行形式读出。
为了尽可能实现UART的自动化测试,Verilog任务树如下,“写入发送”任务提供了将并行数据写入发送模块的一切必要的声明和语句,以完成“写入发送”功能,并将数据锁存到内部,供测试工具进行分析。
“读取接收”任务提供了将并行的数据从接收模块读取出来的一切必要的声明和语句,“读取接收”任务来完成读出功能,并得到锁存在内部的数据并供测试工具进行分析。
“数据比较”任务提供了一切必要的声明来比较写入到发送模块的数据和接收到的相应的数据。
接收到的数据和接收模块读出的数据进行比较,如果发生任何误差,数据比较标志将发送数据错误标志。
当误差发生时,“比较数据”任务将立即停止仿真。
除了上面提到的Verilog任务树,测试工具还提供程序语句生成mclkx16、主复位信号、以及“txtorx”环回功能。
该语句不是很重要,并且这里将不加以说明,但可在测试工具本身内作参考。
测试工具的核心是一个“for循环”。
通过这个“for循环”,执行上述任务的Verilog树才能将所有可能的数据组合写入发送模块,并确保相同的数据被正确接收。
For循环如图21所示。
图21测试工具的核心代码
上图所示for循环使用了Verilog“等待”声明。
“等待”声明是一个并发进程声明。
在它的条件表达式变为真时,声明开始执行。
这种情况下,该循环等待接收模块完成序列的接收后,以“rxrdy”标志位变高电平来表示完成数据序列的接收。
For循环的停止,是以“rxrdy”标志位变为高电平作为标志。
当“rxrdy”变为高电平,for循环立即执行“读取接收”任务,其次是“比较数据”的任务。
根据如图3所示的UART数据帧格式显示,测试工具必须测试多种不同的数据组合,以测试所有可能的数据组合格式。
当for循环处理完所有的数据组合,“数据比较”任务没有反馈任何错误标志时,测试工具成功完成测试,并停止运行。
图22顶层UART时序仿真
图22表示使用2Mhz波特率的仿真序列,其执行了如图21所示的for循环。
测试的流程
1、发送模块执行“写入发送”任务,数据写入发送模块。
2、在“写”信号的上升沿,写入的数据被自动地加载到“data_written[7:
0]”的信号中。
3、txrdy标志位表示发送模块已经准备好要写入新的数据。
4、根据所选择的波特率,数据以并行的形式写入发送模块,并以串行的形式通过tx输出。
5、tx的输出反馈到接收模块的rx的输入。
6、Rxrdy标志位表示接收模块已接收新数据。
7、在rxrdy标志位信号的上升沿,“for循环”执行“读取接收”任务。
在读信号的下降沿,接收到的数据被自动锁存到“data_received[7:
0]”的信号中。
8、Data_received[7:
0]信号与data_writen[7:
0]信号进行比较。
测试工具的不同
我们已经简要地讨论了UART测试工具以及Verilog语言的仿真方式。
上述的UART测试工具采用由设计者选择的信号序列来进行读写测试,但对于更具体的系统级集成的UART仿真,“写入发送”任务和“读取接收”任务可以很容易地通过任何给定的CPU的读写周期信号进行调试修改。
如果在实际应用中,本文提到的仿真功能无法完成实际需要,你可以修改测试工具,来实现需要的仿真功能。
这是一个锻炼自己的好机会。
综合
HDL作为设计方法比传统的FPGA设计方式(如原理图设计)有若干优势,它同时需要拥有极大的灵活性以及高性能的实现综合流程的装置,UART综合流程专门将两个灵活的和高性能的可编程逻辑器件FPGA系列作为服务对象,如pASIC-1和pASIC-2家族。
UART设计和仿真的文件通过Saros公司的TurboWriter技术加载到HDL语言编辑器,其中HDL语言编辑器集成了Synplicity公司的快速高效的综合工具。
综合以后,设计布局仿真使用QuickLogic公司的SpDE布局布线工具。
经过布局布线,UART设计采用“back-annotated”的时序模型进行模拟布局。
QuickLogic公司的QuickWorks工具套件提供了仿真需要的所有工具,布线仿真也可以使用Simucad公司的SilosIII快速Verilog仿真工具。
图25QuickWorks工具套件
TheserialcontrollerdesignbasedonFPGA
Introduction
Theuseofhardwaredescriptionlanguage(HDL)isbecomingamoredominantfactor,whendesigningandverifyingFPGAdesigns.Theuseofbehaviorleveldescriptionnotonlyincreasesthedesignproductivity,butalsoprovidesuniqueadvantagesinthedesignverification.ThemostdominantHDLstodayarecalledVerilogandVHDL.ThisapplicationnotewillillustratetheuseofVerilogindesignandverificationofadigitalUART(UniversalAsynchronousReceiver&Transmitter).
DefiningtheUART.
TheUARTconsistsoftwoindependentHDLmodules.Onemoduleimplementsthe
transmitter,whiletheothermoduleimplementsthereceiver.Thetransmitterandreceivermodulescanbecombinedatthetoplevelofthedesign,foranycombinationsoftransmitterandreceiverchannelsrequired.Datacanbewrittentothetransmitterandreadoutfromthereceiver,allthroughasingle8bitbi-directionalCPUinterface.Addressmappingforthetransmitterandreceiverchannelscaneasilybebuildinto
theinterfaceatthetoplevelofthedesign.Bothmodulesshareacommonmasterclockcalledmclkx16.Withineachmodulemclkx16aredivideddowntoindependentbaudrateclocks.
UARTfunctionaloverview.
AbasicoverviewoftheUARTisshownbelow.Atthelefthandside
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- HDL 设计 数字 UART 中英文 翻译