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

文章目录

  • 前言
  • 一、扰码器
  • 二、解扰码器
  • 三、Descrambler的Verilog实现
    • 1、descrambler.v
    • 2、descrambler_tb.v
  • 四、扰码器与解扰码器的联合仿真
    • 1、scrambler_test.v
    • 2、scrambler_test_tb.v
    • 3、联合仿真结果
  • 五、总结

前言

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

一、扰码器

关于扰码器,请查看我上一篇博文。
基于FPGA,如何用Verilog HDL实现64位宽的扰码器?附上仿真结果。

二、解扰码器

解扰码器就是将已经经过扰码操作的数字信号序列恢复成原始数字信号序列的模块。

三、Descrambler的Verilog实现

1、descrambler.v

module	descrambler(
use_descrambler	,		//开始使用解扰码器
clk,				
reset,			
ena_d,					//解扰码器的时钟信号
din_d,					//解扰码器的输入,可以直接连到扰码器的输出端
dout_d					//解扰码器的输出
);parameter		WIDTH=32'd64;//64位的数据input		use_descrambler;
input		clk;
input		reset;
input		ena_d;
input		[WIDTH-1:0]din_d;
output		[WIDTH-1:0]dout_d;reg			[57:0]scram_state;
wire		[WIDTH-1:0]dout_w;
reg			[WIDTH-1:0]dout_r;wire		[WIDTH+58-1:0]history;
assign		history={din_d,scram_state};
//定义变量i,用于在generate中的循环,i不会被综合
genvar	i;
//产生并行的赋值块,完成对64位值的更新
generate
for(i=0;i<WIDTH;i=i+1)begin: gen_historyassign dout_w[i]= history[58+i-58]^history[58+i-39]^ history[58+i];end
endgeneratealways @(posedge clk,posedge reset)
if(reset)beginscram_state		<=58'h3FF_FFFF_FFFF_FFFF;dout_r			<=0;end
else if(ena_d)begindout_r			<=dout_w;scram_state		<=history[WIDTH+58-1:WIDTH];endassign		dout_d=use_descrambler?dout_r:din_d;
endmodule

2、descrambler_tb.v

`timescale 1ns/1ns
module	descrambler_tb();
reg		use_descrambler;
reg		clk;
reg		reset;
reg		ena_d;
reg		[63:0]din_d;
wire	[63:0]dout_d;descrambler	inst0(
.use_descrambler(use_descrambler),
.clk(clk),
.reset(reset),
.ena_d(ena_d),
.din_d(din_d),
.dout_d(dout_d)
);initial clk=1;
always #10	clk=~clk;initial
begin
reset=0;
use_descrambler=0;
ena_d=0;
din_d=0;
#20;
reset=1;
#200;
reset=0;
use_descrambler=1;
din_d=64'h19AB_B210_FFEE_AABB;
#200;
ena_d=1;
#20;
ena_d=0;
#1000;
$stop;
endendmodule

四、扰码器与解扰码器的联合仿真

为了更清晰地表示扰码器与解扰码器模块功能正确,本博文单独做了一个联合仿真来验证扰码器与解扰码器的功能,所以解扰码器的仿真就没有单独列出来了。

1、scrambler_test.v

将扰码器与解扰码模块例化到顶层文件scrambler_test中,具体的逻辑实现如下:

module	scrambler_test(
clk,
reset,
ena,
ena_d,
use_scrambler,
use_descrambler,
din,
dout,
dout_d
);input		clk;
input		reset;
input		ena;
input		ena_d;
input		use_scrambler;
input		use_descrambler;
input		[63:0]din;
output		[63:0]dout;
output		[63:0]dout_d;scrambler	inst_s(   //扰码器模块
.use_scrambler(use_scrambler),
.clk(clk),
.reset(reset),
.ena(ena),
.din(din),
.dout(dout)
);descrambler	inst_d(		//解扰码器模块
.use_descrambler(use_descrambler),
.clk(clk),
.reset(reset),
.ena_d(ena_d),
.din_d(dout),
.dout_d(dout_d)
);endmodule

2、scrambler_test_tb.v

测试平台中,进行了两次的测试,将输入数据进行了一次改变,之后仍然可以恢复出原始数据。

`timescale 1ns/1ns
module	scrambler_test_tb();
reg		clk;
reg		reset;
reg		ena;
reg		ena_d;
reg		use_scrambler;
reg		use_descrambler;
reg		[63:0]din;
wire	[63:0]dout;
wire	[63:0]dout_d;scrambler_test	inst0(
.clk(clk),
.reset(reset),
.ena(ena),
.ena_d(ena_d),
.use_scrambler(use_scrambler),
.use_descrambler(use_descrambler),
.din(din),
.dout(dout),
.dout_d(dout_d)
);initial clk=1;
always #10 clk=~clk;initial
begin
reset=0;
ena=0;
ena_d=0;
use_scrambler=0;
use_descrambler=0;
din=0;
#200;
reset=1;
#200;
reset=0;
use_scrambler=1;
use_descrambler=1;
din=64'h0101_1010_FFEE_AABB; //第一个输入数据
#200;
ena=1;
#20;
ena=0;
#200;
ena_d=1;
#20;
ena_d=0;
#200;
din=64'h9988_0011_1100_8899; //数据更改,第二个输入数据
#200;
ena=1;
#20;
ena=0;
#200;
ena_d=1;
#20;
ena_d=0;
#200;
#2000;//ena=1;
//#20;
//ena=0;
//#2000;
//ena_d=1;
//#20;
//ena_d=0;
//#2000;
$stop;
endendmodule

