1.算法仿真效果
vivado2019.2仿真结果如下:
2.算法涉及理论知识概要
数字基带信号的传输是数字通信系统的重要组成部分。在数字通信中,有些场合可不经过载波调制和解调过程,而对基带信号进行直接传输。采用AMI码的信号交替反转,有可能出现四连零现象,这不利于接收端的定时信号提取。而HDB3码因其无直流成份、低频成份少和连0个数最多不超过三个等特点,而对定时信号的恢复十分有利,并已成为CCITT协会推荐使用的基带传输码型之一。
三阶高密度双极性码(英语:High Density Bipolar of Order 3 code,简称:HDB3码)是一种适用于基带传输的编码方式,它是为了克服AMI码的缺点而出现的,具有能量分散,抗破坏性强等特点。
三阶高密度双极性码用于所有层次的欧洲E-carrier系统,HDB3码将4个连续的“0”位元取代成“B00V”。这个做法可以确保连续的violations are of differing polarity,即是相隔单数的一般B记号。
1、连0的个数不超过3时,规则与AMI相同,即0不变,1变为-1、+1交替;
2、若连0的个数超过3,则将每4个0看作一小节,定义为B00V,B可以是-1、0、+1,V可以是-1、+1;
3、B和V具体值满足以下条件:V和前面相邻非0符号极性相同;不看V时极性交替;V与V之间极性交替;
4、一般第一个B取0,第一个非0符取-1。
在V与V之间如果出现偶数个B时,应在后一个V字节补一个B',定义为B'00V,B'与前面相邻的B之间符号极性相反,这个字节的V和B'符号极性相同。
由于V会破坏极性交替的规律、B有3种变化以满足规则,所以V称为破坏脉冲、B称为调节脉冲,B00V称为取代节、破坏节。
±1和±B、±V没有区别,这里只是说明它们是0变来的。
-B为补码,值为-1,此字节V符号跟随,为-V
由规则导出的一种编码方法,个人认为这是机器实现时最效率的思路之一:
1、源码是1时,暂时不变;
2、连0不超过3个时不变,有4个或以上连0时把每4个0换为取代节,即B00V;
3、确定B是0还是±1:第一个B一般取0,若两个取代节之间1的个数为偶,易推得后者的B一定是±1,此时B和1遵循的规则完全相同,可以直接记为1,即100V;为奇则一定是0,记为0,即000V。
4、统一确定极性:第一个非0符一般取-1,之后,根据前一个非0符极性,V取同,1取反;
手算的方法多种多样,理清规则,遵循“先满足V之间极性交替,然后确定B”的大方向,皆可迎刃而解。
常见的错误:经常出现 “第一步先转成AMI” 的表述,这无论对于手算还是编程,实际操作起来都是多余的步骤。如例子中的最后一位,HDB3码和AMI码相反,AMI码和HDB3码的极性没有必然关系,因此转成AMI既决定不了1码最终的极性,又不改变0,对HDB3编码过程没有任何帮助。HDB3是改进的AMI,提到它主要是追根溯源、做对比,起到帮助理解记忆的作用,并不是一定要在编码过程中用到它。
1、虽然编码很复杂,但解码规则很简单,就是把原来的取代节(4个连零)找到即可,若3连“0”前后非零脉冲同极性,则将最后一个非零元素译为零,如+1000+1 就应该译成“10000”,否则不用改动;若2连 “0”前后非零脉冲极性相同,则两零前后都译为零,如-100-1,就应该译为0000,否则也不用改动.
2、再将所有的-1变换成+1后,就可以得到原消息码。
3.verilog核心程序
`timescale 1ns / 1ps module hdb3( input rst_n,clk,data_in, output [1:0] bv_out,hdb3_out,state, output flag, output [7:0] count, output hdb3_dec, output [9:0] fifo_dec ); wire [1:0] hdb3_vout; wire [1:0] v_in; wire [1:0] bv_in; wire [1:0] hdb3_in; VB VB_u( .rst_n (rst_n), .clk (clk), .v_in (v_in), .bv_out (bv_out), .flag (flag), .count (count) ); SV SV_u( .rst_n (rst_n), .clk (clk), .data_in (data_in), .hdb3_vout (hdb3_vout) ); hdb3_VB hdb3_VB_u( .rst_n (rst_n), .clk (clk), .bv_in (bv_in), .hdb3_out (hdb3_out), .state (state) ); decode decode_u( .rst_n (rst_n), .clk (clk), .hdb3_in (hdb3_in), .hdb3_dec (hdb3_dec), .fifo_dec (fifo_dec) ); assign v_in = hdb3_vout; assign bv_in = bv_out; assign hdb3_in = hdb3_out; endmodule
标签:AMI,FPGA,极性,clk,hdb3,testbench,rst,HDB3 From: https://www.cnblogs.com/51matlab/p/17423252.html