通信原理课程设计______基于fpga的时分多路数字基带传输系统的设计与开发

通信原理课程设计______基于fpga的时分多路数字基带传输系统的设计与开发

ID:822202

大小:1.27 MB

页数:40页

时间:2017-09-08

上传者:^_^
通信原理课程设计______基于fpga的时分多路数字基带传输系统的设计与开发_第1页
通信原理课程设计______基于fpga的时分多路数字基带传输系统的设计与开发_第2页
通信原理课程设计______基于fpga的时分多路数字基带传输系统的设计与开发_第3页
通信原理课程设计______基于fpga的时分多路数字基带传输系统的设计与开发_第4页
通信原理课程设计______基于fpga的时分多路数字基带传输系统的设计与开发_第5页
资源描述:

《通信原理课程设计______基于fpga的时分多路数字基带传输系统的设计与开发》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

通信系统课程设计基于FPGA的时分多路数字基带传输系统的设计与开发指导老师:戴慧洁武卫华班级:通信102班组长:组员:2013年7月5日通信系统课程设计目录1.通信系统课程设计目的、内容、要求1.1课程设计目的1.2课程设计内容1.3课程设计要求39 2.通信系统课程设计选题及小组划分2.1课程设计选题2.2小组划分3.通信系统课程设计系统框图及各模块参数指标3.1系统框图3.2各模块参数指标4.通信系统课程设计各模块原理与思路4.1PCM编译码4.2HDB3编译码4.3一次群时分复用与分接4.4同步5.通信系统课程设计各模块编程与波形仿真(含代码)5.1PCM编译码5.2HDB3编译码5.3一次群时分复用与分接5.4同步6.通信系统课程设计心得体会1.通信系统课程设计目的、内容、要求及相关工具1.1课程设计目的39 通信系统课程设计是一门综合设计性实践课程。使大家在综合已学现代通信系统理论知识的基础上,借助可编程逻辑器件及EDA技术的灵活性和可编程性,充分发挥自主创新意识,在规定时间内完成符合实际需求的通信系统电路设计与调试任务。本次课程设计选题为数字基带传输系统。数字通信系统是利用数字信号来传输信息的通信系统,传输的对象通常是二元数字信息,它可能来自计算机等其他数字设备的各种数字代码,也可能来自数字电话终端的脉冲编码,其包括数字基带传输和数字频带传输。数字基带传输就是不经过调制而直接传送的方式,即发送端不使用调制器,接收端也不使用解调器。和频带传输相比,基带传输的优点是:设备简单,易做成“一机多速率”,适应性强。而对于时分多路技术,其具有十分优越的特点。其便于实现数字通信,易于制造,适于采用集成电路实现,成本较低,因此在数字信号传输中得到了广泛的应用。它不仅能够提高大家对所学理论知识的理解能力,更重要的是能够提高和挖掘大家对所学知识的实际运用能力,为将来进入社会从事相关工作奠定较好的“能力”基础。1.2课程设计内容(可选)A)时分多路数字电话基带传输系统的设计与开发B)时分多路数字电话基带传输系统的设计与开发1.3课程设计要求A)64Kb/S的A律PCM数字话音编译码器的开发设计B)PCM30/32一次群时分复接与分接器的开发设计C)数字基带编码HDB3编译码器的开发设计D)正交相对四相移相键控QDPSK调制器的开发设计(可选)39 E)同步(帧、位、载波同步(可选))电路的开发设计根据给定的设计指标,要求能综合运用通信原理理论所学知识,借助可编程逻辑器件,灵活使用EDA开发工具平台QuartusⅡ,独立进行时分多路数字电话基带传输系统初步方案设计、单元电路设计、VHDL程序设计、程序调试等工作。附工具:quartusⅡ6.0、FPGA、VHDL语言本次课程设计使用的软件是EDA开发工具平台QuartusⅡ6.0,QuartusⅡ是Altera公司提供的可编程逻辑器件的集成开发软件,可编程逻辑器件开发的所有过程为:设计输入、综合、布局和布线、验证和仿真以及可编程逻辑器件的编程或配置。使用的芯片是EP1C6Q240C8。VHDL的全名是very-high-speedintegratedcircuithardwaredescriptionlanguage,VHDL主要用于描述数字系统的结构,行为,功能和接口。FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。2课程设计选题、小组划分2.1选题:时分多路数字电话基带传输系统的设计与开发2.2模块划分(A)负责64Kb/S的A律PCM数字话音编码器的开发设计39 (B)负责64Kb/S的A律PCM数字话音译码器的开发设计(C)负责数字基带编码HDB3编码器的开发设计(D)负责数字基带编码HDB3译码器的开发设计(E)负责PCM30/32一次群时分复接器的开发设计(F)负责PCM30/32一次群时分分接器的开发设计(G)负责同步(帧、位同步)电路的开发设计3.通信系统课程设计系统框图及各模块技术指标3.1系统框图39 PCM时分复用数字基带传输,是各路信号在同一信道上占有不同的时间间隙进行通信。它把模拟信号通过抽样、量化、编码转变为数字信号,这些都靠编码器来实现,然后在位同步和帧同步信号的控制下通过复接器实现复接,复接后的信号通过信道传输,分接器在同步信号的作用下把接收到的信号进行分路,分路后的信号通过PCM译码、低通滤波器还原出输入的模拟语音信号。同步技术是时分复用数字通信的又一个重要特点。位同步是最基本的同步,是实现帧同步的前提。它的基本含义是收、发两端机的时钟频率必须同频、同相,这样接收端才能正确判断和接收发送端送来的每一个码元。帧同步是为了保证收、发各对应的话路在时间上保持一致,这样接收端就能正确接收发送端送来的每一个话路信号。图3.1时分多路数字基带传输系统框图3.2各模块技术指标3.2.1PCM编码器参数指标(符合ITU-TG.711建议)(1)PCM编码器输入信号为:一个13位逻辑矢量的均匀量化值:D0,D1…D12其中:D0为极性位,取值范围在-4096~+4096之间;一个占空比为1/32的8K/S的取样时钟信号;一个占空比为50%的2.048Mb/S的合路时钟信号;(2)PCM编码器输出信号为:一个8位逻辑矢量的13折线非均匀量化值:C0,C1…C7其中:C0为极性位.C0=1为正,C0=0为负;一个占空比为1/32的8K/S的取样时钟信号;一个占空比为50%的2.048Mb/S的合路时钟信号;39 (3)PCM编码规则图3.2.1PCM编码规则3.2.2PCM译码器参数指标(符合ITU-TG.711建议)(1)PCM译码器输入信号为:一个8位逻辑矢量的13折线非均匀量化值:C0,C1…C7其中:C0为极性位.C0=1为正,C0=0为负;一个占空比为1/32的8K/S的取样时钟信号;一个占空比为50%的2.048KB/S的合路时钟信号;(2)PCM译码器输出信号为:一个13位逻辑矢量的均匀量化值:D0,D1…D12其中:D0为极性位,取值范围在-4096~+4096之间;一个占空比为1/32的8K/S的取样时钟信号;39 一个占空比为50%的2.048Mb/S的合路时钟信号;(3)PCM译码规则图3.2.2PCM译码规则3.2.3HDB3编码器参数指标(符合ITU-TG.703建议)(1)HDB3编码器输入信号为:一路串行2.048Mb/S合路数据流一路2.048Mb/S位同步时钟脉冲(2)HDB3编码器输出信号为:一路串行2.048Mb/S合路HDB3编码的正极性数据流H+一路串行2.048Mb/S合路HDB3编码的负极性数据流H-一路2.048Mb/S位同步时钟脉冲3.2.4HDB3译码器参数指标(符合ITU-TG.703建议)(1)HDB3译码器输入信号为:39 一路串行2.048Mb/S合路HDB3编码的正极性数据流H+一路串行2.048Mb/S合路HDB3编码的负极性数据流H-一路2.048Mb/S位同步时钟脉冲(2)HDB3译码器输出信号为:一路串行2.048Mb/S合路数据流一路2.048Mb/S位同步时钟脉冲3.2.5一次群时分复接器参数指标()(1)一次群时分复接器输入信号为:一个8位数据总线D7~D0一个一次群串行位同步时钟2.048Mb/S信号;(2)一次群时分复接器输出信号为:一个一次群串行合路数据流2.048Mb/S信号一个一次群串行位同步时钟2.048Mb/S信号一个5位时隙地址总线信号3.2.6一次群时分接器参数指标(1)一次群时分分接器输入信号为:一个一次群串行合路数据流2.048Mb/S信号一个一次群串行位同步时钟2.048Mb/S信号(2)一次群时分分接器输出信号为:一个一次群串行合路数据流2.048Mb/S信号一个30位逻辑矢量时隙脉冲信号一个一次群串行位同步时钟2.048Mb/S信号39 3.2.6相关帧结构图3.2.7同步的参数指标同步主要是进行帧同步与位同步,具体设计体现在一次群时分分接器设计,还有提供各模块的时钟。4通信系统课程设计各模块原理与思路4.1PCM编码器原理4.1.1PCM编码器分析脉冲编码调制(PCM,PulseCodeModulation)在通信系统中完成将语音信号数字化功能。是一种对模拟信号数字化的取样技术,将模拟信号变换为数字信号的编码方式,特别是对于音频信号。PCM对信号每秒钟取样8000次;每次取样为8个位,总共64kbps。39 PCM的实现主要包括三个步骤完成:抽样、量化、编码。分别完成时间上离散、幅度上离散、及量化信号的二进制表示。根据CCITT的建议,为改善小信号量化性能,采用压扩非均匀量化,有两种建议方式,分别为A律和律方式,本设计采用了A律方式。在13折线法中,无论输入信号是正是负,均按8段折线(8个段落)进行编码。若用8位折叠二进制码来表示输入信号的抽样量化值,其中用第一位表示量化值的极性,其余七位(第二位至第八位)则表示抽样量化值的绝对大小。具体的做法是:用第二至第四位表示段落码,它的8种可能状态来分别代表8个段落的起点电平。其它四位表示段内码,它的16种可能状态来分别代表每一段落的16个均匀划分的量化级。这样处理的结果,8个段落被划分成128个量化级。段落码和8个段落之间的关系如表1所示;段内码与16个量化级之间的关系见表4.1.2所示。4.1.2PCM编码规则表1段落码表2段内码段落序号段落码段落范围量化间隔段内码量化间隔段内码81112048-40961511117011171101024-2048141110601106101512-1024131101501015100256-512121100401004011128-25611101130011301064-12810101020010200132-64910011000110000-3281000000004.1.3流程图如下39 图4.1.3PCM编码器流程图4.2PCM译码器原理4.2.1PCM译码分析PCM译码是PCM编码的逆过程。通过对PCM编码的分析,可以进行8位PCM编码到13位A率13折线的转换,具体转换见下译码规则图。其中注意,在译码时的13位码是对应段的中间值,既所得的编码应加上对应段量化值的一半。4.2.2PCM译码规则39 图4.2.2PCM译码规则4.2.3流程图如下图4.2.3PCM译码流程图39 4.3HDB3编码器原理4.3.1HDB3编码规则分析:1)对输入为1码元交替翻转编码,即依次在H+和H-端口输出12)对输入为0码元同时在H+和H-端口输出03)当连续输入4个0码元,且与上一个连续0码元之间1码元为奇数个时,第四个0码元改为1码元,且与之前1码元的最后一个1码元同极性,即:在同端口输出4)当连续输入4个0码元,且与上一个连续4个0码元之间1码元为偶数个时,第一个0码元改为1码元,与之前1码元的最后一个1码元反极性,即:在不同端口输出,第四个0码元改为1码元,且与之前1码元的最后一个1码元同极性,即:在同端口输出4.3.2HDB3编码VHDL语言设计1)逐位处理输入输出数据,即:每输入一比特数据就判断处理,并在H+和H-端口同时输出一位比特脉冲.2)为了能修改含本时钟之前4个时钟周期的输出比特,建立一个4位移位寄存器保存输入数据temp;3)输出“1”时,确定下次1码元输出端口的确定,即极性是+或-;每输入一个“1”,极性反转一次,记录信息county;4)检测当前是否为连续“0000”,记当前零个数count0;5)记录两个连续“0000”之前连续1的个数记数count1,(即奇偶数)。39 6)更新“B00V”“000V”时,更新信息count0,count1,county;4.3.3流程图如下:源码100001000011000000001HDB3码+1000+1-1000-1+1-1+100-1+100-1+1H+100010000010100010001H-0000010001010001000104.4HDB3译码器原理4.4.1HDB3译码规则分析将编码修改过的0码元恢复,并将双极性交替1脉冲改为单极性1脉冲4.4.2HDB3译码VHDL语言设计对输入的H+和H-分别设立一个五级缓存移位寄存器,每一拍都判断是否存在10001,或1001X;若存在分别改成10000,或0000X。再将H+和H-相或输出。4.4.3流程图如下:39 4.5一次群时分复接器原理复接器的功能是将30路PCM信号与帧同步和勤务信号综合成一路2.048Mb/s的串行合路输出,并包括生成时隙地址信号。其中主要包括多路数据选择器,串并转换器,计数器等。4.6一次群时分分接器原理分接器的功能是将32路合路的2.048Mb/s的信号分成32路64K/S的分路信号,同时生成32路时隙脉冲。其中主要是帧同步与位同步的捕捉与确定。39 4.7同步模块原理在数字通信系统中,同步包括载波同步,码元同步(位同步),群同步(帧同步),网同步四种,本课程设计主要用到帧同步与位同步。1)帧同步是为接收信号而使给定数字信道的接收端与发送端的相应信道对齐的过程,帧同步码有集中插入和分散插入两种插入方法,此课程设计中主要研究集中插入帧同步法,详细设计可见一次群时分分接。39 2)位同步是为了在准确的时刻对接收码元进行判决,以及对接收码元能量正确积分,它是从接收码元的起止时刻产生一个码元同步脉冲序列。位同步可分为外同步法和自同步法。外同步法是一种利用辅助信息同步的方法,需要在信号中另外加入包含码元定时信息的导频或数据序列。自同步法不需要辅助同步信息,直接从信息码元中提取出码元定时信息,这种方法要求在信息码元序列中含有码元定时信息,在此课程设计中,用数字锁相环法实现码元的自同步。位同步原理图:相位比较PCC数字滤波DLE受控分频DCOData_InPhaseerrorInsertsignalReducesignalClk_EstClk39 5通信系统课程设计各模块编程与上机实现5.1PCM编码程序与仿真图--PCM编码,符合ITU-TG.711建议--一个输入为13位逻辑矢量的均匀量化值,一个8000HZ占空比为1/32的取样脉冲--输出为八位逻辑矢量的A律PCM编码,和一个8000HZ的时钟--虽然设计要求输入输出2.048MB/S时钟,个人觉得用不上,故舍去了--quartus软件是以下标大的位为高位,所以十三位输入采用D(12)为符号位libraryieee;--程序调用的库是IEEE库useieee.std_logic_1164.all;--定义了std_logic,std_logic_vector类型entityPCMencodeisport(clkin:instd_logic;--输入时钟8000HZD:instd_logic_vector(12downto0);--std_logic_vector全拼standard_logic标准逻辑矢量C:outstd_logic_vector(7downto0);clkout:outstd_logic);endPCMencode;architecturebehaviorofPCMencodeisbeginprocess(clkin,D)beginifclkin'eventandclkin='1'thenifD(11)='1'thenC<=D(12)&'1'&'1'&'1'&D(10)&D(9)&D(8)&D(7);elsifD(10)='1'thenC<=D(12)&'1'&'1'&'0'&D(9)&D(8)&D(7)&D(6);elsifD(9)='1'thenC<=D(12)&'1'&'0'&'1'&D(8)&D(7)&D(6)&D(5);elsifD(8)='1'thenC<=D(12)&'1'&'0'&'0'&D(7)&D(6)&D(5)&D(4);elsifD(7)='1'thenC<=D(12)&'0'&'1'&'1'&D(6)&D(5)&D(4)&D(3);elsifD(6)='1'thenC<=D(12)&'0'&'1'&'0'&D(5)&D(4)&D(3)&D(2);elsifD(5)='1'thenC<=D(12)&'0'&'0'&'1'&D(4)&D(3)&D(2)&D(1);elseC<=D(12)&'0'&'0'&'0'&D(4)&D(3)&D(2)&D(1);endif;endif;endprocess;clkout<=clkin;endbehavior;仿真图:39 5.2PCM译码程序与仿真图--PCM译码--输入A律八位PCM编码,占空比为1/32的8000HZ的去取样时钟--输出为十三位逻辑矢量均匀量化值,占空比为1/32的8000HZ的去取样时钟libraryieee;useieee.std_logic_1164.all;entityPCMdecodeisport(clkin:instd_logic;C:instd_logic_vector(7downto0);D:outstd_logic_vector(12downto0);clkout:outstd_logic);endPCMdecode;architecturebehaviorofPCMdecodeissignaltemp:std_logic_vector(2downto0);begintemp<=C(6downto4);process(clkin)beginifclkin'eventandclkin='1'thencasetempiswhen"111"=>D<=C(7)&"1"&C(3downto0)&"1000000";when"011"=>D<=C(7)&"01"&C(3downto0)&"100000";when"101"=>D<=C(7)&"001"&C(3downto0)&"10000";when"001"=>D<=C(7)&"0001"&C(3downto0)&"1000";when"110"=>D<=C(7)&"00001"&C(3downto0)&"100";when"010"=>D<=C(7)&"000001"&C(3downto0)&"10";when"100"=>D<=C(7)&"0000001"&C(3downto0)&"1";when"000"=>D<=C(7)&"0000000"&C(3downto0)&"1";39 whenothers=>D<=null;endcase;endif;endprocess;clkout<=clkin;endbehavior;仿真图:5.3HDB3编码器程序与仿真图--HDB3编码--输入2.048Mb/s数据流,占空比为50%的2.048MHZ的去取样时钟--输出为两路双极性2.048Mb/s数据流,占空比为50%的2.048MHZ的去取样时钟libraryieee;useieee.std_logic_1164.all;useieee.numeric_std;useieee.std_logic_arith;entityhdbnecodeisport(clkin:instd_logic;datain:instd_logic;dataouthh:outstd_logic;dataouthl:outstd_logic;clkout:outstd_logic);endhdbnecode;architecturebehaviorofhdbnecodeisbeginprocess(clkin)variablecount0,count1:integer:=0;variablecounty:boolean;39 variabletemp:std_logic_vector(3downto0);beginifclkin'eventandclkin='0'thenifdatain='1'then--输入为1时处理4位寄存器count0:=0;temp(0):=datain;count1:=count1+1;iftemp(3)='0'then--首位0处理输出dataouthh<='0';dataouthl<='0';elseifcountythen--首位1处理输出dataouthh<='1';dataouthl<='0';county:=notcounty;elsedataouthh<='0';dataouthl<='1';county:=notcounty;endif;endif;elsetemp(0):=datain;--输入为0时处理4位寄存器count0:=count0+1;ifcount0=4then--检测到0000,处理4位寄存器count0:=0;count1:=(count1rem2);--两个四连零间1的奇偶ifcount1=1then--两个四连零间1的奇偶count1:=0;temp:="0001";dataouthh<='0';dataouthl<='0';county:=notcounty;elsecount1:=0;--两个四连零间1的偶temp:="1001";ifcountythendataouthh<='1';dataouthl<='0';elsedataouthh<='0';dataouthl<='1';39 endif;endif;elseiftemp(3)='0'then--未检测到0000处理输出dataouthh<='0';dataouthl<='0';elseifcountythendataouthh<='1';dataouthl<='0';county:=notcounty;elsedataouthh<='0';dataouthl<='1';county:=notcounty;endif;endif;endif;endif;endif;temp(3downto1):=temp(2downto0);endprocess;clkout<=clkin;endbehavior;仿真图:5.4HDB3译码器程序与仿真图--输入为两路双极性2.048Mb/s数据流,占空比为50%的2.048MHZ的去取样时钟--输出为一路单极性2.048Mb/s数据流,占空比为50%的2.048MHZ的去取样时钟libraryieee;useieee.std_logic_1164.all;entityhdbdecodeisport(clkin:instd_logic;39 datainhh:instd_logic;datainhl:instd_logic;dataout:outstd_logic;clkout:outstd_logic);endhdbdecode;architecturebehaviorofhdbdecodeissignalhh,hl:std_logic_vector(4downto0);signaltemp:std_logic;beginAHH:process(clkin)variabletemphh:std_logic_vector(4downto0);beginifclkin'eventandclkin='0'thentemphh(0):=datainhh;iftemphh="10001"thentemphh:="10000";elsif(temphh="10010"ortemphh="10011")thentemphh:="0000"&datainhh;endif;endif;hh<=temphh;temphh(4downto1):=temphh(3downto0);endprocess;AHL:process(clkin)variabletemphl:std_logic_vector(4downto0);beginifclkin'eventandclkin='0'thentemphl(0):=datainhl;iftemphl="10001"thentemphl:="10000";elsif(temphl="10010"ortemphl="10011")thentemphl:="0000"&datainhl;endif;endif;hl<=temphl;temphl(4downto1):=temphl(3downto0);endprocess;emp<=(hh(4)orhl(4));dataout<=temp;clkout<=clkin;endbehavior;39 仿真图:5.5一次群复接器程序与仿真图--时分复接器--输入一个8位数据总线(即30路PCM话音并行数据共用总线),--输入一个一次群串行位同步时钟2.048MB/S信号--输出一个一次群串行合路数据流2.048MB/S信号;一个一次群串行位同步时钟2.048MB/S信号--一个5位时隙地址总线信号(即30路PCM话音并行地址总线)--(其说明当前输入的数据总线上是哪个时隙数据)--此程序要特别注意器件的选择,该程序选择cyclone系列EP1C6Q240C8时得到所期望的结果--若选用其他器件譬如StratixII系列的器件会丢失第一路信息libraryieee;--程序所调用的库是IEEE库useieee.std_logic_1164.all;--定义了std_logic,std_logic_vector类型useieee.std_logic_unsigned.all;--用到基于std_logic,std_logic_vector类型的--无符号的算术运算entityfujieqiisport(clkin:instd_logic;datain:instd_logic_vector(7downto0);--30路语音信号输入dataout:outstd_logic;--输出串行数据流ads:outstd_logic_vector(4downto0);--五位时隙总线信号clkout:outstd_logic);--输出时钟endfujieqi;architecturebehavoffujieqiissharedvariabletscount:std_logic_vector(8downto0);--时隙计数器sharedvariablebitcount:std_logic_vector(2downto0);--位计数器beginp1:process(clkin)--位时钟和时隙计数beginifclkin'eventandclkin='1'thenifbitcount="111"thenbitcount:="000";39 tscount:=tscount+'1';elsebitcount:=bitcount+'1';endif;endif;endprocessp1;p2:process(clkin)variableregester:std_logic_vector(7downto0);--定义一个内部的寄存器,--用于寄存输入的八位数据variabletemp:std_logic_vector(7downto0);--定义一个中间变量,用于数据的串行输出beginifclkin'eventandclkin='1'thenads<=tscount(4downto0);--记录当前输出的是第几路信号ifbitcount="000"theniftscount(5downto0)="000000"thenregester:="10011011";--双帧计数为0时传帧同码elsiftscount(5downto0)="100000"thenregester:="11111111";--双帧计数为32时传勤务信息elsiftscount="000010000"thenregester:="00001111";--复帧计数为16时传复帧同步码elsiftscount(4downto0)="10000"thenregester:="11111111";--除F0帧外,每帧的第16时隙都传信令信息elseregester:=datain;--不满足以上条件时传语音信号endif;temp:=regester;--并串转换dataout<=temp(7);--时隙的第一个时钟上升沿输出最高位elsetemp(7downto1):=temp(6downto0);--右移dataout<=temp(7);--接着发其他位endif;endif;clkout<=clkin;--输出时钟endprocessp2;endbehav;39 仿真图:5.6一次群分接器程序与仿真图--时分分接程序--同步码捕获三次后方确认同步完成,若失步三次后重新捕获--输入一个一次群串行合路数据流2.048MB/S信号,一个一次群串行位同步时钟2.048MB/S信号--输出一个一次群串行合路数据流2.048MB/S信号,一个30位逻辑矢量时隙脉冲信号(每位对应一路时隙脉冲)--一个一次群串行位同步时钟2.048MB/S信号--输出串行数据流分别于A1……A31相与即可得到各路话音信号libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityfenjieqiisport(datain,clkin:instd_logic;--输入2.048MB/S的合路数据流,输入--串行位同步时钟2.048MB/SA1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A17,A18,A19,A20,A21,A22,A23,A24,A25,A26,A27,A28,A29,A30,A31:outstd_logic;--输出30位逻辑矢量时隙脉冲信号,与dataout相与的结果就是所选择的一路语音--输出clkout,dataout:outstd_logic);--输出串行数据流和输出时钟endfenjieqi;architecturebehaveoffenjieqiissignalregester,singlecount:std_logic_vector(7downto0):="00000000";--regester为八位移位寄存器用于捕获同步码,singlecount为单帧计数器signaldoublecount:std_logic_vector(8downto0):="000000000";--双帧计数器以位为单位signalcatch:std_logic:='0';--同步码捕捉状态标志0表捕捉态,1表示同步态signalsyncount,lostcount:std_logic_vector(1downto0):="00";--同步计数器以位为单位39 --与失步计数器beginP1:process(clkin)--利用移位寄存器暂存当前输入码,敏感信号为时钟上升沿--即当时钟上升沿到达时该进程执行一次beginifclkin'eventandclkin='1'then--时钟上升沿有效暂存输入数据regester<=regester(6downto0)&datain;endif;endprocessP1;P2:process(clkin)--同步码捕捉,同步保持比较beginifclkin'eventandclkin='0'then--时钟下降沿有效验证是否为同步码--及验证落后于暂存刚好半个时钟周期,敏感信号为时钟下降沿,即时钟下降沿到达一次程序执行一次doublecount<=doublecount+1;singlecount<=doublecount(7downto0)+1;--借用双帧第八位单帧计数ifcatch='0'then--catch为0时为捕捉态ifsyncount="00"thenifregester="10011011"thensyncount<=syncount+1;doublecount<="000000111";--表示第一次捕捉到同步码,将其次数加一,并且让输出变为第八位endif;elsifdoublecount="000000110"then--已捕捉到同步码的同时验证捕获ifregester="10011011"thenifsyncount="10"thencatch<='1';syncount<="00";--验证同步次数达到3次时转为同步状态elsesyncount<=syncount+1;endif;elsesyncount<="00";--验证不是同步码时转为重新捕获状态endif;endif;else--catch为1,同步态时,同步保持比较ifdoublecount="000000110"andregester/="10011011"then--表示同步时验证不是同步码iflostcount="10"thencatch<='0';lostcount<="00";--验证失步次数达到三次时转为捕捉状态elselostcount<=lostcount+1;endif;endif;endif;endif;39 endprocessP2;P3:process(clkin,singlecount,catch)--时钟上升沿有效,译码输出beginifclkin'eventandclkin='1'thenifcatch='1'thendataout<=datain;ifsinglecount>="00000111"andsinglecount<="00001110"thenA1<='1';elseA1<='0';endif;ifsinglecount>="00001111"andsinglecount<="00010110"thenA2<='1';elseA2<='0';endif;ifsinglecount>="00010111"andsinglecount<="00011110"thenA3<='1';elseA3<='0';endif;ifsinglecount>="00011111"andsinglecount<="00100110"thenA4<='1';elseA4<='0';endif;ifsinglecount>="00100111"andsinglecount<="00101110"thenA5<='1';elseA5<='0';endif;ifsinglecount>="00101111"andsinglecount<="00110110"thenA6<='1';elseA6<='0';endif;ifsinglecount>="00110111"andsinglecount<="00111110"thenA7<='1';elseA7<='0';endif;ifsinglecount>="00111111"andsinglecount<="01000110"thenA8<='1';elseA8<='0';endif;ifsinglecount>="01000111"andsinglecount<="01001110"thenA9<='1';elseA9<='0';endif;ifsinglecount>="01001111"andsinglecount<="01010110"thenA10<='1';elseA10<='0';endif;ifsinglecount>="01010111"andsinglecount<="01011110"thenA11<='1';elseA11<='0';endif;ifsinglecount>="01011111"andsinglecount<="01100110"thenA12<='1';elseA12<='0';endif;ifsinglecount>="01100111"andsinglecount<="01101110"thenA13<='1';elseA13<='0';endif;ifsinglecount>="01101111"andsinglecount<="01110110"thenA14<='1';elseA14<='0';endif;ifsinglecount>="01110111"andsinglecount<="01111110"thenA15<='1';elseA15<='0';endif;ifsinglecount>="10000111"andsinglecount<="10001110"thenA17<='1';elseA17<='0';endif;ifsinglecount>="10001111"andsinglecount<="10010110"thenA18<='1';elseA18<='0';endif;ifsinglecount>="10010111"andsinglecount<="10011110"thenA19<='1';elseA19<='0';endif;39 ifsinglecount>="10011111"andsinglecount<="10100110"thenA20<='1';elseA20<='0';endif;ifsinglecount>="10100111"andsinglecount<="10101110"thenA21<='1';elseA21<='0';endif;ifsinglecount>="10101111"andsinglecount<="10110110"thenA22<='1';elseA22<='0';endif;ifsinglecount>="10110111"andsinglecount<="10111110"thenA23<='1';elseA23<='0';endif;ifsinglecount>="10111111"andsinglecount<="11000110"thenA24<='1';elseA24<='0';endif;ifsinglecount>="11000111"andsinglecount<="11001110"thenA25<='1';elseA25<='0';endif;ifsinglecount>="11001111"andsinglecount<="11010110"thenA26<='1';elseA26<='0';endif;ifsinglecount>="11010111"andsinglecount<="11011110"thenA27<='1';elseA27<='0';endif;ifsinglecount>="11011111"andsinglecount<="11100110"thenA28<='1';elseA28<='0';endif;ifsinglecount>="11100111"andsinglecount<="11101110"thenA29<='1';elseA29<='0';endif;ifsinglecount>="11101111"andsinglecount<="11110110"thenA30<='1';elseA30<='0';endif;ifsinglecount>="11110111"andsinglecount<="11111110"thenA31<='1';elseA31<='0';endif;endif;endif;endprocessP3;clkout<=clkin;endbehave;仿真图:39 +5.7位同步程序与仿真图libraryIEEE;--相位比较模块useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityphase_compareisport(Reset:instd_logic;Clk_Est:instd_logic;Date_In:instd_logic;Phase_Error:outstd_logic_vector(1downto0));endphase_compare;architecturertlofphase_compareissignalTemp_SampleA:std_logic;signalTemp_SampleB:std_logic;signalTemp_SampleC:std_logic;beginprocess(Reset,Clk_Est)beginif(Reset='0')thenTemp_SampleA<='0';Temp_SampleC<='0';elsif(Clk_Est'eventandClk_Est='0')then39 Temp_SampleA<=Temp_SampleC;Temp_SampleC<=Date_in;endif;endprocess;process(Reset,Clk_Est)beginif(Reset='0')thenTemp_SampleB<='0';elsif(Clk_Est'eventandClk_Est='1')thenTemp_SampleB<=Date_in;endif;endprocess;process(Reset,CLK_Est)beginif(Reset='0')thenPhase_Error<="00";elsif(Clk_Est'eventandClk_Est='0')thenPhase_Error(0)<=Temp_SampleAxorTemp_SampleC;Phase_Error(1)<=Temp_SampleBxorTemp_SampleC;endif;endprocess;endrtl;libraryIEEE;--数字滤波模块useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityloop_filterisgeneric(M:integer);port(Reset:instd_logic;Clk:instd_logic;Clk_Est:instd_logic;Phase_Error:instd_logic_vector(1downto0);insert_signal:outstd_logic;reduce_signal:outstd_logic);endloop_filter;39 architecturertlofloop_filterissignalvalue_lever:integerrange0to255;signalcount_sample:integerrange0to7;beginprocess(Reset,Clk_Est)beginif(Reset='0')thenValue_Lever<=M/2-1;elsif(Clk_Est'eventandClk_Est='1')thenif((Value_Lever=0)or(Value_Lever=M-1))thenValue_Lever<=M/2-1;elsecasePhase_Erroriswhen"01"=>Value_Lever<=Value_Lever-1;when"11"=>Value_Lever<=Value_Lever+1;whenothers=>endcase;endif;endif;endprocess;process(Reset,Clk)beginif(Reset='0')thenCount_sample<=0;elsif(Clk'eventandCLk='1')thenCount_sample<=Count_sample+1;endif;endprocess;process(Reset,Clk)beginif(Reset='0')theninsert_signal<='0';reduce_signal<='0';elsif(Clk'eventandCLk='0')then39 if(Count_sample=0)thenif(value_lever=0)thenreduce_signal<='1';elsif(value_lever=M-1)theninsert_signal<='1';endif;elseinsert_signal<='0';reduce_signal<='0';endif;endif;endprocess;endrtl;libraryIEEE;--可控分频模块useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitydigital_coisport(Reset:instd_logic;Clk:instd_logic;Clk_Est:bufferstd_logic;insert_signal:instd_logic;reduce_signal:instd_logic);enddigital_co;architecturertlofdigital_coissignalCount_Control:integerrange0to7;beginprocess(Reset,Clk)beginif(Reset='0')thenCount_Control<=0;elsif(Clk'eventandCLk='1')thenif(Insert_Signal='1')thenCount_Control<=Count_Control;elsif(Reduce_Signal='1')then39 Count_Control<=Count_Control+2;elseCount_Control<=Count_Control+1;endif;endif;endprocess;process(Reset,Clk)beginif(Reset='0')thenclk_est<='0';elsif(Clk'eventandCLk='0')thenif(Count_Control=7)thenclk_est<=notclk_est;endif;endif;endprocess;endrtl;libraryIEEE;--顶层设计模块useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitydigital_pllisport(Reset:instd_logic;Clk:instd_logic;Date_In:instd_logic;Clk_estimate:outstd_logic;data_out:outstd_logic);enddigital_pll;architecturertlofdigital_plliscomponentphase_compareport(Reset:instd_logic;Clk_Est:instd_logic;Date_In:instd_logic;Phase_Error:outstd_logic_vector(1downto0));39 endcomponent;componentloop_filtergeneric(M:integer);port(Reset:instd_logic;Clk:instd_logic;Clk_Est:instd_logic;insert_signal:outstd_logic;reduce_signal:outstd_logic;Phase_Error:instd_logic_vector(1downto0));endcomponent;componentdigital_coport(Reset:instd_logic;Clk:instd_logic;Clk_Est:bufferstd_logic;insert_signal:instd_logic;reduce_signal:instd_logic);endcomponent;signalclk_est:std_logic;signalphase_error:std_logic_vector(1downto0);signalinsert_signal:std_logic;signalreduce_signal:std_logic;beginu1:phase_compareportmap(reset=>reset,clk_est=>clk_est,date_in=>date_in,phase_error=>phase_error);u2:loop_filtergenericmap(256)portmap(reset=>reset,clk=>clk,clk_est=>clk_est,phase_error=>phase_error,39 insert_signal=>insert_signal,reduce_signal=>reduce_signal);u3:digital_coportmap(reset=>reset,clk=>clk,insert_signal=>insert_signal,reduce_signal=>reduce_signal,clk_est=>clk_est);clk_estimate<=clk_est;data_out<=date_in;endrtl;仿真图:39 6通信系统课程设计心得体会在学习了通信原理专业课后,对于通信系统课程设计,我们进行了两周左右的准备与调试,中间暴露了很多问题,当然也有很多挑战,经过小组的共同努力和老师的耐心指导下完成了本小组选题。作为对于通信原理专业必修课的一种检验,我们发现自己对于知识的掌握和理解还不够,尤其是涉及到实际运用当中的具体问题,比如同步过程的建立,尤其是位同步的建模与设计、上机调试。我们尝试了几种方法,在具体比较后,最后挑选了一个最小误差的数字锁相环成熟方案。还有在使用软件的过程中暴露出来的问题,软件的使用、调试,尤其是各个模块合成时的同步。在刚开始,以课程设计要求为基础,我们进行了一次讨论,完成了方案的总体思路和小组模块划分,并确定了完成课程设计的总体过程。首先是收集资料,比如图书馆里关于FPGA通信系统建模方面的书籍,网上关于数字基带传输系统的资料。然后基于资料做了一个基本模型,关于这个基本模型又进行了一次讨论,大家对每个模块发表自己的建议与修改提议,再由模块负责人进行改进、提高。经过一段时间的修改,终于由基本模型过渡到了最终模型。最终再基于最终模型进行了编程与上机调试。本次通信系统课程设计,加深了我们对于本专业的认识,尤其对通信原理的理解得到了很深的提高,更为以后的实际运用得到了锻炼。我们也在39 小组分工合作中体会到了分工合作、协调共进的重要性,一个大的系统工程涉及到方方面面,需要很多人的通力合作才能取得最后的整体成功。比如我们一直关心的同步问题。对于这次课程设计收获颇丰,很实在的锻炼了自己的各项能力,是对未来进入通信行业的一次铺垫。希望能够在此基础上还能提高与进步。39 附录:参考资料:[1]樊昌信,曹丽娜.通信原理(第6版)[M].北京:国防工业出版社,2011.[2]王兴权.QuartusII的FPGA设计手册.桂林电子科技大学计算机与控制学院,2007.[3]褚振勇等.FPGA设计与应用[M].西安:西安电子科技大学出版社,2002.39

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