基于FPGA,如何用Verilog HDL实现64位宽的扰码器?附上仿真结果。

文章目录

  • 前言
  • 一、扰码器
    • 1、什么是扰码器
    • 2、扰码的原理
    • 3、产生扰码的多项式
  • 二、Scrambler的Verilog实现
    • 1、scrambler.v
    • 2、scrambler_tb.v
  • 三、仿真结果
  • 四、总结

前言

在数字信号处理系统中,因为发送端的数字信号序列可能会出现很长一段都是“0”,或很长一段序列都是“1”的情况,这样会给接收端进行同步、定时信息的提取带来困难。这时,就需要用到扰码,阻止过长的“0”或“1”的出现。在接收端就需要用到解扰码,恢复出原始数据。

一、扰码器

1、什么是扰码器

扰码器,顾名思义就是能实现数字信号扰码处理功能的模块。扰码器的作用是:如果输入数字序列是短周期的,将会把该序列以某种规律扰乱为长周期,并且使输出序列中的过判决点接近bit数的一半,这样可以使得接收机更容易提取同步信息。

2、扰码的原理

不用增加冗余度就可以扰乱信号,改变数字信号的统计特性,它的原理是建立在反馈移位寄存器上的。
在这里插入图片描述

3、产生扰码的多项式

根据IEEE标准,采用的多项式为 x^58 +x^39 +1,根据反馈移位寄存器,也就是分别在58、39和1的位置的反馈抽头系数为1,其他都为0。

二、Scrambler的Verilog实现

1、scrambler.v

实现扰码器的程序如下:

module	scrambler(
use_scrambler, 	//开始使用扰码器
clk,			//时钟,本代码的时钟频率选择为50Mhz
reset,			
ena,			//使能信号
din,			//需要进行扰码的64位输入数据
dout			//经过扰码之后的64位输出数据
);parameter	WIDTH=32'd64;
input		use_scrambler;
input		clk;
input		reset;
input		ena;
input		[WIDTH-1:0]din;
output		[WIDTH-1:0]dout;
//以下都是进行扰码操作
reg			[57:0]scram_state; 
reg			[WIDTH-1:0]dout_r;
wire		[WIDTH+58-1:0]history;genvar	i;		//定义变量i,它不会被综合assign	history[57:0]=scram_state;
//利用generate语句生成64个并行的赋值语句,完成64位的每一位的更新
generate
for(i=58;i<WIDTH+58;i=i+1)begin: gen_historyassign	history[i]= history[i-58]^history[i-39]^ din[i-58];end
endgeneratealways @(posedge clk,posedge reset)
if(reset)begindout_r		<=0;scram_state	<=58'h3FF_FFFF_FFFF_FFFF;end
else if(ena)begindout_r		<=history[WIDTH+58-1:58];scram_state <= history[WIDTH+58-1:WIDTH];endassign	dout=(use_scrambler==1)?dout_r:din;endmodule	

2、scrambler_tb.v

tb文件如下:

module	scrambler_tb();
reg	use_scrambler;
reg	clk;
reg	reset;
reg	ena;
reg	[63:0]din;
wire	[63:0]dout;scrambler	inst0(
.use_scrambler(use_scrambler),
.clk(clk),
.reset(reset),
.ena(ena),
.din(din),
.dout(dout)
);initial clk=1;
always #10	clk=~clk;initial
begin
reset=0;
use_scrambler=0;
ena=0;
din=0;
#40;
reset=1;
#200;
reset=0;
#200;
use_scrambler=1;
din=64'h0101_1010_ffee_aabb;
#200;ena=1;
#20
ena=0;
#200;ena=1;
#20
ena=0;
#2000;
$stop;
endendmodule

三、仿真结果

本次仿真采用的是ModelSim 10.7进行的仿真,每次ena信号拉高,则scrambler执行一次加扰,dout就是加扰后的输出。如果在之后将解扰器直接连接该扰码器,则每拉高一次扰码器的使能信号,需要在下一个扰码器使能信号来之气,拉高解扰码器的使能信号,这样可以保证恢复出正确的原信号。具体可以参考我之后的文章。
基于FPGA,解扰码器Verilog的实现,以及扰码器与解扰码器的联合仿真。附上仿真结果。
仿真结果如下:
在这里插入图片描述

四、总结

