1 / 16
文档名称:

基于vhdl的fpga串口通信.docx

格式:docx   大小:19KB   页数:16页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

基于vhdl的fpga串口通信.docx

上传人:kunpengchaoyue 2021/1/18 文件大小:19 KB

下载得到文件列表

基于vhdl的fpga串口通信.docx

相关文档

文档介绍

文档介绍:基于 vhdl 的 fpga 串口通信
-- 本模块的功能是验证实现和 PC 机进行差不多的串口通信的功能。 需 要在
--PC 机上安装一个串口调试工具来验证程序的功能。
--程序实现了一个收发一帧10个bit (即无奇偶校验位)的串口控
--制器,10个 bit 是 1 位起始位, 8 个数据位, 1 个终止
--位。串口的波特律由程序中定义的 div_par参数决定,更换该参数能 够实
--现相应的波特率。程序当前设定的 div_par的值是0x104,对应的波 特率是
--9600。用一个 8倍波特率的时钟将发送或同意每一位 bit 的周期时刻
--划分为 8 个时隙以使通信同步 .
--程序的工作过程是:串口处于全双工工作状态,按动 key2, CPLD 向
PC 发送皐 elcome"
--字符串(串口调试工具设成按 ASCII码同意方式);PC可随时向CP
LD 发送 0-F 的十六进制
--数据, CPLD 同意后显示在 7 段数码管上。
library IEEE;
use ;
use ;
use ;
ENTITY UART IS
PORT (
clk
: IN std_logic;
rst
: IN std_logic;
rxd
: IN std_logic; --串行数据接收端
txd
: OUT std_logic; --串行数据发送端
en
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 DOW
NTO 0);--分频计数器,分频值由波特率决定。分频后得到频率 8 倍波特率
的时钟
SIGNAL div8_tras_reg : std_logic_vector(2 DOWNT
O 0);-- 该寄存器的计数值对应发送时当前位于的时隙数
SIGNAL div8_rec_reg : std_logic_vector(2 DOWNT
O 0); -- 寄存器的计数值对应接收时当前位于的时隙数
SIGNAL state_tras
O 0); -- 发送状态寄存器
SIGNAL state_rec
O 0); -- 同意状态寄存器
SIGNAL clkbaud_tras 率的发送使能信号
SIGNAL clkbaud_rec 率的同意使能信号
std_logic_vector(3 DOWNT std_logic_vector(3 DOWNT std_logic; --以波特率为频 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_vector(7 DOWN
TO 0);--同意数据缓存
SIGNAL txd_buf
: std_logic_vector(7 DOWN
TO 0);--发送数据缓存
SIGNAL send_state :
std_logic_vector(2 DOWNT
O 0);--每次按键给PC发送"Welcome"字符串,
这是发送状态寄存器
SIGNAL cnt_delay
: std_logic_vector(19 DOW
NT