【vc++精品源码栏目提醒】:网学会员鉴于大家对vc++精品源码十分关注,论文会员在此为大家搜集整理了“VHDL串口通信源程序 - 网络与通信”一文,供大家参考学习
:VHDL 串口通信程序设计:本模块的功能是验证实现和 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 段数码管上。
library IEEEuse IEEE.STD_LOGIC_1164.ALLuse IEEE.STD_LOGIC_ARITH.ALLuse IEEE.STD_LOGIC_UNSIGNED.ALLENTITY UART IS PORT clk : IN std_logic rst : IN std_logic rxd : IN std_logic 串行数据接收端 txd : OUT std_logic 串行数据发送端 en : OUT std_logic_vector7 downto 0 数码管使能 seg_data : OUT std_logic_vector7 DOWNTO 0 数码管数据 key_input : IN std_logic 按键输入 END UARTARCHITECTURE arch OF UART IS //////////////////inner reg//////////////////// SIGNAL div_reg : std_logic_vector15 DOWNTO 0分频计数器,分频值由波特率决定。
分频后得到频率 8 倍波特率的时钟 SIGNAL div8_tras_reg : std_logic_vector2 DOWNTO 0该寄存器的计数值对应发送时当前位于的时隙数 SIGNAL div8_rec_reg : std_logic_vector2 DOWNTO 0 寄存器的计数值对应接收时当前位于的时隙数 SIGNAL state_tras : std_logic_vector3 DOWNTO 0 发送状态寄存器 SIGNAL state_rec : std_logic_vector3 DOWNTO 0 接受状态寄存器 SIGNAL clkbaud_tras : std_logic 以波特率为频率的发送使能信号 SIGNAL clkbaud_rec : std_logic 以波特率为频率的接受使能信号 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 : std_logic 发送寄存器 SIGNAL rxd_buf : std_logic_vector7 DOWNTO 0接受数据缓存 SIGNAL txd_buf : std_logic_vector7 DOWNTO 0发送数据缓存 SIGNAL send_state : std_logic_vector2 DOWNTO 0每次按键给 PC 发送Welcome字符串,这是发送状态寄存器 SIGNAL cnt_delay : std_logic_vector19 DOWNTO 0延时去抖计数器 SIGNAL start_delaycnt : std_logic 开始延时计数标志 SIGNAL key_entry1 : std_logic 确定有键按下曛 SIGNAL key_entry2 : std_logic 确定有键按下标志 ////////////////////////////////////////////// CONSTANT div_par : std_logic_vector15 DOWNTO 0 :0000000100000100 分频参数,其值由对应的波特率计算而得, 按此参数分频的时钟频率是波倍特率的 8 倍,此处值对应 9600 的波特率,即分频出的时钟频率是 96008 SIGNAL txd_xhdl3 : std_logicBEGIN en