欢迎来到天天文库
浏览记录
ID:50300086
大小:106.00 KB
页数:11页
时间:2020-03-07
《EDA技术与CPLD FPGA开发应用简明教程 教学课件 作者 978--302-15639-07.4 FPGA通用异步收发器.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、UART简介UART(UniversalAsynchronousReceiverTransmitter通用异步收发器)是一种应用广泛的短距离串行传输接口。常常用于短距离、低速、低成本的通讯中。基本的UART通信只需要两条信号线(RXD、TXD)就可以完成数据的相互通信,接收与发送是全双工形式。TXD是UART发送端,为输出;RXD是UART接收端,为输入。7.4FPGA通用异步收发器设计接下页UART在信号线上共有两种状态,可分别用逻辑1(高电平)和逻辑0(低电平)来区分。在发送器空闲时,数据线应该保持在逻辑高电平状态。它的数据帧格式为:STARTD0D1D2D3D4D5D6D7PSTOP起
2、始位数据位校验位停止位UART系统FPGA接口电路接下页由于RS-232接口采用+3V-+15V表示逻辑“0”,-3V--15V表示逻辑“1”,因此必须利用MAX232电平转换电路将其转换为数字逻辑电平。具体线路连接如图7-19所示,其中MAX232的7脚和8脚接标准的9针RS-232接口,9脚和10脚接FPGA的I/O引脚。libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityTOPisPort(CLK:instd_logic;uarti
3、n:instd_logic;DIVCLK:outstd_logic;DIVCLK2:outstd_logic;RxAv:outstd_logic);endTOP;architectureBehavioralofTOPisUART系统VHDL描述接下页signaltempclk:std_logic;signaltempdivclk:std_logic;signalcounter:std_logic_vector(3downto0);signaltempdivclk2:std_logic;signalcounter2:std_logic_vector(11downto0);signaltempd
4、ata:std_logic_vector(7downto0);typestateis(idle,work,tobuf);signalpresent_state:state;signalrxdbuf:std_logic;signalrxdin:std_logic;signalrecclk:std_logic;signaldata_buf:std_logic_vector(7downto0);signalcnt:std_logic_vector(3downto0);接下页signaldivcnt:integerrange0to86;signalbitpos:integerrange0to7;co
5、mponentBUFGport(I:instd_logic;O:outstd_logic);endcomponent;componentIBUFport(I:instd_logic;O:outstd_logic);endcomponent;beginu0:IBUFportmap(I=>uartin,O=>rxdbuf);u1:BUFGportmap(I=>rxdbuf,O=>rxdin);u3:BUFGportmap(I=>clk,O=>tempclk);接下页--产生16倍波特率的时钟T=542.5ns(波特率为115200)process(tempclk)beginiftempclk'e
6、ventandtempclk='1'thenif(counter>="1101")thencounter<="0000";tempdivclk<=nottempdivclk;elsecounter<=counter+'1';endif;endif;endprocess;接下页divclk<=tempdivclk;process(tempdivclk)beginiftempdivclk'eventandtempdivclk='1'thencasepresent_stateiswhenidle=>RxAv<='1';ifrxdin='1'thencnt<="0000";present_state
7、<=idle;elsecnt<=cnt+'1';ifcnt="0111"then接下页present_state<=work;cnt<="0000";bitpos<=0;endif;endif;whenwork=>ifcnt="1111"thencnt<="0000";data_buf(bitpos)<=rxdin;bitpos<=bitpos+1;ifbitpos=7thenbitpos<=0;presen
此文档下载收益归作者所有