哈工大电信学院FPGA报告.docx

上传人:b****5 文档编号:6788986 上传时间:2023-01-10 格式:DOCX 页数:19 大小:165.10KB
下载 相关 举报
哈工大电信学院FPGA报告.docx_第1页
第1页 / 共19页
哈工大电信学院FPGA报告.docx_第2页
第2页 / 共19页
哈工大电信学院FPGA报告.docx_第3页
第3页 / 共19页
哈工大电信学院FPGA报告.docx_第4页
第4页 / 共19页
哈工大电信学院FPGA报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

哈工大电信学院FPGA报告.docx

《哈工大电信学院FPGA报告.docx》由会员分享,可在线阅读,更多相关《哈工大电信学院FPGA报告.docx(19页珍藏版)》请在冰豆网上搜索。

哈工大电信学院FPGA报告.docx

哈工大电信学院FPGA报告

 

FPGA设计与应用

综合实验报告

 

班级:

姓名:

学号:

日期:

2016年11月3日

 

实实验性质:

验证性实验类型:

必做

开课单位:

电信院学时:

10学时

一、实验目的

1、了解分频器和计数器的基本实现原理;

2、掌握七段数码管的使用方法;

3、掌握锁相环的使用方法;

4、掌握串口通信的基本原理和实现方法;

5、了解线性分组码的基本原理及实现方法;

6、掌握大型工程的模块设计方法。

二、实验要求

该综合实验由两个独立的实验构成,分别是:

综合实验1:

(7,4)汉明编码、串口发送和数码管显示综合实验。

在该实验中,要求能够利用4个拨码开关产生4个信息比特送给FPGA;随后FPGA利用(7,4)汉明码对这4个信息比特进行编码;编码后的7位码字一方面通过串口送给计算机进行显示,另一方面通过七段数码管进行显示。

由于(7,4)汉明码的每个码字只有7个比特,而串口通信通常需要8个比特,所以采用低位插零的方式将7位汉明码字扩充为8个比特再进行串口传输和数码管显示。

要求使用2个七段数码管,其中一个显示扩充汉明码中的高4位(即信息位),而另一个数码管显示扩充汉明码中的低4位(即校验位)

综合实验2:

(7,4)汉明译码、串口接收和数码管显示综合实验。

在该实验中,要求能够利用计算机的串口发送汉明码字(可以是没有错误的汉明码字,也可以是有一个比特错误的汉明码字);然后利用FPGA进行串口数据接收;接收后进行(7,4)汉明译码,并将译码后的结果送给七段数码管进行显示。

要求使用4个七段数码管,其中2个数码管用于显示从串口接收到的数据,另一个数码管用于显示汉明译码后的正确信息比特,最后一个数码管用于指示出错比特的位置。

三、实验准备(10分)

3.1串口通信的基本原理(5分)

串口通信指口按位发送和接收字节。

通信使用3根线完成,分别是地线、发送、接收。

由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根

线上接收数据。

其他线用于握手,但不是必须的。

串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。

对于两个进行通信的端口,这些参数必须匹配。

波特率表示每秒传输的位数,接受发送双方必须匹配。

不发送数据时,连线上为高电平。

发送数据时,要首先发送一个起始位,为低电平,然后按照协议发送需要的数据,八位或者九位(带有校验位),然后发送一个停止位,为高电平。

接收时,要首先确定起始位,然后按照协议接受八位或者九位数据。

接受完成后继续判断起始位,开始下一个接受周期。

3.2(7,4)汉明码的编译码基本原理(5分)

一般来说,若汉明码长为n,信息位数为k,则监督位数r=n-k。

若希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求

(1)

下面以(7,4)汉明码为例说明原理:

设汉明码(n,k)中k=4,为了纠正一位错码,由式

(1)可知,要求监督位数r≥3。

若取r=3,则n=k+r=7。

我们用

来表示这7个码元,用

的值表示3个监督关系式中的校正子,则

的值与错误码元位置的对应关系可以规定如表1所列。

错码位置

错码位置

001

101

010

110

100

111

011

000

无错码

表1监督位与错码位置

则由表1可得监督关系式:

(2)

在发送端编码时,信息位

的值决定于输入信号,因此它们是随机的。

监督位

应根据信息位的取值按监督关系来确定,即监督位应使式

