电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

基于vhdl的fpga串口通信VIP免费

基于vhdl的fpga串口通信_第1页
1/9
基于vhdl的fpga串口通信_第2页
2/9
基于vhdl的fpga串口通信_第3页
3/9
----本模块的功能是验证实现和PC机进行基本的串口通信的功能。需要在--PC机上安装一个串口调试工具来验证程序的功能。--程序实现了一个收发一帧10个bit(即无奇偶校验位)的串口控--制器,10个bit是1位起始位,8个数据位,1个结束--位。串口的波特律由程序中定义的div_par参数决定,更改该参数可以实--现相应的波特率。程序当前设定的div_par的值是0x104,对应的波特率是--9600。用一个8倍波特率的时钟将发送或接受每一位bit的周期时间--划分为8个时隙以使通信同步.--程序的工作过程是:串口处于全双工工作状态,按动key2,CPLD向PC发送皐elcome"--字符串(串口调试工具设成按ASCII码接受方式);PC可随时向CPLD发送0-F的十六进制--数据,CPLD接受后显示在7段数码管上。libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYUARTISPORT(clk:INstd_logic;rst:INstd_logic;rxd:INstd_logic;--串行数据接收端txd:OUTstd_logic;--串行数据发送端en:OUTstd_logic_vector(7downto0);--数码管使能seg_data:OUTstd_logic_vector(7DOWNTO0);--数码管数据key_input:INstd_logic--按键输入);ENDUART;ARCHITECTUREarchOFUARTIS--//////////////////innerreg////////////////////SIGNALdiv_reg:std_logic_vector(15DOWNTO0);--分频计数器,分频值由波特率决定。分频后得到频率8倍波特率的时钟SIGNALdiv8_tras_reg:std_logic_vector(2DOWNTO0);--该寄存器的计数值对应发送时当前位于的时隙数SIGNALdiv8_rec_reg:std_logic_vector(2DOWNTO0);--寄存器的计数值对应接收时当前位于的时隙数SIGNALstate_tras:std_logic_vector(3DOWNTO0);--发送状态寄存器SIGNALstate_rec:std_logic_vector(3DOWNTO0);--接受状态寄存器SIGNALclkbaud_tras:std_logic;--以波特率为频率的发送使能信号SIGNALclkbaud_rec:std_logic;--以波特率为频率的接受使能信号SIGNALclkbaud8x:std_logic;--以8倍波特率为频率的时钟,它的作用是将发送或接受一个bit的时钟周期分为8个时隙SIGNALrecstart:std_logic;--开始发送标志SIGNALrecstart_tmp:std_logic;--开始接受标志SIGNALtrasstart:std_logic;SIGNALrxd_reg1:std_logic;--接收寄存器1SIGNALrxd_reg2:std_logic;--接收寄存器2,因为接收数据为异步信号,故用两级缓存SIGNALtxd_reg:std_logic;--发送寄存器SIGNALrxd_buf:std_logic_vector(7DOWNTO0);--接受数据缓存SIGNALtxd_buf:std_logic_vector(7DOWNTO0);--发送数据缓存SIGNALsend_state:std_logic_vector(2DOWNTO0);--每次按键给PC发送"Welcome"字符串,这是发送状态寄存器SIGNALcnt_delay:std_logic_vector(19DOWNTO0);--延时去抖计数器SIGNALstart_delaycnt:std_logic;--开始延时计数标志SIGNALkey_entry1:std_logic;--确定有键按下曛?SIGNALkey_entry2:std_logic;--确定有键按下标志--//////////////////////////////////////////////CONSTANTdiv_par:std_logic_vector(15DOWNTO0):="0000000100000100";--分频参数,其值由对应的波特率计算而得,按此参数分频的时钟频率是波倍特率的8倍,此处值对应9600的波特率,即分频出的时钟频率是9600*8SIGNALtxd_xhdl3:std_logic;BEGINen<="01010101";--7段数码管使能信号赋值txd<=txd_xhdl3;txd_xhdl3<=txd_reg;PROCESS(clk,rst)BEGINIF(NOTrst='1')THENcnt_delay<="00000000000000000000";start_delaycnt<='0';ELSIF(clk'EVENTANDclk='1')THENIF(start_delaycnt='1')THENIF(cnt_delay/="11000011010100000000")THENcnt_delay<=cnt_delay+"00000000000000000001";ELSEcnt_delay<="00000000000000000000";start_delaycnt<='0';ENDIF;ELSEIF((NOTkey_input='1')AND(cnt_delay="00000000000000000000"))THENstart_delaycnt<='1';ENDIF;ENDIF;ENDIF;ENDPROCESS;PROCESS(clk,rst)BEGINIF(NOTrst='1')THENkey_entry1<='0';ELSIF(clk'EVENTANDclk='1')THENIF(key_entry2='1')THENkey_entry1<='0';ELSEIF(cnt_delay="11000011010100000000")THENIF(NOTkey_input='1')THENkey_entry1<='1';ENDIF;ENDIF;ENDIF;ENDIF;ENDPROCESS;P...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

基于vhdl的fpga串口通信

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部