本博客展示了基于Verilog实现的扰码器,根据IEEE标准,扰码器的多项式为 x^58 +x^39 +1。 仿真结果中,dout信号也得出了扰码之后的64位输出值,解扰码器会在下一篇文章中给出,并进行扰码器与解码器的联合仿真,仿真结果显示可以恢复出正确的原始信号。
具体有什么问题,欢迎评论区讨论。

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

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

相关文章

基于FPGA,解扰码器Verilog的实现,以及扰码器与解扰码器的联合仿真。附上仿真结果。

文章目录前言一、扰码器二、解扰码器三、Descrambler的Verilog实现1、descrambler.v2、descrambler_tb.v四、扰码器与解扰码器的联合仿真1、scrambler_test.v2、scrambler_test_tb.v3、联合仿真结果五、总结前言 在数字信号处理系统中&#xff0c;因为发送端的数字信号序列可能…

光纤通信系统简介

文章目录前言一、直接检测光通信系统二、相干光通信系统三、直接检测与相干检测1、直接检测2、相干检测3、相干检测的优缺点&#xff08;1&#xff09;相干检测的缺点&#xff08;2&#xff09;相干检测的优点总结参考文献前言 光通信系统的基本组成结构如下图所示。光通信系统…

epyc rome_使用Encog,ROME,JSoup和Google Guava进行博客分类

epyc rome继续进行编程收集情报 &#xff08; Programming Collection Intelligence &#xff0c;PCI&#xff09;&#xff0c;下一个练习是使用距离得分根据相关博客中使用的单词来确定博客列表。 我已经找到Encog作为AI /机器学习算法的框架&#xff0c;为此&#xff0c;我需…

重构字符串型系统

去年&#xff0c;我加入了一个项目&#xff0c;该项目接管了另一个未能满足客户需求的软件公司。 如您所知&#xff0c;在“继承”的项目及其代码库中&#xff0c;有许多事情可以并且应该加以改进。 可悲的是&#xff08;但并不奇怪&#xff09;领域模型就是这样一个孤零零&…

OFDM仿真程序,可直接运行,注释详细(没人注释比我还详细了)

OFDM仿真程序 clc clear allIFFT_bin_length128; %IFFT点数128个 carrier_count50; %子信道&#xff08;子载波&#xff09;数目 bits_per_symbol2; %4进制符号 symbols_per_carrier200;%每个子信道或者说子载波有200个符号 SNR0:1:40; for num1:41baseband_out_lengthcarrie…

Delta-Sigma调制(DSM)技术

前言 数字信号处理和通信系统的性能很大程度上受到了模拟信号到数字信号转换接口——ADC的精度和分辨率的限制。而传统的线性脉冲编码调制&#xff08;PCM&#xff09;ADC受到了制造工艺的限制&#xff0c;无法达到很高的分辨率。但基于Delta-Sigma调制技术的ADC可以在现有工艺…

无载波幅度和相位调制(CAP)与QAM调制的详细解析(可见光通信应用场景),以及CAP matlab程序下载链接

文章目录前言一、QAM调制&#xff1f;二、无载波幅度和相位调制&#xff08;CAP)三、CAP调制与QAM调制之间的联系&#xff08;异同点&#xff09;四、CAP调制相比于QAM调制的优缺点4.1、优点4.2、缺点五、无载波幅度和相位调制matlab程序五、Reference前言 目前的通信系统中&a…

jpa 事务嵌套事务_JPA 2 | EntityManagers,事务及其周围的一切

jpa 事务嵌套事务介绍 对我来说&#xff0c;最令人困惑和不清楚的事情之一是&#xff0c;作为Java开发人员&#xff0c;一直是围绕事务管理的谜团&#xff0c;尤其是JPA如何处理事务管理。 事务什么时候开始&#xff0c;什么时候结束&#xff0c;实体的持久化方式&#xff0c;持…

Matlab中装载和存储实验数据的操作

一、装载实验数据 例如&#xff0c;以下程序&#xff0c;其中path是路径&#xff0c;strcat函数将后面的参数组合成一个字符串。load函数将由twoband_CAP4_400MBd_2000MSa_float_字符串与Tx.txt构成的: twoband_CAP4_400MBd_2000MSa_float_Tx.txt文件读取至matlab中。 numSam…

无服务器革命:好,坏和丑

