10.6典型实例16:RS-232C(UART)接口的规划与完结
10.6.1实例内容及方针
1.实例的首要内容
本节旨在经过剖析UART操控器,规划完结了FPGA经过RS-232C接口与PC机的通讯。规划进程顶用Modelsim对UART操控器进行仿真,协助读者进一步了解UART协议的具体时序。
2.实例方针
经过本实例,读者应到达以下方针。
·了解UART作业原理和时序。
·了解Modelsim仿真的流程。
·熟练把握状况机的运用。
·完结FPGA与PC机之间的RS-232C接口通讯。
10.6.2实例详解
体系上电复位后,先将20个数写入FPGA内部资源BlockRam(可以用IP核来完结),然后依据设定的协议(该协议可自己设定)来树立PC机与FPGA的通讯,此处设定的协议如下。
PC机要从串口读取数据时,先从串口发送E4H、00H。E4H代表FPGA的地址(可以随意设定一个数),00H表明要读取数据。FPGA收到这两个数据后,经过串口给PC机反应信号。发送E4H、E1H,表明FPGA现已收到了PC机的指令,要开端向PC机发送数据。PC端预备接纳数据,树立了此衔接后,PC机可从FPGA读出开端写入BlockRam中的值了。
10.6.3BlockRAM的完结办法
关于BlockRam,可以直接使用IP核来完结,具体完结进程如下。
首先为工程增加新的规划文件,挑选“NewSource…”,如图10.23所示。
图10.23新建IP核规划文件
在弹出的对话框里边挑选创立IP(CoreGenArchitectureWizard)类型文件,并为该文件设置文件名及途径,单击“Next”按钮,如图10.24所示。
图10.24挑选IP核类型
在挑选IP核类型对话框中挑选“DualPortBlockMemory6-1”,即可生成一个双口RAM。单击“Next”按钮进入双口RAM设置导游,如图10.25所示。
在该导游中,要对该双口RAM的特点进行设置。
图10.25双口BlockMemory设置导游
如图10.25所示,WidthA、WidthB分别为写入两个口的数据的位数,Depth为容量,在这儿设为100,实践中只用到20个。对A口,上电复位后,就将20个数据写入A口,因而A口设为WriteOnly,关于B口,FPGA向PC机发送数据时从B口读取数据,因而B口设为ReadOnly,设置结束后单击“Generate”按钮即可。
10.6.4FPGA代码的规划完结
整个代码选用了4个状况机来完结,其间两个状况机用于从串口读取数据,别的两个用于向串口写入数据。下面以从串口读取数据为例来阐明状况机的作业进程。
从串口读取数据的两个状况机首要完结如下功用:从串口接纳到字符,并判别是不是E4H、00H(自定协议规则的内容),假如是,就给出Response(应对)信号,告诉发送数据状况机开端向PC机发送数据。
这两个状况机,一个为主状况机,用于接连从串口读取数据;一个为辅状况机,用于从串口读取一个字节的数据。因为串口接纳数据是一位一位地接纳,该状况机就操控从串口接纳一切位,并将成果存入一个8位的寄存器。
当辅状况机接纳到一个字符后,就给主状况机一个Received_char信号。主状况机判别是不是E4H信号,假如是,就跳到下一个状况,等候辅状况机接纳下一个字符;假如下一个接纳到的字符是00H,那么就给出Response信号。
体系状况图如图10.26所示。
图10.26体系状况图
状况机描绘是一种非常好的办法,用户可在此基础上加以修正,用于自己的实践规划傍边。单个字符接纳的状况机如图10.27所示。
图10.27单字符接纳状况机
关于发送数据的两个状况机,其作业机理与上面相同,不再赘述。具体规划参阅实例代码。
10.6.5波特率的设定
串口通讯必需要设定波特率。本规划中选用的波特率为9600kbit/s,选用的时钟为50MHz,相当于传送一位数据需要约5028个时钟周期。这儿选用减法计数器来操控,即计数器计到5028个时钟周期后,就开端传输下一位数据(也可以经过对时钟分频来完结)。
10.6.6ModelSim仿真验证
FPGA从串口接纳数据仿真成果,如图10.28所示。
图10.28从串口接纳数据仿真成果
rxd为模仿PC机宣布的E4H、00H信号。从图中可以看到,当FPGA收到这两个信号后,给出了Response脉冲。发送状况机收到该信号后,给出txd的低电平信号,告诉PC机要开端发送数据了。
如图10.29所示,txd为FPGA向PC机发送的数据。发送状况机收到Response信号后,给出txd低电平信号,开端发送数据。先发送应对信号E4H、E1H,之后开端发送开端写入BlockRam的20个数,从0~19。图中raddr为BlockRam的地址,rdata为从BlockRam中读取的数据。
图10.29SDRAM操控器仿真成果
在仿真时,为了显现便利,没有依照5028个时钟传输一位,而是4个时钟就传输一位。
10.6.7小结
本节对数字体系中常用的UART操控器做了开始的介绍,并在Modelsim中完结了对SDRAM操控器的仿真,最终经过编译下载在赤色飓风的开发板上完结了预订功用。
经过这个实例,读者可以把握UART操控器以及RS-232C接口的规划完结办法,并学会将这个操控器集成到更为杂乱的规划中去。