HDB3码编码器及解码器verilog代码编程及实现_第1页
HDB3码编码器及解码器verilog代码编程及实现_第2页
HDB3码编码器及解码器verilog代码编程及实现_第3页
HDB3码编码器及解码器verilog代码编程及实现_第4页
HDB3码编码器及解码器verilog代码编程及实现_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通信原理,消息数字基带信号调制传输解调基带信号解码消息,基带信号的选择:AMI码HDB3码HDB3码保持了AMI码的优点,克服了AMI码在遇到连“0”长时难以提取定时信息的困难,因而获得广泛应用。,HDB3码编码规则,HDB3码为3阶高密度双极性码,其编码规则为:1将消息代码转换为AMI码;2检查AMI码中连“0”的情况,出现4个或4个以上连“0”时,将第4个“0”变为与前一个非“0”符号同极性的符号,用“V”标识(+V和-V);3、检查相邻V符号之间非“0”符号是否为偶数,如果为偶数,则将当前V符号前一个非“0”符号后的第一个“0”变为“B”,”B”的极性与前一个非”0“符号相反,并使“V”后的非“0”符号从“V”开始再交替变化。,编码器实现:在实际电路设计时,先在纯粹的数字电路下完成插“V”的操作,再完成插“B”的操作;然后再将单极性变成双极性。这样可以在数字电路中实现,且降低寄存器需求。因为“V”、“B”是认为标识的符号,所以在具体电路中,需做以下替换:0-00,1-01,V-11,B-10。,设计步骤:插“V”的实现:1、设置连“0”计数器,复位为0;2、对输入信号进行判断,如果为1则计数器复位,且输出“01”;3、如果为“0”,则对“0”进行计数,如果计数值不为4,则输出“00”;4、如果计数值为“4”,则计数器复位,同时输出为“11”。,moduleadd_v(data_in,clk,data_out);inputdata_in;inputclk;output1:0data_out;reg1:0data_out;regcounter;always(posedgeclk)if(data_in=1b1)begincounter=0;data_out=2b01;endelsebegincounter=counter+1;if(counter=3)begindata_out=2b11;counter=0;endelsebegindata_out=2b00;endendendmodule,RTL图,插“B”的实现:1、设置对“01”的计数器counter为0,设置对“11”的计数器firstV为0;2、对输入进行判断,如果为“01”,则counter加1,仍然输出“01”;3、如果输入为“00”,输出为“00”,计数器不变;4、如果输入为“11”,firstV加1,此时如果counter为奇数,则输出仍为“11”;5、如果counter为偶数,则将counter复位,且将此处前第4个数变成“10”。关键要设置四位的移位寄存器,moduleadd_b(add_in,addb_out,clk);inputclk;input1:0add_in;output1:0addb_out;regfirstv;regcounter;reg1:0d3:0;always(posedgeclk)begind3=d2;d2=d1;d1=d0;d0=add_in;endalways(posedgeclk)beginif(d0=2b11)begincounter=0;firstv=0;endelseif(d0=2b01)begincounter=counter+1;firstv=1;endelsebeginfirstv=1;endendassignaddb_out=(counter=0)endmodule,RTL图,单双极性变换:由HDB3编码规则,“V”的极性是正负交替,而“1”和“B”的极性看成一体,为正负交替的,同时“V”的极性与前面的非“0”码一致。1、设置一个极性标志even=0;2、如果输入信号为“00”,输出仍为“00”;3、输入为“01”,或“10”,如果even=1,输出“01”;如果even=0,输出为“10”,然后将even翻转;4、如果输入为“11”,判断even,如果为1,则输出“10”,如果位0,输出“01”。注意:输出后的“10”和“01”表示的不再是“1”、“V”、和“B”了,而是标识符号的正负极性。再将输出控制4选1的开关,就可以将“00”、“01”、“10”转化为0、+1和-1了。,modulepolar(addb_out,clk,BP,BN);input1:0addb_out;inputclk;outputBP,BN;reg1:0polar_out;regBP,BN;regeven;always(posedgeclk)if(addb_out=2b11)beginif(even=1)beginpolar_out=2b01;endelsebeginpolar_out=2b11;endendelseif(addb_out=2b01|addb_out=2b10)if(even=1)begineven=0;polar_out=2b11;endelsebegineven=1;polar_out=2b01;endelsebeginpolar_out=2b00;endalways(polar_out)beginif(polar_out=2b01)beginBP=0;BN=1;endelseif(polar_out=2b11)beginBP=1;BN=0;endelsebeginBP=0;BN=0;endendendmodule,RTL图,顶层模块设计modulebian(clk,data,BP,BN);inputclk,data;outputBP,BN;add_vu1(.clk(clk),.data_in(data),.data_out(a);add_bu2(.clk(clk),.add_in(a),.addb_out(b);polaru3(.clk(clk),.addb_out(b),.BP(BP),.BN(BN);endmodule,RTL图,译码器:译码原理:根据编码规则,破坏点V脉冲与前一个脉冲同极性。因此可从所接受的信码中找到V码,然后根据加取代节的原则,V码与前面的三位码必然是取代码,需要全部复原为四连0。只要找到V码,不管V码前是两个“0”码,一律把取代节清零,完成了扣V扣B功能,进而得到原二元信码序列。可实现HDB3译码的模型框图如图4-1所示,HDB3译码器包括双/单极性变换、V码检测、时钟提扣V扣B四部分组成。,BP,BN转换模块moduletrans(clk,BP,BN,P,N);inputclk,BP,BN;outputP,N;reg1:0P;reg1:0N;always(posedgeclk)beginif(BP=0)P=2b00;elseP=2b01;if(BN=0)N=2b00;elseP=2b01;endendmodule,(1)+V检测模块为了方便起见,设从正整流电路输出的信号为+B,从负整流电路输出的信号为-B。+V码检测模块-B的控制下,对输入的+B进行检测。其原理是:当+B的上升沿到来时,对输入的+B脉冲进行计数,当计数值等于2时,输出一个脉冲作为+V脉冲,同时计数器清零,而且计数期间,一旦有-B信号为“1”电平时,立即对计数器清零,计数器重新从零开始计数。这是因为在两个+B脉冲之间,存在-B脉冲,说明第二个+B脉冲不是+V码,而只有在连续两个+B脉冲之间无-B脉冲,才能说明这两个+B脉冲在HDB3码中,是真正同极性的于是就可以判定第二个+B脉冲实际上是+V码,达到检测+V码的目的。(2)-V检测模块V码检测原理与+V码检测的类似。所不同的是,-V码检测电路在+B控制下,对来自-B信号进行计数和检测、判定,若检测到-V码,则输出到-V码信号,modulefindv(clk,P1,N1,out1,out2);inputP1,N1,clk;outputout1,out2;reg1:0counter1;reg1:0counter2;reg1:0out1;reg1:0out2;always(posedgeclk)beginif(P1=2b01)beginif(counter2=2b10)counter1=2b00;elsebegincounter1=counter1+1;if(counter1=2b10)beginout1=2b11;counter1=2b00;endelsebeginout1=2b01;endendend,elseout1=2b00;endalways(posedgeclk)beginif(N1=2b01)beginif(counter1=2b10)counter2=2b00;elsebegincounter2=counter2+1;if(counter2=2b10)beginout2=2b11;counter1=2b00;endelsebeginout2=2b01;endendendelseout2=2b00;endendmodule,(3)扣V扣B模块扣V扣B模块有三个输入信号,即时钟信号、V码信号和来自正、负整流输出的和路信号。由于该和路信号可能包含有B脉冲和V脉冲,因此需要在扣V扣B模块中,去除V和B脉冲。本模块的建模方法是,用V码检测模块所检测出的V码信号,去控制一个移位寄存器,若未碰到V脉冲,则整流输出合成信号在时钟的节拍下,顺利通过移位寄存器,当碰到有V脉冲时,该V脉冲将使移位寄存器清零。考虑到四连0,即V脉冲及其前面的三个码元应为0码,所以,可设置四位的移位寄存器,当V码清零时,同时将移存器中的四位码全变为0。不管是否有B脉冲,在此模块中,一并清零,因而无需另设扣B电路。另外移位四位寄存器起到延时四位时钟周期的作用,以使所检测出的V脉冲与信号流中的V脉冲位置对齐,保证清零的准确性,modulechvb(in,clk,out);inputclk;input1:0in;output1:0out;reg1:0d3:0;always(posedgeclk)begind3=d2;d2=d1;d1=d0;d0=in;endalways(posedgeclk)beginif(d3=2b11)begind0=00;d1=00;d2=00;d3=00;endendendmodule,信号叠加模块modulejia(in1,in2,clk,out0);input1:0in1;input1:0in2;inputclk;outputout0;reg1:0a;reg1:0b;always(posedgeclk)begina=in1;b=in2;endassignout0=a+b;endmodule,顶层模块moduleyima(clk,BP,BN,out3);inputclk,BP,BN;outputout3;wir

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论