好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

HDB3码编码器及解码器verilog代码编程及实现PPT课件.ppt

29页
  • 卖家[上传人]:cl****1
  • 文档编号:585848039
  • 上传时间:2024-09-03
  • 文档格式:PPT
  • 文档大小:1.58MB
  • / 29 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 通信原理通信原理1 1 基带信号的选择:基带信号的选择: AMIAMI码码 HDB3HDB3码码 HDB3HDB3码保持了码保持了AMIAMI码的优点,克服码的优点,克服了了AMIAMI码在遇到连码在遇到连““0”0”长时难以提长时难以提取定时信息的困难,因而获得广泛取定时信息的困难,因而获得广泛应用2 2 *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”开始开始再交替变化。

      再交替变化3 3 4 4 *编码器实现编码器实现:*在实际电路设计时,先在纯粹的数字电路下在实际电路设计时,先在纯粹的数字电路下完成插完成插““V”V”的操作,再完成插的操作,再完成插““B”B”的操作;的操作;然后再将单极性变成双极性这样可以在数然后再将单极性变成双极性这样可以在数字电路中实现,且降低寄存器需求字电路中实现,且降低寄存器需求因为因为““V”V”、、““B”B”是认为标识的符号,所以是认为标识的符号,所以在具体电路中,需做以下替换:在具体电路中,需做以下替换:0-000-00,,1-011-01,,V-11, B-10V-11, B-105 5 设计步骤:设计步骤:*插插“V”的实现:的实现:*1、设置连、设置连“0”计数器,复位为计数器,复位为0;;*2、对输入信号进行判断,如果为、对输入信号进行判断,如果为1则则计数器复位,且输出计数器复位,且输出“01”;;*3、如果为、如果为“0”,则对,则对“0”进行计数,进行计数,如果计数值不为如果计数值不为4,则输出,则输出“00”;;*4、如果计数值为、如果计数值为“4”,则计数器复,则计数器复位,同时输出为位,同时输出为“11”。

      6 6 *module add_v(data_in,clk,data_out);*input data_in;*input clk;*output [1:0] data_out;*reg [1:0] data_out;*reg counter;*always @(posedge clk)* if(data_in==1'b1) begin counter<=0; data_out<=2'b01; end* else * begin * counter<=counter+1; * if(counter==3) begin data_out=2'b11;counter=0; end* else begin data_out=2'b00; end* end*endmodule7 7 *RTL图图8 8 9 9 *插插“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”。

      关键要设置四位的移位寄存器关键要设置四位的移位寄存器1010 *module add_b(add_in,addb_out,clk);*input clk;*input [1:0] add_in;*output [1:0] addb_out;*reg firstv;*reg counter;*reg [1:0] d [3:0];*always @(posedge clk)*begin *d[3]<=d[2];*d[2]<=d[1];*d[1]<=d[0];*d[0]<=add_in;*end*always @(posedge clk)*begin*if(d[0]==2'b11) begin counter=0;firstv=0; end *else if(d[0]==2'b01) begin counter=counter+1;firstv=1; end*else begin firstv=1; end*end*assign addb_out=(counter==0)&&(firstv==1)&&(d[0]==2'b11)?2'b10:d[3]; *endmodule1111 RTL图图1212 1313 单双极性变换单双极性变换:由由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了1414 *module polar(addb_out,clk,BP,BN);*input [1:0] addb_out;*input clk;*output BP,BN;*reg [1:0] polar_out;*reg BP,BN;*reg even;*always @(posedge clk)*if(addb_out==2'b11)*begin*if(even==1) begin polar_out<=2'b01; end*else begin polar_out<=2'b11; end*end*else if(addb_out==2'b01||addb_out==2'b10)* if(even==1) begin even<=0;polar_out<=2'b11; end* else begin even<=1;polar_out<=2'b01; end*else begin polar_out<=2'b00; end*always @(polar_out)*begin*if(polar_out==2'b01) begin BP=0;BN=1; end*else if(polar_out==2'b11) begin BP=1;BN=0; end*else begin BP=0;BN=0; end*end*endmodule1515 *RTL图图1616 1717 *顶层模块设计*module bian(clk,data,BP,BN);*input clk,data;*output BP,BN;*add_v u1(.clk(clk),.data_in(data),.data_out(a));*add_b u2(.clk(clk),.add_in(a),.addb_out(b));*polar u3(.clk(clk),.addb_out(b),.BP(BP),.BN(BN));*endmodule1818 *RTL图图1919 2020 译码器:译码原理:根据编码规则,破坏点V脉冲与前一个脉冲同极性。

      因此可从所接受的信码中找到V码,然后根据加取代节的原则,V码与前面的三位码必然是取代码,需要全部复原为四连0只要找到V码,不管V码前是两个“0”码,一律把取代节清零,完成了扣V扣B功能,进而得到原二元信码序列可实现HDB3译码的模型框图如图4-1所示,HDB3译码器包括双/单极性变换、V码检测、时钟提扣V扣B四部分组成正整流负整流+V码检测-V码检测相加器相加器 扣V扣B时钟提取HDB3码双/单极性变换V码检测2121 *BP,BN转换模块*module trans(clk,BP,BN,P,N);*input clk,BP,BN;*output P,N;*reg [1:0] P;*reg [1:0] N;*always @(posedge clk)*begin*if(BP==0) P=2'b00;*else P=2'b01;*if(BN==0) N=2'b00;*else P=2'b01;*end*endmodule2222 *(1)+V检测模块*为了方便起见,设从正整流电路输出的信号为+B,从负整流电路输出的信号为-BV码检测模块-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码信号2323 *module findv(clk,P1,N1,out1,out2);*input P1,N1,clk;*output out1,out2;*reg [1:0] counter1;*reg [1:0] counter2;*reg [1:0] out1;*reg [1:0] out2; *always @(posedge clk)*begin*if(P1==2'b01)*begin* if(counter2==2'b10) counter1<=2'b00; * else begin * counter1<=counter1+1;* if(counter1==2'b10)* begin out1<=2'b11; counter1<=2'b00; end* else begin out1<=2'b01;end * end*end* 2424 *else out1=2'b00;*end*always @(posedge clk)*begin*if(N1==2'b01)*begin* if(counter1==2'b10) counter2<=2'b00; * else begin * counter2<=counter2+1;* if(counter2==2'b10)* begin out2<=2'b11; counter1<=2'b00; end * else begin out2<=2'b01; end* end*end*else out2<=2'b00; *end*endmodule2525 *(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脉冲位置对齐,保证清零的准确性2626 *module chvb(in,clk,out);*input clk;*input [1:0] in;*output [1:0] out;*reg [1:0] d [3:0];*always @(posedge clk)*begin *d[3]<=d[2];*d[2]<=d[1];*d[1]<=d[0];*d[0]<=in;*end*always @(posedge clk)*begin*if(d[3]==2'b11)*begin *d[0]=00;*d[1]=00;*d[2]=00;*d[3]=00;*end*end *endmodule2727 *信号叠加模块*module jia(in1,in2,clk,out0);*input [1:0] in1;*input [1:0] in2;*input clk;*output out0;*reg [1:0] a;*reg [1:0] b;*always @(posedge clk)*begin*a<=in1;*b<=in2;*end*assign out0=a+b;*endmodule2828 *顶层模块*module yima(clk,BP,BN,out3);*input clk,BP,BN;*output out3;*wire a,b;*trans u1(.clk(clk),.BP(BP),.BN(BN),.P(P),.N(N));*findv u2(.clk(clk),.P1(P),.N1(N),.out1(out1),.out2(out2));*chvb u3(.clk(clk),.in(out1),.out(a));*chuvb u4(.clk(clk),.in(out2),.out(b));*jia u5(.clk(clk),.in1(a),.in2(b),.out0(out3));*endmodule2929 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.