串口通信FPGA实现.doc
文本预览下载声明
FPGA设计与应用
实验报告
班级:
姓名:
学号:
日期:年月日
实验性质:验证性 实验类型:必做
开课单位:电信院 学时:2学时
一、实验目的
1、了解串口通信的基本原理;
2、掌握锁相环的基本原理和使用方法;
3、掌握起始位和停止位的含义及实现方法;
4、掌握VHDL状态机的基本使用方法;
5、掌握基本的接口设计和调试技巧;
二、实验准备
2.1 原理串行线缆的两端事先约定好串行传输的参数(传输速度、传输格式等当没有数据传输的时候,发送端向数据线上发送发送端先发送一个来表示传输这样接收端便可以知道有数据到来了开始传输后,数据以约定的速度和格式传输④每次传输完成一个字节之后,都在其后发送一个停止位2.2 锁相环的基本原理(1分)
锁相环。它由三组成:鉴相器(PD)、环路滤波器(LPF)和压控振荡器(VCO)。锁相环的工作原理:压控振荡器的输出经过采集并分频,后基准信号同时输入鉴相器。鉴相器通过比较上述两个信号的差,然后输出一个直流脉冲电压,用它来控制VCO,使它的频率改变。经过短时间,VCO 的输出稳定于某一值。环路一旦进入锁定状态后,压控振荡器的输出信号与环路的输入信号(参考信号)。
三、代码及测试
3.1
顶层原理图如上所示,主要包括三个模块,锁相环(输出57.69MHz)、分频(输出接受时的10倍采样速率和数码管显示速率)、接受(按57.6kbps接受从串口发来的数据)。
分频模块代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DIV IS
PORT(CLK : IN STD_LOGIC;
--锁相环输出时钟57.69M
COUT1 : OUT STD_LOGIC;
--分频器输出采样时钟576k
COUT2 : OUT STD_LOGIC);
--分频器产产生扫描时钟100hz
END DIV;
ARCHITECTURE BEHAV OF DIV IS
BEGIN
PROCESS(CLK)
VARIABLE COUT1_NUM : STD_LOGIC_VECTOR(5 DOWNTO 0):=(OTHERS = 0); --输出时钟1 计数器
VARIABLE COUT2_NUM : STD_LOGIC_VECTOR(18 DOWNTO 0):=(OTHERS = 0); --输出时钟2 计数?
VARIABLE COUT1_1 : STD_LOGIC;
VARIABLE COUT2_2 : STD_LOGIC;
BEGIN
IF RISING_EDGE(CLK) THEN
IF COUT1_NUM = 49 THEN
COUT1_1 := NOT COUT1_1;
COUT1_NUM := (OTHERS = 0);
ELSE
COUT1_NUM := COUT1_NUM + 1;
END IF;
IF COUT2_NUM = 288450 THEN
COUT2_2 := NOT COUT2_2;
COUT2_NUM := (OTHERS = 0);
ELSE
COUT2_NUM := COUT2_NUM + 1;
END IF;
COUT1 = COUT1_1;
COUT2 = COUT2_2;
END IF;
END PROCESS;
END BEHAV;
接受模块代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COM_REC IS
PORT(CLK_10 : IN STD_LOGIC;
--输入时钟,按10倍采样,是rs232串口速率的10倍
CLK_DIS : IN STD_LOGIC;
-- DISPLAY CLK
INNUM : IN STD_LOGIC;
--输入的值
LED_EN : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
LED : OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END;
ARCHITECTURE BEHAV OF COM_REC IS
TYPE STATE IS (SPARE, READY, REC,
显示全部