(2)~式(4)中

的值为0(表示编成的码组中应无错码)

(3)

当数字信号编码成汉明码形式(本文中即A)后在信道中传输,由于信道中噪声的干扰,可能由于干扰引入差错,使得接收端收到错码,因此在接收端进行汉明码纠错,以提高通信系统的抗干扰能力及可靠性。

监督位计算结果:

C6

C5

C4

C3

C2

C1

C0

U

X

0

0

0

0

0

0

0

0

00H

0

0

0

1

1

0

1

0

1AH

0

0

1

0

1

1

1

0

2EH

0

0

1

1

0

1

0

0

34H

0

1

0

0

0

1

1

0

46H

0

1

0

1

1

1

0

0

5CH

0

1

1

0

1

0

0

0

68H

0

1

1

1

0

0

1

0

72H

1

0

0

0

1

1

0

0

8CH

1

0

0

1

0

1

1

0

96H

1

0

1

0

0

0

1

0

A2H

1

0

1

1

1

0

0

0

B8H

1

1

0

0

1

0

1

0

CAH

1

1

0

1

0

0

0

0

D0H

1

1

1

0

0

1

0

0

E4H

1

1

1

1

1

1

1

0

FEH

表2(7,4)汉明码编码

四、代码及测试(25分)

4.1综合实验1的原理框图、代码及相关说明(8分)

原理框图:

图1发送数据

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYEX1IS

PORT(xyt_CLK:

INSTD_LOGIC;

xyt_IN:

INSTD_LOGIC_VECTOR(3DOWNTO0);

xyt_LEDH:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

xyt_LEDL:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

xyt_OUT:

OUTSTD_LOGIC);

ENDEX1;

ARCHITECTURExytOFEX1IS

TYPExyt_STATE_TYPEIS(xyt_STATE_IDLE,xyt_STATE_START,xyt_STATE_SEND,xyt_STATE_STOP);

SIGNALname_STATE:

name_STATE_TYPE:

=name_STATE_IDLE;

SIGNALname_EN:

STD_LOGIC_VECTOR(7DOWNTO0);

SIGNALname_BAUD:

STD_LOGIC;

SIGNALname_BAUDCNT:

STD_LOGIC_VECTOR(8DOWNTO0);

SIGNALname_STOPCNT:

STD_LOGIC_VECTOR(15DOWNTO0);

BEGIN

U1:

PROCESS(name_CLK)

BEGIN

IFname_CLK'EVENTANDname_CLK='1'THEN

IFname_BAUDCNT<217THEN

name_BAUDCNT<=name_BAUDCNT+1;

name_BAUD<='0';

ELSIFname_BAUDCNT<434THEN

name_BAUDCNT<=name_BAUDCNT+1;

name_BAUD<='1';

ELSE

name_BAUDCNT<=(OTHERS=>'0');

name_BAUD<='0';

ENDIF;

ENDIF;

ENDPROCESS;

U2:

PROCESS(name_CLK)

BEGIN

name_EN(7DOWNTO4)<=name_IN(3DOWNTO0);

name_EN(3)<=name_IN(3)XORname_IN

(1)XORname_IN(0);

name_EN

(2)<=name_IN(3)XORname_IN

(2)XORname_IN

(1);

name_EN

(1)<=name_IN

(2)XORname_IN

(1)XORname_IN(0);

name_EN(0)<='0';

ENDPROCESS;

U3:

PROCESS(name_BAUD)

BEGIN

IFname_BAUD'EVENTANDname_BAUD='1'THEN

CASEname_EN(3DOWNTO0)IS

WHEN"0000"=>name_LEDL<="1000000";

WHEN"0001"=>name_LEDL<="1111001";

WHEN"0010"=>name_LEDL<="0100100";

WHEN"0011"=>name_LEDL<="0110000";

WHEN"0100"=>name_LEDL<="0011001";

WHEN"0101"=>name_LEDL<="0010010";

WHEN"0110"=>name_LEDL<="0000010";

WHEN"0111"=>name_LEDL<="1111000";

WHEN"1000"=>name_LEDL<="0000000";

WHEN"1001"=>name_LEDL<="0010000";

WHEN"1010"=>name_LEDL<="0001000";

WHEN"1011"=>name_LEDL<="0000011";

