串口通信FPGA实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FPGA设计与应用

串口通信实验报告

班级:1105103

姓名:苏林效

学号:1110510321

日期:2014年10月29日

实验性质:验证性实验类型:必做

开课单位:电信院学时:2学时

一、实验目的

1、了解串口通信的基本原理;

2、掌握锁相环的基本原理和使用方法;

3、掌握起始位和停止位的含义及实现方法;

4、掌握VHDL状态机的基本使用方法;

5、掌握基本的接口设计和调试技巧;

二、实验准备

2.1 串口通信原理(1分)

串口通信是以字节为单位,按位传输数据和接收数据的。

先看一下发送数据:串行线缆的两端事先约定好串行传输的参数(传输速度、传输格式等),之后进行传输,①当没有数据传输的时候,发送端向数据线上发送“1”;②当要传输数据时,发送端先发送一个“0”来表示要传输数据了,这样当接收端检测到“0”便可以知道有数据到来了;③开始传输后,数据以约定的速度和格式传输;④每次传输完成一个字节之后,都在其后发送一个停止位“1”。这样,发送数据就结束了。

再来看接收数据,初始状态是等待状态,接收的一直是“1”,当检测到0时进入检验状态,在检验状态下如果再检测到0(一般采用过采样)则进入接收数据状态,当接收完8位比特数后判断是否有停止位,如果有则此字节接收结束,重新进入等待状态准备接受下一字节。

2.2 锁相环的基本原理(1分)

锁相环是以锁定输入载波信号的相位为目标的一种载波环实现形式。它由三部分组成:鉴相器(PD)、环路滤波器(LPF)和压控振荡器(VCO)。如上图。

锁相环的工作原理:压控振荡器的输出经过采集并分频,后与基准信号同时

输入鉴相器。鉴相器通过比较上述两个信号的相位差,输出结果通过环路滤波器,滤除噪声和高频分量,然后输出一个直流脉冲电压,用它来控制VCO ,使它的频率改变,使()lim 0c p t θ=。经过较短时间后,VCO 的输出稳定于某一值。环路一旦进入锁定状态后,压控振荡器的输出信号与环路的输入信号(参考信号)相位时刻保持一致。 三、代码及测试

3.1程序及分析(2分)

顶层原理图如上所示,主要包括三个模块,锁相环(输出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)

V ARIABLE COUT1_NUM : STD_LOGIC_VECTOR(5 DOWNTO 0):=(OTHERS => '0'); --输出时钟1 计数器

V ARIABLE COUT2_NUM : STD_LOGIC_VECTOR(18 DOWNTO 0):=(OTHERS => '0'); --输出时钟2 计数?

V ARIABLE COUT1_1 : STD_LOGIC;

V ARIABLE 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, STOP);

--定义接受4状态

SIGNAL TR_INNUM : STD_LOGIC_VECTOR(7 DOWNTO 0); --接收到8位数

SIGNAL LED_L : STD_LOGIC_VECTOR(6 DOWNTO 0);

--控制两位数码管显示

SIGNAL LED_H : STD_LOGIC_VECTOR(6 DOWNTO 0);

相关文档
最新文档