3、联合仿真结果

本次联合仿真采用的是ModelSim 10.7仿真平台,原始的输入信号首先是64’h0101_1010_FFEE_AABB,之后变成另一个原始信号64’h9988_0011_1100_8899,仿真结果显示,经过扰码器和解扰码器后,原始序列可以正确恢复。具体的仿真结果如下:
在这里插入图片描述
其中,din信号时扰码器的输入端,dout信号是扰码器的输出端,而dout_d是解扰码器的输出端。

五、总结

本博文,首先介绍了什么是解扰码器,并给出了解扰码器的实现代码,为了更清晰的说明扰码器与解扰码器模块的功能,本博文进行了联合仿真,仿真结果显示,经过扰码器与解扰码器后,原始信号可以正确的恢复。

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

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

相关文章

光纤通信系统简介

文章目录前言一、直接检测光通信系统二、相干光通信系统三、直接检测与相干检测1、直接检测2、相干检测3、相干检测的优缺点&#xff08;1&#xff09;相干检测的缺点&#xff08;2&#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…

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

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

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

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

Spring Security与Maven教程

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

利用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;相邻符号之间的横纵坐…

4qam、16qam、64qam、256qam理论仿真曲线

本博文给出了4qam、16qam、64qam、256qam理论仿真曲线&#xff0c;画出了EbN0 vs BER的曲线图&#xff0c;可以作为大家学习的一个参考。 仿真结果: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Theoretical ber curves of different orde…

建立时间、保持时间与亚稳态

文章目录一、建立时间与保持时间二、亚稳态现象总结一、建立时间与保持时间 建立时间&#xff08;set up time&#xff09;是指在触发器的时钟信号上升沿到来以前&#xff0c;数据从不稳定到稳定所需要的时间&#xff0c;一般用TsuT_{su}Tsu​表示。 保持时间是指在触发器的时…

java ee空指针_Java EE 7是最终版本。 思想,见解和进一步的指针。

java ee空指针我们花了不到三年的时间才推出了下一个Java EE版本 。 今年4月16日&#xff0c; JCP EC对JSR 342进行了投票并获得批准。 这是一个成功的故事&#xff0c;因为在去年八月下旬的最后时刻撤消了拥有云就绪平台的最初想法。 作为EG的成员&#xff0c;撰写即将发布的功…

Java可能使用UTF-8作为其默认字符集

由于基于Java的应用程序通常用于各种各样的操作系统和环境中&#xff0c;因此Java开发人员经常会遇到与基于字符的输入和输出有关的问题 。 涉及这些问题的博客文章包括《警察的恐怖&#xff1a;默认语言环境&#xff0c;默认字符集和默认时区》 &#xff1b; 注释JDK默认数据 …

2020-08-07 光纤通信第二章知识点整理

目录 2.1 半导体激光器 2 2.1.1 激光原理的基础知识 2 2.1.2 激光激射条件 3 2.1.3 结构理论 4 2.1.4 典型分类 6 2.1.5 模式概念 7 2&#xff0e;1.6 基本性质 8 2.2 半导体发光二极管 10 2.2.1 工作原理 10 2.2.2 结构和分类 10 2.2.3 主要性质 10 2.3 光源的直接调制 11 2.3…

静态分析的教育方面

加入我们项目的新程序员经常会问我们是否具有自动格式化工具&#xff0c;以使Java代码看起来完全符合Qulice的期望。 &#xff08;Quili是我们使用的静态分析器。&#xff09;我总是回答说&#xff0c;拥有这样一个自动代码抛光器只会有害&#xff0c;不会帮助项目及其成员改进…

2020-08-14 光纤通信第三章知识点整理

目录 3.1 光接收机 2 3.1.1 光接收机的分类与性能指标 2 3.1.2 直接检测光接收机的构成及功能 2 3.2 光电检测器 3 3.2.1 PN结的光电效应 4 3.2.2 PIN光电二极管 4 3.2.3 雪崩光电二极管&#xff08;APD&#xff09; 6 3.3 放大电路及其噪声 7 3.3.1 噪声的数学处理 8 3.3.2 放…

2020-08-21 光纤通信第四章知识点整理

第四章 光纤通信系统 目录 4.1 模拟光纤通信 2 4.2 数字光纤通信系统和总体设计 3 4.2.1 数字光纤通信系统基本组成 3 4.2.2 数字光纤通信系统总体设计 4 4.3 数字光纤传输系统的性能指标 7 4.3.1 误码性能 7 4.3.2 抖动、漂移性能 8 4.3.3 可用性 8 4.4 光纤放大器及其在光纤通…

2020-08-24 光纤通信第五章知识点整理

第五章 无源光器件和WDM技术 目录 5.1 无源器件的几个常用性能参数 1 5.2 光纤和波导型无源光器件 2 5.2.1 光连接器和光耦合器 2 5.2.2 偏振控制器 3 5.2.3 光纤布拉格光栅 4 5.2.4 Mach-Zahnder滤波器 5 5.2.5 非线性环路镜 5 5.3 光学无源器件 6 5.3.1 偏振分束器 6 5.3.2 光…

使用Java 9向Javadoc搜索添加术语

有一个相对较旧的网页&#xff0c;称为“ Proposed Javadoc Tags ”&#xff0c;最初似乎是与Javadoc 1.2一起编写的&#xff0c;其中列出了“ Sun有朝一日可能会在Javadoc中实现的标签”。 在此列表中的标签是category &#xff0c; example &#xff0c; tutorial &#xff0…