资源描述
合 肥 学 院
课 程 设 计 报 告
题 目:基于FPGA的曼彻斯特编译码设计与实现
系 别 :电子信息与电气工程系
专 业: 通信工程
班 级: 10通信工程1班
学 号:1005074007 1005076001 1005074012
姓 名:柯望 吕烨 邓超
导 师: 段慧敏
成 绩:________________________
2013年12月9日
一、前言 3
二、方案论证及选择 4
1.1方案一 4
1.2方案二 4
三、 理论分析 4
1.1伪随机序列模块 4
1.2曼彻斯特编码模块 5
1.3曼彻斯特解码模块 5
1.4四分频模块设计 5
四、系统整体设计 6
五、 实验相关程序 6
1.1 M序列产生程序 6
1.2 曼彻斯特编码程序 7
1.3 曼彻斯特解码程序 8
1.4 四分频程序 9
1.5整体程序 9
六、总结 10
参考文献 11
附录 11
1.1附录一 11
1.2附录二 12
1.3附录三 12
1.4附录四 13
基于FPGA的曼彻斯特编译码设计与实现
中文摘要
随着科学技术的进步,现代战争样式向信息战形式发展。现代战争胜负对于信息获取的依赖程度前所未有的提高。在现代战争中,若己方的通讯交流方式早敌军破获,则地方将获取己方部队动向或实施信息干扰。将会使部队陷入极其危险地境地中。因此,信息战对通讯加密手段的要求极高。
伪随机序列(Pseudo-noise Sequence)又称伪噪声或伪随机码,具有类似随机信号的一些统计特性,但又是有规律的,容易产生和复制的。最大长度线性移位寄存器序列(m序列)是保密通信中非常重要的一种伪随机序列,它具有随机性、规律性及较好的自相关和互相关性,而且密钥量很大。利用m序列加密数字信号,使加密后的信号在携带原始信息的同时具有伪噪声的特点,以达到在信号传输的过程中隐藏信息的目的;在信号接收端,再次利用m序列加以解密,恢复出原始信号。这样,通过对m序列的应用,将大大的提高通讯的保密程度和防窃取能力。这样的通讯手段被称为扩展频谱通信
关键词:伪随机码;曼彻斯特码;曼彻斯特编译码;FPGA
一、前言
曼彻斯特码(Manchester code),又称裂相码,双向码,是一种自同步的编码方式,即时钟同步信号隐藏在数据波形中,亦即在传输代码信息的同时,也将时钟同步信号一起传输到对方。另外,曼彻斯特码每位编码中有一跳变,不存在直流分量。因此该码具有自同步能力和良好的抗干扰性能。
曼彻斯特编码(Manchester Encoding),也叫做相位编码(PE),是一个同步时钟编码技术,被物理层使用来编码一个同步位流的时钟和数据。曼彻斯特编码被用在以太网媒介系统中。曼彻斯特编码提供一个简单的方式给编码简单的二进制序列而没有长的周期和转换级别,因而防止时钟同步的丢失,或来自低频率位移在贫乏补偿的模拟链接位错误。
FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输入输出模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。 现场可编程门阵列(FPGA)是可编程器件,与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构。FPGA利用小型查找表(16×1RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。
二、方案论证及选择
由实验要求本次课程设计分四个模块分别为基于FPGA的伪随机序列产生模块;基于FPGA 的曼彻斯特编码模块;基于FPGA的曼彻斯特解码模块;基于FPGA的四分频模块。
1.1方案一
方案一:实现上述四个模块可以用Quartus软件中的原理图编辑功能进行各个模块的设计,然后进行元件封装进行连接实现整体设计。但是由于Quartus软件所提供的基本元件有限不能满足本实验的实验要求。故不采用原理图设计本实验。
1.2方案二
方案二:由VHDL硬件描述语言的强大功能可以运用VHDL语言对各个模块的功能进行功能描述,使得各个模块能够实现各自的子功能。与原理图编辑类似,将用VHDL语言描述的各个子模块进行元件封装以便用例化语句进行调用。此方案可以减少原理图设计时的线路连接的繁琐工作,可以方便的进行功能的改变和错误检查。故本次实验选择VHDL语言进行功能描述完成实验要求。
三、 理论分析
1.1伪随机序列模块
伪随机序列模块:
由实验要求需要产生的伪随机序列满足特征方程:f=1+x^2+x^3+x^4+x^8。由特征方程的表达式可知线性反馈移位寄存器的抽头位置分别在c0,c5,c9。并且c5和c9进行异或运算作为输入输入给D8。根据功能要求用VHDL语言进行描述。在进行软件设计时可以通过使能端控制对c0--c8进行初始设置,并且在时钟控制下按照程序设置运行程序,并进行波形仿真以验证程序功能的正确性。m序列实验程序波形见附录 一
图1 线性反馈移存器的一般组成原理图
1.2曼彻斯特编码模块
曼彻斯特编码模块:
由曼彻斯特解码规则可将程序设置为在输入一个二进制码元时将此输入二进制码元作为标准逻辑矢量的一个元素,再将此码元取反作为标准逻辑矢量的另一个元素。最后将所得的两个元素进行并置输出为二位的标准逻辑矢量,并将此标准逻辑矢量按位输出即可得到曼彻斯特编码在仿真时可以通过输入码元与对应的仿真输出二位的标准逻辑矢量进行比较确认是否输出正确。曼彻斯特编码的实验程序见附录二。
1.3曼彻斯特解码模块
曼彻斯特解码模块:
与曼彻斯特编码类似,可以根据曼彻斯特解码的规则可将程序设置为在输入两个码元后,对两个码元所组成的码组进行判别从而输出相应的单个的二进制码元。在曼彻斯特解码的过程中为保证在输入两个码元后在进行判别需要用到两个不同频率的时钟信号。控制进行曼彻斯特解码输入的时钟信号时钟频率是进行码组判别的时钟信号时钟频率的4倍。因此需要对同一个时钟信号进行4分频。曼彻斯特解码实验程序见附录三。
1.4四分频模块设计
四分频模块设计:
为了减少在一个实验中用到多个外接时钟信号,可以通过将一个时钟信号进行分频获得满足要求的不同频率的时钟信号。为满足曼彻斯特解码对输入时钟信号的要求,需要对同一时钟信号进行四分频。四分频实验程序见附录四。
四、系统整体设计
按照以上各个子系统模块以及整体连接可以完成实验基本要求。编码速率可以通过调节时钟CLK1的频率来改变。对于实验要求的伪码数据率为 10~100kbps,可以调节时钟CLK1的时钟频率在10K~100K之间。
仿真分析:
在Quartus软件中进行整体软件设计程序仿真,通过仿真波形图分析输入数据和输出数据可以验证系统满足实验要求。
图2 系统总体设计框图
五、 实验相关程序
1.1 M序列产生程序
library ieee;
use ieee.std_logic_1164.all;
entity M is
port(clk,led:in std_logic;
z:in std_logic_vector(8 downto 0);
MOT:out std_logic_vector(8 downto 0);
MO:out std_logic);
end entity;
architecture M1 of M is
signal reg:std_logic_vector(8 downto 0);
signal cy,A,B,C:std_logic;
begin
process (clk)
begin
if (clk'event and clk='1') and (clk'last_value='0') then
case led is
when '1'=> reg(8 downto 0)<=z(8 downto 0);
when '0'=> reg(7 downto 0)<=reg(8 downto 1);
cy<=reg(0);
A<=reg(5) xor reg(0);
B<=reg(6) xor A;
C<=reg(7) xor B;
reg(8)<=C;
end case;
end if;
end process;
MO<=cy;MOT(8 downto 0)<=reg(8 downto 0);
end M1;
1.2 曼彻斯特编码程序
library ieee;
use ieee.std_logic_1164.all;
entity MC is
port (clk,MCI:in std_logic;
MCOV:out std_logic_vector(1 downto 0);
MCO:out std_logic);
end entity;
architecture MC1 of MC is
signal a,b,d,e:std_logic;
signal c:std_logic_vector(1 downto 0);
begin
u1:process (clk,MCI)
begin
if (clk'event and clk='1') and (clk'last_value='0')
then
b<=MCI;
a<=not MCI;
c(1 downto 0)<=a & b;
e<=c(0);
end if;
end process;
MCO<=e;MCOV(1 downto 0)<=c(1 downto 0);
end architecture MC1;
1.3 曼彻斯特解码程序
library ieee;
use ieee.std_logic_1164.all;
entity MCJ is
port (clk1,clk2,MCJI:in std_logic;
MCOJV: out std_logic_vector(1 downto 0);
MCJO:out std_logic);
end entity MCJ;
architecture MCJ1 of MCJ is
signal a,c:std_logic_vector(1 downto 0);
signal b:std_logic;
begin
process (clk1,MCJI)
variable J:std_logic_vector(1 downto 0);
begin
if (clk1'event and clk1='1') and (clk1'last_value='0')
then
J(1):=J(0);
J(0):=MCJI;
J(1 downto 0):=J(1)&J(0);
end if;
a(1 downto 0)<=J(1 downto 0);
end process;
c(1 downto 0)<=a(1 downto 0);
process (clk2,c(1 downto 0))
variable h:std_logic;
begin
if (clk2'event and clk2='1') and (clk2'last_value='0')
then
case c(1 downto 0) is
when "10"=> h:='1';
when "01"=> h:='0';
when others => h:=h;
end case;
b<=h;
end if;
end process;
MCJO<=b;MCOJV(1 downto 0)<=c(1 downto 0);
end architecture MCJ1;
1.4 四分频程序
library ieee;
use ieee.std_logic_1164.all;
entity EFP is
port(clk:in std_logic;
clk0:out std_logic);
end entity EFP;
architecture cl of EFP is
signal a:integer:=0;
begin
process(clk)
begin
if (clk'event and clk='1') and (clk'last_value='0')
then
if a=3
then
a<=0;
clk0<='1';
else
a<=a+1;
clk0<='0';
end if;
end if;
end process;
end architecture cl;
1.5整体程序
library ieee;
use ieee.std_logic_1164.all;
entity ZH is
port(ZHL,ZHC:in std_logic;
ZHJ:out std_logic;
ZHJV,ZHBV:out std_logic_vector(1 downto 0);
ZHZ:in std_logic_vector(8 downto 0);
ZHMV:out std_logic_vector(8 downto 0));
end entity ZH;
architecture ZH1 of ZH is
component M is
port(clk1,led:in std_logic;
z:in std_logic_vector(8 downto 0);
MOT:out std_logic_vector(8 downto 0);
MO:out std_logic);
end component M;
component MC is
port (clk2,MCI:in std_logic;
MCOV:out std_logic_vector(1 downto 0);
MCO:out std_logic);
end component MC;
component MCJ is
port (clk5,clk4,MCJI:in std_logic;
MCOJV: out std_logic_vector(1 downto 0);
MCJO:out std_logic);
end component MCJ;
component EFP is
port(clk6:in std_logic;
clk3:out std_logic);
end component EFP;
signal a,b,c:std_logic;
begin
u1:M port map (led=>ZHL,Z(8 downto 0)=>ZHZ(8 downto 0),clk1=>ZHC,MOT=>ZHMV,MO=>a);
u2:MC port map (MCI=>a,clk2=>ZHC,MCO=>b,MCOV=>ZHBV);
U3:EFP port map (clk6=>ZHC,clk3=>c);
U4:MCJ port map
(MCJI=>b,clk5=>ZHC,clk4=>c,MCOJV=>ZHJV,MCJO=>ZHJ);
end architecture ZH1;
六、总结
本论文讨论了曼彻斯特编解码器的实现。为了达到设计要求,在试验要求的指导下设计出伪随机序列产生器、曼彻斯特编解码器、曼彻斯特解码器及四分频产生器,报告讨论了各个子模块的工作原理,分析了在设计中所需要解决的关键问题,确定了实现方案,重点介绍了曼彻斯特编解码仿真及实现。经过仿真波形分析该曼彻斯特编解码器及差分曼彻斯特编解码器都能够完成编解码功能,并且性能稳定。通过整体仿真分析验证设计满足整体功能要求。
通过本次课程设计熟悉了曼彻斯特码的基本原理,并用VHDL语言进行系统功能的描述,通过软件完成本次设计。
参考文献
[1] 南利平,通信原理简明教程;第二版[M].北京:清华大学出版社,2007.
[2] 樊昌信,通信原理教程;第三版[M].北京:电子工业出版社,2012.
[3] 潘松,EDA技术与VHDL[M]。北京:清华大学出版社,2005.
[4] 禹思敏,通信原理[M]。西安:西安电子科技大学出版社,2010.
[5] 康华光,电子技术基础:数字/模拟部分[M].北京:高等教育出版社,2004.
[6] 检索相关论
附录
1.1附录一
图3 m随机序列波形
1.2附录二
图4 曼彻斯特编码波形
1.3附录三
图5 曼彻斯特译码译码波形
1.4附录四
图6 四分频程序波形
13
展开阅读全文