VHDL设计的串口通信程序_第1页
VHDL设计的串口通信程序_第2页
VHDL设计的串口通信程序_第3页
VHDL设计的串口通信程序_第4页
VHDL设计的串口通信程序_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、【Word版本下载可任意编辑】 VHDL设计的串口通信程序 本模块的功能是验证实现和PC机开展基本的串口通信的功能。需要在PC机上安装一个串口调试工具来验证程序的功能。程序实现了一个收发一帧10个bit(即无奇偶校验位)的串口控制器,10个bit是1位起始位,8个数据位,1个结束位。串口的波特律由程序中定义的div_par参数决定,更改该参数可以实现相应的波特率。程序当前设定的div_par 的值是0 x104,对应的波特率是9600。用一个8倍波特率的时钟将发送或承受每一位bit的周期时间划分为8个时隙以使通信同步。 程序的工作过程是:串口处于全双工工作状态,按动key2,CPLD向PC发送

2、皐elcome字符串(串口调试工具设成按ASCII码承受方式);PC可随时向CPLD发送0-F的十六进制数据,CPLD承受后显示在7段数码管上。 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY UART IS PORT ( clk : IN std_logic; rst : IN std_logic; rxd : IN std_logic; 串行数据接收端 txd : OUT std_logic; 串行数据发送端 en

3、 : OUT std_logic_vector(7 downto 0); 数码管使能 seg_data : OUT std_logic_vector(7 DOWNTO 0); 数码管数据 key_input : IN std_logic 按键输入 ); END UART; ARCHITECTURE arch OF UART IS /inner reg/ SIGNAL div_reg : std_logic_vector(15 DOWNTO 0);分频计数器,分频值由波特率决定。分频后得到频率8倍波特率的时钟 SIGNAL div8_tras_reg : std_logic_vector(2 D

4、OWNTO 0);该存放器的计数值对应发送时当前位于的时隙数 SIGNAL div8_rec_reg : std_logic_vector(2 DOWNTO 0); 存放器的计数值对应接收时当前位于的时隙数 SIGNAL state_tras : std_logic_vector(3 DOWNTO 0); 发送状态存放器 SIGNAL state_rec : std_logic_vector(3 DOWNTO 0); 承受状态存放器 SIGNAL clkbaud_tras : std_logic; 以波特率为频率的发送使能信号 SIGNAL clkbaud_rec : std_logic; 以

5、波特率为频率的承受使能信号 SIGNAL clkbaud8x : std_logic; 以8倍波特率为频率的时钟,它的作用是将发送或承受一个bit的时钟周期分为8个时隙 SIGNAL recstart : std_logic; 开始发送标志 SIGNAL recstart_tmp : std_logic; 开始承受标志 SIGNAL trasstart : std_logic; SIGNAL rxd_reg1 : std_logic; 接收存放器1 SIGNAL rxd_reg2 : std_logic; 接收存放器2,因为接收数据为异步信号,故用两级缓存 SIGNAL txd_reg : s

6、td_logic; 发送存放器 SIGNAL rxd_buf : std_logic_vector(7 DOWNTO 0);承受数据缓存 SIGNAL txd_buf : std_logic_vector(7 DOWNTO 0);发送数据缓存 SIGNAL send_state : std_logic_vector(2 DOWNTO 0);每次按键给PC发送Welcome字符串,这是发送状态存放器 SIGNAL cnt_delay : std_logic_vector(19 DOWNTO 0);延时去抖计数器 SIGNAL start_delaycnt : std_logic; 开始延时计数标

7、志 SIGNAL key_entry1 : std_logic; 确定有键按下曛? SIGNAL key_entry2 : std_logic; 确定有键按下标志 / C*TANT div_par : std_logic_vector(15 DOWNTO 0) := 0000000100000100; 分频参数,其值由对应的波特率计算而得,按此参数分频的时钟频率是波倍特率的8倍,此处值对应9600的波特率,即分频出的时钟频率是9600*8 SIGNAL txd_xhdl3 : std_logic; BEGIN en 发送起始位 IF (NOT trasstart=1) AND (send_st

8、ate 发送第1位 IF (clkbaud_tras = 1) THEN txd_reg 发送第2位 IF (clkbaud_tras = 1) THEN txd_reg 发送第3位 IF (clkbaud_tras = 1) THEN txd_reg 发送第4位 IF (clkbaud_tras = 1) THEN txd_reg 发送第5位 IF (clkbaud_tras = 1) THEN txd_reg 发送第6位 IF (clkbaud_tras = 1) THEN txd_reg 发送第7位 IF (clkbaud_tras = 1) THEN txd_reg 发送第8位 IF (clkbaud_tras = 1) THEN txd_reg 发送停止位 IF (clkbaud_tras = 1) THEN txd_reg IF (clkbaud_tras = 1) THEN state_tras txd_buf txd_buf txd_buf IF (clkbaud_tras = 1) THEN state_tras = 0001 AND state_rec seg_data seg_data seg_data seg_data seg_data seg_data seg_da

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论