详细介绍:基于FPGA的HDB3编解码(verilog语言)

news/2025/9/28 8:50:52/文章来源:https://www.cnblogs.com/wzzkaifa/p/19116044

文章目录

  • 前言
  • 一、HDB3码介绍
    • AMI码介绍
  • 二、HDB3编码过程
    • 1.V破坏码插入
    • 2.B码插入
    • 3.确认B极性
    • 4.确认V极性
    • 5.小总结
  • 三、verilog编码设计
    • 1.原始数据产生模块
    • 2.V码插入
    • 3.B码插入
    • 4.极性确认
    • 5.编码总
    • 6.解码总
    • 7.top顶层
  • 总结


前言

项目背景就是将数据通信需要进行HDB3编码,进而一起学习一下。

一、HDB3码介绍

HDB3码(三阶高密度双极性码 High Density Bipolar of Order 3 code)是一种适用于基带传输的编码方式,它是为了克服AMI码(交替反转码 Alternative Mark Inversion)的缺点而出现的,具有能量分散,抗破坏性强等特点。在数字通信中,有些场合可不经过载波调制和解调过程,而对基带信号进行直接传输。采用AMI码的信号交替反转,有可能出现四连零现象,会使得编码的自时钟(self-clocking)信息丢失,这不利于接收端的定时信号提取。而HDB3码因其无直流成份、低频成份少和连0个数最多不超过三个等特点,而对定时信号的恢复十分有利。但HDB3码也有缺点:1、如果单bit编解码出错,会影响后续所有信息;2、对于编解码电路而言,工作前若未正确的清零,同样将出现错误的编解码信息。

AMI码介绍

HDB3是在AMI的基础上进行改良的,进而使得传输长串的0更加可靠。介绍HDB3码前,我们必须介绍一下AMI编码的方法:对于输入代码中所有的0保持不变,对所有的1加上极性符号+/-,注意这里不是随机加上+/-,一个序列中要保持正负交替,至于代码中第一个1是加上正极还是负极则没有明确规定,这里我们默认第一个1为+1,下面给出一个AMI编码的实例:

原始数据:10000110000101100001
AMI数据: 10000-110000-101-100001

二、HDB3编码过程

1.V破坏码插入

HDB3码基于AMI码,若输入代码中连续0的个数小于4则编码规则同AMI码一致,若出现连续的四个0,则通过一下规则编码:

1、0000变为000V:注意这里是每四个0进行转变(V码意为violation,表明编码时出现了连续四个0)
原始数据:1 1 0 0 0 0 1 0 0 0 0 0 0 0 0
加V数据: 1 1 0 0 0 V 1 0 0 0 V 0 0 0 V

2.B码插入

加入B码:检查相邻两个V码之间1的个数,若有偶数个1则后一个000V变为B00V,奇数个1则不变(B码意为bipolar)
加V数据: 1 1 0 0 0 V 1 0 0 0 V 0 0 0 V
加B数据: 1 1 B 0 0 V 1 0 0 0 V B 0 0 V

3.确认B极性

确定B的极性,B和1正负交替加上极性,默认第一个B或者1为+;AMI码本身1的极性切换还是不变的,B的极性要跟AMI的正负1极性在一起切换
加B数据: 1 1 B 0 0 V 1 0 0 0 V B 0 0 V
一次极性:1 -1 B 0 0 V -1 0 0 0 V B 0 0 V

4.确认V极性

确认V码的极性,V码也是正负交替加上极性,这里大家可以发现,V是一个破坏沿,其前一个非0码跟其有相同的极性(V码直接跟随其前面一个1或者B的极性),V码后一个非0码则是有相反极性。
一次极性:1 -1 B 0 0 V -1 0 0 0 V B 0 0 V
二次极性:1 -1 B 0 0 V -1 0 0 0 -V B 0 0 V

5.小总结

所以说连续的4个0会因为两个V之前1个个数还有前一个数据的极性来进行确定:
分别有4种情况:

