EDA课设 通信编解码器设计Word文件下载.docx
《EDA课设 通信编解码器设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《EDA课设 通信编解码器设计Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
3.课程设计的说明书要求简洁、通顺,计算正确,图纸表达内容完整、清楚、规范。
4.测试要求:
根据题目的特点,采用相应的时序仿真或者在实验系统上观察结果。
5.课设说明书要求:
1)说明题目的设计原理和思路、采用方法及设计流程。
2)系统框图、VHDL语言设计清单或原理图。
3)对各子模块的功能以及各子模块之间的关系作较详细的描述。
4)详细说明调试方法和调试过程。
5)说明测试结果:
仿真时序图和结果显示图。
并对其进行说明和分析。
指导教师(签字):
教研室主任(签字):
批准日期:
2012年12月22日
目录
第一章通信解码器概述1
1.1几种码的介绍1
1.1.1NRZ码1
1.1.2差分码1
1.1.3曼彻斯特码(又称双相码)1
1.2总体方案概述2
1.3用状态机设计差分码编码器2
1.3.1状态机简介2
1.3.2对编码器的设计3
1.4曼彻斯特码模块程序3
第二章转码器的设计与仿真6
2.1功能描述6
2.2差分码源程序(基于VerilogHDL语言)6
2.3功能模块的仿真7
2.4曼彻斯特码源程序(基于VerilogHDL)8
2.5功能模块仿真10
第三章转码器的综合及硬件验证11
3.1转码器码的综合11
3.1.1曼彻斯特码转码器11
3.1.2差分码转码器11
3.2图形文件11
第四章转码器的设计总结12
4.1设计调试12
4.2设计心得12
参考文献13
第一章通信解码器概述
编解码器指的是一个能够对一个信号或者一个数据流进行变换的设备或者程序。
这里指的变换既包括将信号或者数据流进行编码(通常是为了传输、存储或者加密)或者提取得到一个编码流的操作,也包括为了观察或者处理从这个编码流中恢复适合观察或操作的形式的操作。
编解码器经常用在视频会议和流媒体等应用中,通常主要还是用在广电行业,作前端应用。
1.1几种码的介绍
1.1.1NRZ码
数字信号可以直接采用基带传输,所谓基带就是指基本频带。
基带传输就是在线路中直接传送数字信号的电脉冲,这是一种最简单的传输方式,近距离通信的局域网都采用基带传输。
基带传输时,需要解决数字数据的数字信号表示以及收发两端之间的信号同步问题。
对于传输数字信号来说,最简单最常用的方法是用不同的电压电平来表示两个二进制数字,也即数字信号由矩形脉冲组成。
按数字编码方式,可以划分为单极性码和双极性码,单极性码使用正(或负)的电压表示数据;
双极性码是二进制码,1为反转,0为保持零电平。
根据信号是否归零,还可以划分为归零码和非归零码,归零码码元中间的信号回归到0电平,而非归零码遇1电平翻转,零时不变。
1.1.2差分码
通信中的差分编码,差分编码输入序列{an},差分编码输出序列{bn},二者都为{0、1}序列,则差分编码输出结果为bn=an异或bn-1,并不是bn=an异或an-1(即所谓的:
对数字数据流,除第一个元素外,将其中各元素都表示为各该元素与其前一元素的差的编码。
这么定义是不准确的。
)。
前者多用在2DPSK调制,后者多用在MSK调制预编码。
同时后者是码反变换器的数学表达式,即用来解差分编码用的。
1.1.3曼彻斯特码(又称双相码)
曼彻斯特编码(ManchesterEncoding),也叫做相位编码(PE),是一个同步时钟编码技术,被物理层使用来编码一个同步位流的时钟和数据。
曼彻斯特编码被用在以太网媒介系统中。
曼彻斯特编码提供一个简单的方式给编码简单的二进制序列而没有长的周期没有转换级别,因而防止时钟同步的丢失,或来自低频率位移在贫乏补偿的模拟链接位错误。
在这个技术下,实际上的二进制数据被传输通过这个电缆,不是作为一个序列的逻辑1或0来发送的(技术上叫做反向不归零制(NRZ))。
相反地,这些位被转换为一个稍微不同的格式,它通过使用直接的二进制编码有很多的优点。
曼彻斯特编码,常用于局域网传输。
在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作时钟信号,又作数据信号;
从低到高跳变表示"
0"
,从高到低跳变表示"
1"
。
还有一种是差分曼彻斯特编码,每位中间的跳变仅提供时钟定时,而用每位开始时有无跳变表示"
或"
,有跳变为"
,无跳变为"
本文主要介绍用VerilogHDL语言来描述编写一个将NRZ码转换为曼彻斯特码和差分码的软件模块,并能够在FPGA芯片中调试和仿真。
四总码型的编码方案如下图1-1:
图1-1四总码型的编码方案
1.2总体方案概述
曼彻斯特解码器是一种基于硬件描述的设计方案;
该方案先利用VerilogHDL语言描述少量逻辑单元,构成逻辑处理模块,继而搭建出解码器。
曼彻斯特码是将NRZ普通二进制数据与其位率时钟信号相异或而得,解决了传输数据没有时钟的问题。
当传送信号为“1”,曼彻斯特编码由高电平跳变为低电平;
若传送的信息为“0”;
曼彻斯特编码由低电平转变为高电平;
如果有连续的“1”或“0”信息出现时,则曼彻斯特编码保持“1”或“0”的跳变,即编码后,信息“0”与时钟一致,信息“1”与时钟反相(相位相差180度)。
曼彻斯特编码是一种相位调制,有时钟的180度相位代表NRZ信号的逻辑“1”电平。
这次设计主要是要实现将NRZ码转成曼彻斯特码的功能,总体的设计原理框图如图1-2所示。
图1-2原理框图
1.3用状态机设计差分码编码器
1.3.1状态机简介
状态机是一个有向图形,由一组节点和一组相应的转移函数组成。
状态机通过响应一系列事件而“运行”。
每个事件都在属于“当前”节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。
函数返回“下一个”(也许是同一个)节点。
这些节点中至少有一个必须是终态。
当到达终态,状态机停止。
状态机主要分为2大类:
第一类,若输出只和状态有关而与输入无关,则称为Moore状态机:
第二类,输出不仅和状态有关而且和输入有关系,则称为Mealy状态机。
要特别注意的是,因为Mealy状态机和输入有关,输出会受到输入的干扰,所以可能会产生毛刺(Gitch)现象,使用时应当注意。
事实上现在市面上有很多EDA工具可以很方便的将采用状态图的描述转换成可以综合的VHDL程序代码。
1.3.2对编码器的设计
设初始状态为S0编码为00,根据功能带入输入0时得到下一状态S1和相应输出0。
依次代入类推,可得到如图1-3所示的状态图。
图1-3状态图
其状态机设计程序如下:
always@(negedgeclkornegedgereset)
if(reset==0)state<
=S0;
elsestate<
=next_state;
always@(stateorin)begin
out=0;
case(state)
S0:
beginif(in==0)next_state=S1;
elsenext_state=S3;
end
S1:
beginnext_state=S2;
S2:
beginout=1;
if(in==0)next_state=S1;
S3:
next_state=S0;
endcase
end
1.4曼彻斯特码模块程序
曼彻斯特编码模块如下:
moduleManchester_bian(in_dat,clk_tong,clk_fan,out_dat_tong,out_dat_fan,clr);
inputin_dat,clk_tong,clk_fan,clr;
outputout_dat_tong,out_dat_fan;
wireout_dat_tong,out_dat_fan;
wireout_dat_tong_1,out_dat_fan_1;
wireout_dat_tong_0,out_dat_fan_0;
assignout_dat_tong_1=(state1[1:
0]==2'
b01)?
(clk_tong&
&
con):
1'
b0;
assignout_dat_tong_0=(state1[1:
b10)?
(clk_fan&
assignout_dat_tong=(out_dat_tong_1)||(out_dat_tong_0);
assignout_dat_fan_1=(state2[1:
assignout_dat_fan_0=(state2[1:
assignout_dat_fan=(out_dat_fan_1)||(out_dat_fan_0);
reg[1:
0]state1;
0]state2;
0]dat_reg;
regcon;
always@(posedgeclk_tong)
begin
con=1'
if(~clr)
state1[1:
0]=2'
b01;
state2[1:
else
dat_reg[1:
0]=dat_reg[1:
0]>
>
1;
dat_reg[1]=in_dat;
if(dat_reg[1])
b1;
if(state2[1:
b01)
b10;
else
elseif(state2[1:
b10)
endmodule
第二章转码器的设计与仿真
2.1功能描述
1、输入NRZ码;
2、设置CLK;
3、输出差分码,曼彻斯特码。
2.2差分码源程序(基于VerilogHDL语言)
moduleNRZ_To_Differential(Out,in,clk,reset);
outputOut;
inputin;
inputclk,reset;
regOut;
reg[1:
0]state,next_state;
parameterS0=0,S1=1,
S2=2,S3=3;
always@(negedgeclkornegedgereset)
=S_0;
always@(state)begin
Out=0;
S_0:
beginif(==0)next_state=S_1;
elsenext_state=S_3;
S_1:
beginnext_state=S_2;
S_2:
beginOut=1;
if(==0)next_state=S_1;
S_3:
next_state=S_0;
modulestimulus();
regCLK,RESET;
regBIN;
wireBOUT;
NRZ_To_DifferentialT1(
.Out(BOUT),
.(BIN),
.clk(CLK),
.reset(RESET)
);
initial
$monitor($time,"
:
IN=%bOUT=%b"
BIN,BOUT,);
initialbegin
RESET<
=0;
BIN<
#5if(BOUT!
=0)
$display($time,"
ResetState_0Failed!
"
);
=1;
#10if(BOUT!
State_1Failed!
#5BIN<
=1)
State_2Failed!
State_3Failed!
#45BIN<
#40BIN<
#20BIN<
#60$stop;
2.3功能模块的仿真
功能仿真采用QuartusII7.2实现程序功能:
1.打开Quartus后,新建一个VerilogHDLfile文件,讲上述程序复制到生成的对话框中,保存;
2.保存运行后,新建一个VectorWaveformfile文件保存在同一文件夹下;
3.将,Out,CLK,RESET导入窗口;
4.修改EndTime,CLK和RESET的Countevery;
5.将窗口保存同一文件夹下;
完成以上步骤就可得到2.1图所示的仿真码。
EndTime为500us,Clock为100us时,解码器输出的Manchester、如图2-1所示。
图2-1时序仿真
2.4曼彻斯特码源程序(基于VerilogHDL)
Manchester码(双相码)编码器。
//总模块:
moduleManchester_shuchu(clk,clr,in_dat,out_dat_tong,out_dat_fan);
inputclk,clr,in_dat;
wireclk_fan;
fpju0(.clk(clk),
.clk_fan(clk_fan),
Manchester_bianu1(.in_dat(in_dat),
.clk_tong(clk),
.out_dat_tong(out_dat_tong),
.out_dat_fan(out_dat_fan),
.clr(clr));
//fpj模块:
modulefpj(clk,clk_fan);
outputclk_fan;
inputclk;
wireclk2_fan;
assignclk_fan=~clk;
//Manchester_bian模块:
2.5功能模块仿真
3.将NRZ,Manchester,CLK,RESET导入窗口;
完成以上步骤就可得到2-2图所示的仿真码。
EndTime为00us,Clock为200us时,解码器输出的Manchester、如图2-2所示。
图2-2Manchester时序仿真
第三章转码器的综合及硬件验证
3.1转码器码的综合
3.1.1曼彻斯特码转码器
在QuartusII软件的图形编译模式下,NRZ码转曼彻斯特码转码器如图3.1所示,综合后的曼彻斯特码转码器内核有3个输入控制端、2个输出端。
3.1.2差分码转码器
重复上述步骤,可得图3-2的差分码转码器内核,其内核由3个输入控制端、1个输出端。
图3-1RZ码转曼彻斯特码转码器图3-2差分码转码器内核
3.2图形文件
在QuartusII软件的图形编译模式下,通过与软件内部的输入、输出模块联接,并定义各输入、输出端口的名字即得到了转码器的图形文件仿真如图3-3所示。
图3-3转码器的图形文件
第四章转码器的设计总结
4.1设计调试
要注意状态机的设计过程是否正确,其中的语言描述语法是否正确,符号的问题,在总体编译的过程中不通过,查出顶层文件名出线错误,经修改后编译通过。
4.2设计心得
经过一周的设计与思考,最终实现了转码器的模拟。
期间遇到了许多问题,但最后都在图书馆、网络和同学的帮助下解决。
设计初期不知道要从什么地方下手,通过学习,查资料,套用以前的前辈们的模板来对应所需要解决的问题,从而设计出与任务书相符的设计。
当初设计了几个方案,对其进行一一比较,选择最合适的方案动手设计,然后开始查资料和设计。
总体设计在整个设计过程中非常重要,应该花较多的时间在上面。
方案确定后,才开始设计。
设计时,多使用已学的方法,如有限状态机。
整体考虑,应符合设计要求目的。
模块之间关系,查资料,然后根据目的来自己修改,与同学交流后,得出最终设计。
遇到复杂程序连自己都看不懂的,就去图书馆里查资料。
很多难点的突破都来自于与同学的交流,交流使自己获得更多的信息,开拓了思路,因此要重视与别人的交流。
应该有较好的理论基础,整个实验都是在理论的指导下完成了,设计过程中使用了许多理论课上学的内容,本次设计把理论应用到了实践中、同时通过设计,也加深了自己对理论知识的理解和掌握。
唯一不足的是:
设计过程中遇到瓶颈,就开始犯难,在各方面的咨询和学习下,完成了部分,并没有达到预期的目标。
在设计方面,任务书要求的是NRZ码与差分码,双相码,曼彻斯特码的转换,也就是做一个1对多的码元转换器,但在设计中,涉及到的知识量很大,查阅各方面资料后,只能做出其中一个曼彻斯特码的转换,对于双相码和差分码间的转化,在查阅多方面文献和资料的情况下,实在不知道如何下手。
并没有文献对此码作过多的详细介绍,在学习上遇到的瓶颈相当大。
在附录中提到的以曼彻斯特码作为输出产生的双相曼彻斯特码,实际仿真效果与理论设计不符合。
参考文献
[1]蒋建军,陈群贤,项湜伍.IBIS模型及其在高速线路设计中的仿真应用研究[J].上海电机学院学报.2005(03)
[2