-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
-
56
-
57
-
58
-
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
목차
1. 서론
1.1 연구목적
1.1.1 동기
1.1.2 졸업작품 진행도
1.2 기존연구
1.2.1 OFDM 이론
1.2.2 HDL(Hardware Description Language)
1.2.3 FPGA를 이용한 설계 흐름
2. 본론
2.1 Xilinx ML310 Board Specification
2.1.1 ML310 Board
2.1.1 Virtex2pro
2.2 Ethernet MAC 연구
2.2.1 Ethernet MAC 원리
2.2.2 Ethernet MAC 스케메틱 및 핀배치
2.3 OFDM MODEM 구현
2.3.1 OFDM MODEM의 원리
2.3.2 OFDM MODEM 구현
2.3.2.1 Mapper & Demapper
2.3.2.2 IFFT & FFT
2.4 UART 구현
2.4.1 FPGA UART 구현
2.4.1.1 UART 송신부
2.4.1.2 UART 수신부
2.4.2 PC 파트 OFDM Client 구현
2.4.2.1 MFC 소개
2.4.2.2 MFC를 이용한 시리얼통신
2.4.2.3 OFDM Client 구현
3. 결과
3.1 OFDM 블록의 MATLAB 시뮬레이션
3.2 OFDM MODEM의 HDL 시뮬레이션 및 합성
3.3 UART 송수신기의 HDL 시뮬레이션 및 합성
3.4 PC 파트 OFDM Client 송수신 동작 결과
3.5 FPGA 보드 Implementation
4. 결론
5. 참고문헌
5.1 HDL 참고문헌
5.2 FPGA 참고문헌
5.3 EthernetMAC 참고문헌
5.4 OFDM 이론 참고문헌
5.5 OFDM MODEM 참고문헌
5.6 UART 참고문헌
5.7 MFC 참고문헌
6. 졸업작품 후기
7. 부록 - 소스코드
7.1 OFDM MODEM
7.1.1 UART BaudGen
7.1.2 UART 송신부
7.1.3 UART 수신부
7.1.4 QPSK Mapper
7.1.5 QPSK Demapper
7.1.6 FFT/IFFT
7.2 OFDM Client
1.1 연구목적
1.1.1 동기
1.1.2 졸업작품 진행도
1.2 기존연구
1.2.1 OFDM 이론
1.2.2 HDL(Hardware Description Language)
1.2.3 FPGA를 이용한 설계 흐름
2. 본론
2.1 Xilinx ML310 Board Specification
2.1.1 ML310 Board
2.1.1 Virtex2pro
2.2 Ethernet MAC 연구
2.2.1 Ethernet MAC 원리
2.2.2 Ethernet MAC 스케메틱 및 핀배치
2.3 OFDM MODEM 구현
2.3.1 OFDM MODEM의 원리
2.3.2 OFDM MODEM 구현
2.3.2.1 Mapper & Demapper
2.3.2.2 IFFT & FFT
2.4 UART 구현
2.4.1 FPGA UART 구현
2.4.1.1 UART 송신부
2.4.1.2 UART 수신부
2.4.2 PC 파트 OFDM Client 구현
2.4.2.1 MFC 소개
2.4.2.2 MFC를 이용한 시리얼통신
2.4.2.3 OFDM Client 구현
3. 결과
3.1 OFDM 블록의 MATLAB 시뮬레이션
3.2 OFDM MODEM의 HDL 시뮬레이션 및 합성
3.3 UART 송수신기의 HDL 시뮬레이션 및 합성
3.4 PC 파트 OFDM Client 송수신 동작 결과
3.5 FPGA 보드 Implementation
4. 결론
5. 참고문헌
5.1 HDL 참고문헌
5.2 FPGA 참고문헌
5.3 EthernetMAC 참고문헌
5.4 OFDM 이론 참고문헌
5.5 OFDM MODEM 참고문헌
5.6 UART 참고문헌
5.7 MFC 참고문헌
6. 졸업작품 후기
7. 부록 - 소스코드
7.1 OFDM MODEM
7.1.1 UART BaudGen
7.1.2 UART 송신부
7.1.3 UART 수신부
7.1.4 QPSK Mapper
7.1.5 QPSK Demapper
7.1.6 FFT/IFFT
7.2 OFDM Client
본문내용
();
void ComStart();
CSCom();
virtual ~CSCom();
DCB dcb;
OVERLAPPED osRead;
OVERLAPPED osWrite;
COMMTIMEOUTS CommTimeOuts;
HANDLE idCom;
};
#endif // !defined(AFX_SCOM_H__5A71548F_CE4C_11D4_A6B3_00E09833FB7C__INCLUDED_)
// SCom.cpp: implementation of the CSCom class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "OFDM.h"
#include "SCom.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSCom::CSCom()
{
}
CSCom::~CSCom()
{
}
void CSCom::ComStart()
{
if((idCom = CreateFile("COM4", GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL)) != (HANDLE)-1)
{
SetCommMask(idCom, EV_RXCHAR);
SetupComm(idCom,4096,4096);
PurgeComm(idCom,PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
CommTimeOuts.ReadIntervalTimeout = 5000;//0xFFFFFFFF;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 5000;
SetCommTimeouts(idCom, &CommTimeOuts);
}
GetCommState(idCom,&dcb);
dcb.BaudRate = CBR_9600;
dcb.ByteSize = 8;
dcb.Parity = EVENPARITY;
dcb.StopBits = ONESTOPBIT;
if(SetCommState(idCom,&dcb) != TRUE)
AfxMessageBox(_T("Error : Set COM4 State"));
////////////////////////////////////////////////////
osRead.Offset = 0;
osRead.OffsetHigh = 0;
//--> Read 이벤트 생성에 실패..
if ( !(osRead.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL)) )
{
AfxMessageBox("!(osRead.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL))");
// return FALSE;
}
osWrite.Offset = 0;
osWrite.OffsetHigh = 0;
//--> Write 이벤트 생성에 실패..
if (! (osWrite.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL)))
{
AfxMessageBox("! (osWrite.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL))");
// return FALSE;
}
///////////////////////////////////////////////
}
void CSCom::ComEnd()
{
if(idCom != NULL)
{
PurgeComm(idCom,PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
if(CloseHandle(idCom) != TRUE)
{
AfxMessageBox(_T("Error : Close COM Port"));
return;
}
}
}
void CSCom::WriteCmd(CString write_str)
{
DWORD nToWrite , dwWrite;
char imsi ;
imsi = 0x0d ;
nToWrite = write_str.GetLength()+1 ;
write_str = write_str + imsi ;
WriteFile(idCom,write_str,nToWrite,&dwWrite,&osWrite);
}
CString CSCom::ReadCmd()
{
DWORD dwRead, dwErrorFlags;
DWORD nToRead = 1;
BYTE pBuff[40], pBuff1[40];
int BufIndex;
COMSTAT comstat;
memset(&pBuff,'\0',40);
BufIndex = 0;
do
{
ClearCommError(idCom, &dwErrorFlags, &comstat);
dwRead = comstat.cbInQue;
if(dwRead >= 1)
{
ReadFile(idCom,pBuff1,nToRead,&nToRead,&osRead);
pBuff[BufIndex++] = pBuff1[0];
}
}while(pBuff1[0] != 0x0d);
CString RtnMsg;
RtnMsg = pBuff;
// int str_su ;
// str_su = RtnMsg.GetLength();
// RtnMsg = RtnMsg.Left(str_su-1);
return RtnMsg;
}
void ComStart();
CSCom();
virtual ~CSCom();
DCB dcb;
OVERLAPPED osRead;
OVERLAPPED osWrite;
COMMTIMEOUTS CommTimeOuts;
HANDLE idCom;
};
#endif // !defined(AFX_SCOM_H__5A71548F_CE4C_11D4_A6B3_00E09833FB7C__INCLUDED_)
// SCom.cpp: implementation of the CSCom class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "OFDM.h"
#include "SCom.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSCom::CSCom()
{
}
CSCom::~CSCom()
{
}
void CSCom::ComStart()
{
if((idCom = CreateFile("COM4", GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL)) != (HANDLE)-1)
{
SetCommMask(idCom, EV_RXCHAR);
SetupComm(idCom,4096,4096);
PurgeComm(idCom,PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
CommTimeOuts.ReadIntervalTimeout = 5000;//0xFFFFFFFF;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 5000;
SetCommTimeouts(idCom, &CommTimeOuts);
}
GetCommState(idCom,&dcb);
dcb.BaudRate = CBR_9600;
dcb.ByteSize = 8;
dcb.Parity = EVENPARITY;
dcb.StopBits = ONESTOPBIT;
if(SetCommState(idCom,&dcb) != TRUE)
AfxMessageBox(_T("Error : Set COM4 State"));
////////////////////////////////////////////////////
osRead.Offset = 0;
osRead.OffsetHigh = 0;
//--> Read 이벤트 생성에 실패..
if ( !(osRead.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL)) )
{
AfxMessageBox("!(osRead.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL))");
// return FALSE;
}
osWrite.Offset = 0;
osWrite.OffsetHigh = 0;
//--> Write 이벤트 생성에 실패..
if (! (osWrite.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL)))
{
AfxMessageBox("! (osWrite.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL))");
// return FALSE;
}
///////////////////////////////////////////////
}
void CSCom::ComEnd()
{
if(idCom != NULL)
{
PurgeComm(idCom,PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
if(CloseHandle(idCom) != TRUE)
{
AfxMessageBox(_T("Error : Close COM Port"));
return;
}
}
}
void CSCom::WriteCmd(CString write_str)
{
DWORD nToWrite , dwWrite;
char imsi ;
imsi = 0x0d ;
nToWrite = write_str.GetLength()+1 ;
write_str = write_str + imsi ;
WriteFile(idCom,write_str,nToWrite,&dwWrite,&osWrite);
}
CString CSCom::ReadCmd()
{
DWORD dwRead, dwErrorFlags;
DWORD nToRead = 1;
BYTE pBuff[40], pBuff1[40];
int BufIndex;
COMSTAT comstat;
memset(&pBuff,'\0',40);
BufIndex = 0;
do
{
ClearCommError(idCom, &dwErrorFlags, &comstat);
dwRead = comstat.cbInQue;
if(dwRead >= 1)
{
ReadFile(idCom,pBuff1,nToRead,&nToRead,&osRead);
pBuff[BufIndex++] = pBuff1[0];
}
}while(pBuff1[0] != 0x0d);
CString RtnMsg;
RtnMsg = pBuff;
// int str_su ;
// str_su = RtnMsg.GetLength();
// RtnMsg = RtnMsg.Left(str_su-1);
return RtnMsg;
}
소개글