WHEN"1100"=>name_LEDL<="1000110";

WHEN"1101"=>name_LEDL<="0100001";

WHEN"1110"=>name_LEDL<="0000110";

WHENOTHERS=>name_LEDL<="0001110";

ENDCASE;

CASEname_EN(7DOWNTO4)IS

WHEN"0000"=>name_LEDH<="1000000";

WHEN"0001"=>name_LEDH<="1111001";

WHEN"0010"=>name_LEDH<="0100100";

WHEN"0011"=>name_LEDH<="0110000";

WHEN"0100"=>name_LEDH<="0011001";

WHEN"0101"=>name_LEDH<="0010010";

WHEN"0110"=>name_LEDH<="0000010";

WHEN"0111"=>name_LEDH<="1111000";

WHEN"1000"=>name_LEDH<="0000000";

WHEN"1001"=>name_LEDH<="0010000";

WHEN"1010"=>name_LEDH<="0001000";

WHEN"1011"=>name_LEDH<="0000011";

WHEN"1100"=>name_LEDH<="1000110";

WHEN"1101"=>name_LEDH<="0100001";

WHEN"1110"=>name_LEDH<="0000110";

WHENOTHERS=>name_LEDH<="0001110";

ENDCASE;

ENDIF;

ENDPROCESS;

U4:

PROCESS(name_BAUD)

VARIABLEname_NUM:

INTEGERRANGE7DOWNTO0;

BEGIN

IFname_BAUD'EVENTANDname_BAUD='1'THEN

CASEname_STATEIS

WHENname_STATE_IDLE=>

name_OUT<='1';

name_STATE<=name_STATE_START;

WHENname_STATE_START=>

name_OUT<='0';

name_NUM:

=0;

name_STATE<=name_STATE_SEND;

WHENname_STATE_SEND=>

name_OUT<=name_EN(name_NUM);

IFname_NUM<7THEN

name_NUM:

=name_NUM+1;

name_STATE<=name_STATE_SEND;

ELSE

name_STOPCNT<=X"0000";

name_STATE<=name_STATE_STOP;

ENDIF;

WHENname_STATE_STOP=>

name_OUT<='1';

IFname_STOPCNT>=X"FFFF"THEN

name_STOPCNT<=X"0000";

name_STATE<=name_STATE_IDLE;

ELSE

name_STOPCNT<=name_STOPCNT+1;

name_STATE<=name_STATE_STOP;

ENDIF;

WHENOTHERS=>

name_STATE<=name_STATE_IDLE;

ENDCASE;

ENDIF;

ENDPROCESS;

ENDname;

4.2综合实验2的原理框图、代码及相关说明(9分)

原理框图:

图2译码接收原理图

ENTITYEX2IS