“这是愚蠢的。 比愚蠢还糟&#xff1a;这是一场营销炒作。” ‐ 理查德斯托曼 &#xff08; Richard Stallman&#xff09;对云计算的评论&#xff0c;2008年9月 而且&#xff0c;十年后&#xff0c;当有人提到这个词时&#xff0c;您开始三思而后行&#xff1a;是到天上掉的…

MATLAB中,信号的频谱图该怎么绘制?横坐标如何标注出频率值?

一、什么是频谱&#xff1f; 频谱的全称是频率谱密度。在对时域信号进行认识和研究的过程中非常不便&#xff0c;那我们该如何更直观地认识信号&#xff0c;更清楚地了解信号的特点呢&#xff1f; 利用傅里叶变换将时域信号变换到频域。 我们知道&#xff0c;在通信领域里傅…

Verilog HDL中模块参数传递的方法

文章目录前言一、参数传递二、参数传递方法1.方法一2.方法二3.方法三总结前言 “parameter”是Verilog HDL中的一个关键字&#xff0c;代表着参数型常量&#xff0c;即用parameter来定义一个标识符代表一个常量&#xff0c;这样可以提高程序的可读性与可维护性。 例如&#xf…

仔细看看_仔细看看,您会发现需要改进的地方

仔细看看我建议您做一个练习&#xff1a;明天早上返回工作时&#xff0c;浏览项目的源代码&#xff0c;并尝试寻找重构的机会。 即使老板没有要求也要这样做。 这样做是因为您想要一些激动人心的工作时间。 重构是改变已经可以正常工作的艺术 。 但是要进行重构&#xff0c;您…

Verilog HDL中位运算符、逻辑运算符和缩减运算符的区别

文章目录前言一、单目运算符、双目运算符和三目运算符二、位运算符三、逻辑运算符四、缩减运算符五、总结前言 我们在学习和理解Verilog HDL中的一些运算符的意义时&#xff0c;可能会对一些运算符的使用产生混乱&#xff0c;因此本文整理了Verilog HDL中&与&&、|…

Verilog HDL中容易生成锁存器的两种情况

在Verilog HDL的程序设计中&#xff0c;有两种情况会生成锁存器。 第一种情况 在always块中使用if语句&#xff0c;但是没有else&#xff0c;这会导致当条件不成立时&#xff0c;没有其他语句可执行&#xff0c;使得被赋值的寄存器一直保持不变&#xff0c;”锁存“住。 第二…

Spring Security与Maven教程

1.简介 在这篇文章中&#xff0c;我们将演示如何针对非常特定的用例将Maven依赖项用于Spring Security。 我们使用的所有库的最新版本都可以在Maven Central上找到。 在项目中&#xff0c;了解Maven依赖项的工作方式和管理方式对于有效的构建周期非常重要&#xff0c;并且对于…

EbN0、SNR、0.1nmOSNR的区别与联系

文章目录前言一、SNR与EbN0二、0.1nmOSNR1、波长宽度与带宽的换算2、0.1nmOSNR2.1、单极化信号2.2、双极化信号总结前言 无论是无线通信、光通信或者可见光通信系统中&#xff0c;我们经常会遇到信噪比的概念&#xff0c;但大多数&#xff0c;我们用的都是信号与噪声功率比&am…

利用Verilog HDL实现序列检测器,附上仿真程序。

文章目录一、序列检测器二、状态转移图三、序列检测器Verilog HDL程序1、源程序2、测试平台程序四、仿真结果五、总结一、序列检测器 序列检测器的逻辑功能就是将一个指定的比特序列从一串较长的比特流中识别出来。 例如&#xff1a;针对一个较长的比特流01001001001111010101…

在Java中使用Google的协议缓冲区

最近发布了 有效的Java第三版 &#xff0c;我一直对确定此类Java开发书籍的更新感兴趣&#xff0c;该书籍的最新版本仅通过Java 6进行了介绍 。 在此版本中&#xff0c;显然有与Java 7 &#xff0c; Java 8和Java 9密切相关的全新项目&#xff0c;例如第7章&#xff08;“ Lamb…

不同阶QAM调制星座图中,符号能量的归一化计算原理

文章目录前言一、归一化能量计算原理二、Matlab中如何得到归一化能量符号总结前言 在基于QAM调制的matlab仿真程序中&#xff0c;我们通常会产生二进制比特流&#xff0c;并最终映射成QAM符号&#xff0c;该符号大都是格雷编码的。在坐标系中&#xff0c;相邻符号之间的横纵坐…