两个连续V之间的1个数————无极性数据————前一个bit的极性————带极性数据————
————偶数—————————(B00V)——————正————————( -B 0 0 -V)
————偶数—————————(B00V)——————负————————(+B 0 0 +V)
————奇数—————————(000V)——————正————————( 0 0 0 +V)
————奇数—————————(000V)——————负————————( 0 0 0 -V)

三、verilog编码设计

1.原始数据产生模块

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2025/09/24 21:07:39
// Design Name: 
// Module Name: raw_data_generate
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////
module raw_data_generate(
input           clk,
input           rst_n,
output  reg     raw_data,
output  reg     raw_data_vld
);
//data[14:0]:11 0000 1 0000 0000
reg [14:0]  data_reg;
reg [3:0]   data_count;
always @(posedge clk or negedge rst_n)begin
if(!rst_n)begin
data_reg <= 15'h61_00;
data_count <= 4'd0;
raw_data <= 1'b0;
raw_data_vld <= 1'b0;
end
else if(data_count<4'd14)begin
raw_data <= data_reg[14-data_count];
data_count <= data_count + 4'd1;
data_reg <= data_reg;
raw_data_vld <= 1'b1;
end
else begin
raw_data <= data_reg[14-data_count];
data_count <= 4'd0;
data_reg <= data_reg;
raw_data_vld <= 1'b1;
end
end
endmodule

在这里插入图片描述

2.V码插入

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2025/09/24 21:34:22
// Design Name: 
// Module Name: load_V
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////
module load_V(
input               clk,
input               rst_n,
input               raw_data,
input               raw_data_vld,
output  reg [1:0]   raw_data_V,
output  reg         raw_data_V_vld,
output  reg [3:0]   zero_count,
output  reg [3:0]   one_count
);
//reg [3:0]   zero_count;     //统计0的个数
//reg [3:0]   one_count;      //统计1的个数
always @(posedge clk or negedge rst_n)begin
if(!rst_n)begin
zero_count <= 4'd0;
one_count <= 4'd0;
end
else if(raw_data_vld)begin
if(!raw_data && zero_count<4'd3)begin
zero_count <= zero_count + 4'd1;
one_count <= 4'd0;
end
else if(!raw_data && zero_count==4'd3)begin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/920412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

很多大公司为什么禁止在SpringBoot项目中使用Tomcat?

前言 今天我们来聊聊一个很有意思的现象:为什么越来越多的大公司禁止SpringBoot项目使用默认的Tomcat,而强制要求使用Undertow? 有些小伙伴在工作中可能已经发现了这个趋势,但背后的原因你真的清楚吗? 一、Spring…

Java作业动手又动脑

一. 枚举定义 enum Size{SMALL,MEDIUM,LARGE}; 定义了包含三个枚举常量的Size枚举类型。 主要测试逻辑 引用比较测试 java Size s=Size.SMALL; Size t=Size.LARGE; System.out.println(s==t); // false 输出:false 原…

学做文案的网站网站内部代码优化

为什么IDEA要对Git进行更新操作的呢&#xff0c;因为当我们提交项目的时候我们必须要更新到最新的项目然后才能够使我们在提交项目的过程中不出现错误。 IDEA Git更新详细步骤 1 . 打开我们的IDEA &#xff0c;首先要确保我们已经从git里面clone项目到我们的IDEA里面。 2 . 当…

PHP 开发者必须掌握的基本 Linux 命令

PHP 开发者必须掌握的基本 Linux 命令 刚开始 PHP 开发时,我并没有特别的理由选择 Linux。既不是出于对开源软件的热情,也不是认为 Linux 比 macOS 或 Windows 更优秀。当时只是希望找到一个更轻量、更可定制的开发环…

维度网络网站建设建筑英才招聘网首页

在线题目链接&#xff1a;斐波那契数列 文章目录1、题目描述2、题目分析3、代码3.1 递归方法3.11 Java代码3.12 C代码3.2 动态规划3.21 Java代码3.22 C代码3.3 循环方法3.31 Java代码3.32 C代码4、总结1、题目描述 大家都知道斐波那契数列&#xff0c;现在要求输入一个整数n&a…

使用python写一个应用程序要求实现微软常用vc++功能排查与安装功能

import os import sys import subprocess import re import requests import tempfile import platform from bs4 import BeautifulSoup import winregclass VCRedistManager:def __init__(self):self.supported_versi…

网站建设尺寸规范网络营销策划案的形式

给AWS新账户做完了对等连接&#xff0c;因为默认VPC网段都冲突 就换了VPC&#xff0c;然后发现新VPC内创建的实例都没有分配公网IP地址&#xff0c;自动分配公网IP地址变成了禁用。后续建机子需要手动修改成启用太麻烦了。 在VPC里面找到编辑子网设置&#xff0c;勾上启用自动…

网站建设全网营销客户资源心理咨询网站后台

传统蜂窝网络一般基于特定接入技术并针对大规模公共网络设计&#xff0c;无法灵活适配小规模网络以及异构无线技术。本文介绍了Magma在构建低成本异构无线接入方面的探索。原文: Building Flexible, Low-Cost Wireless Access Networks With Magma 摘要 当今仍然有数十亿人受限…

网站内容更新教程泰安网站开发公司

1.三次握手的概述 我们在学网络的概念时&#xff0c;每当讲到TCP都会听到三次握手和四次挥手&#xff0c;一直以来可能都对这个概念模糊不清&#xff0c;那么什么是三次握手和四次挥手呢&#xff1f;简单的举一个例子&#xff0c;如果我们和朋友打游戏&#xff0c;我们要和朋友…

广西壮族自治区住房和城乡建设厅网站手机网站开发源码

目录 一、什么是sql注入 二、sql语句的执行流程 三、内连接和外连接的区别 四、Union和Union All 有什么区别 五、MySql如何取差集 六、DELETE和TRUNCATE有什么区别 七、count&#xff08;*&#xff09;和count&#xff08;1&#xff09;的区别 八、MyISAM和InnoDB的区…

详细介绍:MySQL零基础学习Day4——多表查询

详细介绍:MySQL零基础学习Day4——多表查询pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &quo…

MetaGPT实战指南:构建模拟公司运营的多智能体系统 - 教程

MetaGPT实战指南:构建模拟公司运营的多智能体系统 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

2017网站建设报价单营销论坛网站建设

引言 在计算机科学中&#xff0c;数据结构和算法是构建高效软件系统的基石。而排序算法作为算法领域的重要组成部分&#xff0c;一直在各种应用场景中发挥着关键作用。今天我们将聚焦于一种基于插入排序的改进版本——希尔排序&#xff08;Shell Sort&#xff09;&#xff0c;深…

Timeplus Enterprise 3.0 (Linux, macOS) - 流处理平台

Timeplus Enterprise 3.0 (Linux, macOS) - 流处理平台Timeplus Enterprise 3.0 (Linux, macOS) - 流处理平台 Revolutionize Streaming Analytics 请访问原文链接:https://sysin.org/blog/timeplus/ 查看最新版。原创…

《HelloGitHub》第 114 期

兴趣是最好的老师,HelloGitHub 让你对开源感兴趣!简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。github.com/521xueweihan/HelloGitHub这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖…

网站建设与准备乐清城市网官网

这阵子在捣鼓一个将游戏视频打包成本地可播放文件的模块。开始使用avi作为容器&#xff0c;弄了半天无奈avi对aac的支持实在有限&#xff0c;在播放时音视频时无法完美同步。 关于这点avi文档中有提到&#xff1a; For AAC, one RAW AAC frame usually spans over 1024 samples…

重庆网站推广网络推广申请建设部门网站的报告

大数据产业是以数据及数据所蕴含的信息价值为核心生产要素&#xff0c;通过数据技术、数据产品、数据服务等形式&#xff0c;使数据与信息价值在各行业经济活动中得到充分释放的赋能型产业。 大数据产业定义一般分为核心业态、关联业态、衍生业态三大业态。 一、专…

智能微电网 —— 如何无缝集成分布式光伏 / 风电? - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【鸿蒙生态共建】一文说清基础类型数据的非预期输入转换与兜底-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利 - 详解

【鸿蒙生态共建】一文说清基础类型数据的非预期输入转换与兜底-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利 - 详解2025-09-28 08:16 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: p…