PORT(name_CLK:

INSTD_LOGIC;

name_RXD:

INSTD_LOGIC;

name_RCVH:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

name_RCVL:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

name_YM_R:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

name_WR:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDENTITYEX2;

ARCHITECTUREnameOFEX2IS

TYPEname_RCV_TYPEIS(name_RCV_IDLE,name_RCV_STOP,name_RCV_DATA);

SIGNALname_STATE:

name_RCV_TYPE:

=name_RCV_IDLE;

SIGNALname_BAUD:

STD_LOGIC;

SIGNALname_BAUDCNT:

STD_LOGIC_VECTOR(8DOWNTO0);

SIGNALname_BAUD8:

STD_LOGIC;

SIGNALname_BAUD8CNT:

STD_LOGIC_VECTOR(7DOWNTO0);

SIGNALname_FLAG:

STD_LOGIC:

='0';

SIGNALname_S:

STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALname_RCV:

STD_LOGIC_VECTOR(7DOWNTO0);

SIGNALname_YM:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALname_DATA:

STD_LOGIC_VECTOR(7DOWNTO0);

SIGNALname_RXD_NEXT:

STD_LOGIC;

SIGNALname_RIGHT:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

U1:

PROCESS(name_CLK)

BEGIN

IFname_CLK'EVENTANDname_CLK='1'THEN

IFname_BAUDCNT<216THEN

name_BAUDCNT<=name_BAUDCNT+1;

name_BAUD<='0';

ELSIFname_BAUDCNT<434THEN

name_BAUDCNT<=name_BAUDCNT+1;

name_BAUD<='1';

ELSE

name_BAUDCNT<=(OTHERS=>'0');

name_BAUD<='0';

ENDIF;

ENDIF;

ENDPROCESS;

U11:

PROCESS(name_CLK)

BEGIN

IFname_CLK'EVENTANDname_CLK='1'THEN

IFname_BAUD8CNT<27THEN

name_BAUD8CNT<=name_BAUD8CNT+1;

name_BAUD8<='0';

ELSIFname_BAUD8CNT<54THEN

name_BAUD8CNT<=name_BAUD8CNT+1;

name_BAUD8<='1';

ELSE

name_BAUD8CNT<=(OTHERS=>'0');

name_BAUD8<='0';

ENDIF;

ENDIF;

ENDPROCESS;

U2:

PROCESS(name_BAUD8)

VARIABLEname_NUM,NUM:

INTEGER:

=0;

VARIABLEname_NUM0,name_NUM1:

INTEGER:

=0;

VARIABLEname_RCV_TEMP:

STD_LOGIC_VECTOR(8DOWNTO0);

VARIABLEname_FLAG:

STD_LOGIC:

='0';

BEGIN

IFname_BAUD8'EVENTANDname_BAUD8='1'THEN

name_RXD_NEXT<=name_RXD;

IFname_FLAG='0'THEN

IFname_RXD='0'ANDname_RXD_NEXT='1'THEN

name_FLAG:

='1';

ENDIF;

ELSE

IFname_RXD='0'THEN

name_NUM0:

=name_NUM0+1;

ELSEname_NUM1:

=name_NUM1+1;

ENDIF;

name_NUM:

=name_NUM+1;

IFname_NUM=8THEN

IFname_NUM0>name_NUM1THEN

name_RCV_TEMP(NUM):

='0';

ELSEname_RCV_TEMP(NUM):

='1';

ENDIF;

NUM:

=NUM+1;

name_NUM:

=0;

name_NUM0:

=0;

name_NUM1:

=0;

ENDIF;

IFNUM=9THEN

IFname_RCV_TEMP(0)='0'THEN

name_RCV<=name_RCV_TEMP(8DOWNTO1);

ENDIF;

name_FLAG:

='0';

NUM:

=0;

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

U3:

PROCESS(name_BAUD)

BEGIN

IFname_BAUD'EVENTANDname_BAUD='1'THEN

CASEname_RCV(7DOWNTO4)IS

WHEN"0000"=>name_RCVH<="1000000";

WHEN"0001"=>name_RCVH<="1111001";

WHEN"0010"=>name_RCVH<="0100100";

WHEN"0011"=>name_RCVH<="0110000";

WHEN"0100"=>name_RCVH<="0011001";

WHEN"0101"=>name_RCVH<="0010010";

WHEN"0110"=>name_RCVH<="0000010";

WHEN"0111"=>name_RCVH<="1111000";

WHEN"1000"=>name_RCVH<="0000000";

WHEN"1001"=>name_RCVH<="0010000";

WHEN"1010"=>name_RCVH<="0001000";

WHEN"1011"=>name_RCVH<="0000011";

WHEN"1100"=>name_RCVH<="1000110";

WHEN"1101"=>name_RCVH<="0100001";

WHEN"1110"=>name_RCVH<="0000110";

WHEN"1111"=>name_RCVH<="0001110";

WHENOTHERS=>NULL;

ENDCASE;

CASEname_RCV(3DOWNTO0)IS

WHEN"0000"=>name_RCVL<="1000000";

WHEN"0001"=>name_RCVL<="1111001";

WHEN"0010"=>name_RCVL<="0100100";

WHEN"0011"=>name_RCVL<="0110000";

WHEN"0100"=>name_RCVL<="0011001";

WHEN"0101"=>name_RCVL<="0010010";

WHEN"0110"=>name_RCVL<="0000010";

WHEN"0111"=>name_RCVL<="1111000";

WHEN"1000"=>name_RCVL<="0000000";

WHEN"1001"=>name_RCVL<="0010000";

WHEN"1010"=>name_RCVL<="0001000";

WHEN"1011"=>name_RCVL<="0000011";

WHEN"1100"=>name_RCVL<="1000110";

WHEN"1101"=>name_RCVL<="0100001";

WHEN

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1