哈工大电信学院FPGA报告.docx
- 文档编号:7357041
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:19
- 大小:150.24KB
哈工大电信学院FPGA报告.docx
《哈工大电信学院FPGA报告.docx》由会员分享,可在线阅读,更多相关《哈工大电信学院FPGA报告.docx(19页珍藏版)》请在冰豆网上搜索。
哈工大电信学院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"1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哈工大 电信 学院 FPGA 报告