上一篇介绍了帧同步字检测、数字相关器的一些基本概念,并设计了一种简化模型的数字相关器(异或单元+累加器)。本文将完成经典结构(移位寄存器+乘法器+累加器)的数字相关器的设计。


MATLAB设计

假设一帧包含1500个字节,前165个为帧同步字,后1350个为信息码元。由上一篇知数字相关器的经典结构如下:

延时线取值为采样时钟与数据码元时钟的倍数。在MATLAB中生成随机测试数据,进行算法仿真,完整MATLAB代码如下:

clc; clear; close all;load('data.mat');      %导入帧同步头din,165点
din = din/max(din);
din_s = fliplr(din);%生成测试数据
x = rand(1, 5340);
x = x*2-1;
x = [din_s,x(1:1335),din_s,x(1336:2670),din_s,x(2671:4005),din_s,x(4006:5340)];
%x = [(1:6000)',x'];
y = zeros(1,165);
res = zeros(1,5835);
for i = 1 : length(x)-165for j = 1 : 165y(j) = x(j+i-1)*din_s(j); endres(i) = sum(y);
end
plot(res);

仿真结果如下:

可以明显看到检测结果中的相关峰。


FPGA设计

在Vivado中完成算法设计及仿真。设计中需要两组寄存器,一组寄存器用来存储本地帧同步字;一组165点长的移位寄存器存储输入码元。帧同步字的存储很简单,直接赋值即可。移位寄存器部分的代码如下:

//------------------------------------------------------
//   输入数据移位寄存器
//------------------------------------------------------
reg signed [7:0] a [164:0];
integer i,j;always @ (posedge clk or negedge rst_n)if (!rst_n) beginfor (i=0; i<165; i=i+1)a[i] <= 'd0;endelse beginfor (j=0; j<164; j=j+1)a[j+1] <= a[j];a[0] <= din;end

接下来是乘法器部分设计,采用全并行,需要165个乘法器同时对165点数据进行计算,乘法器配置为3级流水。如果一个一个实例化实在麻烦,可以用Verilog提供的generate语法实现批量实例化,代码如下:

//---------------------------------------------------------------------
//   相关运算
//---------------------------------------------------------------------
genvar gv_i;
wire signed [15:0] y [164:0];
generatefor (gv_i = 0; gv_i < 165; gv_i = gv_i+1) begin : ins0mult your_instance_name (.CLK(clk),  // input wire CLK.A(a[164-gv_i]),      // input wire [7 : 0] A.B(b[gv_i]),      // input wire [7 : 0] B.P(y[gv_i])      // output wire [15 : 0] P);end
endgenerate

以上便完成了165个乘法器的实例化。最后是累加器,累加器可以使用像上一篇一样的多级累加设计方法,这样做的好处是整个数据流程受设计者的控制。但是这样也需要像实例化乘法器一样实例化大量的加法器。其实如果直接在一个语句中将所有的乘法器结果相加,Vivado的综合器也可以将其综合为多级累加的结果,只不过从代码上看这种结构并不直观。

测试数据由MATLAB生成并存储到txt文件,在testbench中读取。Vivado中仿真结果如下:

可以明显看到其中的相关峰。系统时钟约束为500MHz(K7410的芯片),综合后时序分析报告如下,完全满足:


System Generator设计

System Generator的设计方法可以参考博主的《学会System Generator系列》。模型的部分结构如下图所示(完整的图太大):

延迟线便相当于移位寄存器,与本地帧同步字乘法结果送入多级累加器。仿真结果如下:

可以明显看到其中的相关峰。系统时钟设置为500MHz(k7410的芯片)。到处HDL模型。综合后时序分析结果如下:

最大路径延迟为1.326ns,时序完全满足。综合后的资源分析结果如下:

本文使用Vivado和System Generator两种设计方法完成了同样的设计,且仿真结果相同。实际中只需要选择一种即可,而且System Generator可以将设计以IP核的形式导出,供其它工程调用。

FPGA数字信号处理(25)数字相关器设计(经典结构)相关推荐

  1. MATLAB_数字信号处理_模拟滤波器_设计巴特沃斯滤波器

    简介 巴特沃斯滤波器-百度百科 巴特沃斯滤波器-维基百科 简介:巴特沃斯滤波器是一种模拟滤波器,它在频率响应方面具有特殊的属性.它被设计为具有均匀的幅度响应,即在通带内,它对所有频率的增益是相等的,而 ...

  2. rbw数字信号处理_数字信号处理与模拟IC设计

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区. 您需要 登录 才可以下载或查看,没有帐号?注册 x 本帖最后由 血荐轩辕HIT 于 2019-12-15 23:38 编辑 信号与系统.数字信 ...

  3. 基于MATLAB的数字信号处理(4) IIR数字滤波器设计及软件实现

    文章目录 一.实验目的 二.实验原理 三.设计IIR数字滤波器 一.实验目的 熟悉用双线性变换法设计 IIR 数字滤波器的原理与方法 学会调用 MATLAB 信号处理工具箱中滤波器设计函数(或滤波器设 ...

  4. 数字信号处理——巴特沃斯滤波器设计

    设计思路 这里采用间接法设计数字滤波器(先设计模拟滤波器再设计数字滤波器) 滤波器理解: 1.数字滤波器可以用H(z),h(n)or系统差分方程来表示,对应的就是一个系统,信号输入该系统即可改变其所含 ...

  5. 数字信号处理——FFT运算模块设计(1)

    目录 引言 FFT理论 基2 DIT-FFT 算法 基于FPGA的设计方法分析 数据存储分析

  6. Matlab | 数字信号处理:双线性变换法设计IIR数字滤波器

    ========================================== 博主github:https://github.com/MichaelBeechan 博主CSDN:https:/ ...

  7. 【python数字信号处理】——scipy库设计滤波器(IIR为例)、绘制滤波器频谱响应、IIR滤波器滤波、读写wav音频文件

    目录 一.参考文献 1.scipy接口 2.scipy库介绍+IIR滤波器设计(含GUI)+绘制频谱响应

  8. 数字信号处理——FFT运算模块设计(2)

    目录 引言 设计 验证 引言 蝶形运算是FFT 运算单元的基本结构,本文就主要实现FFT蝶形运算(基2DIT-FFT)模块的功能,并进行验证. 设计 直接上代码,废话就不多了,注释我写的很详细~~ 有 ...

  9. 数字信号处理——FFT运算模块设计(3)

    目录 引言 基2 DIF-FFT原理 SDF 结构 时序图 参考说明 引言 前面的两篇文章介绍了基于DIT-FFT原位运算的原理和处理思路,并给出了基2DIT-FFT算法蝶形运算的实现源代码.但是顺序 ...

  10. 【数字信号处理】数字信号处理简介 ( 抽样定理 | 多抽样率 )

    文章目录 一.DSP 知识领域 二.抽样定理 三.多抽样率 一.DSP 知识领域 DSP 领域组成 : 信号采集 : A/D 采样 , 抽样定理 , 多抽样率 , 量化噪声分析 ; 离散时间信号分析 ...

最新文章

  1. SAP中各种分摊分配方法
  2. 云炬Android开发教程 查看android studio版本
  3. ASP.NET MVC动态加载数据
  4. C# - 为引用类型重定义相等性 - 继承相关
  5. druid最大连接数oracle,性能超过DRUID的最强数据库连接池——HikariCP相关配置及简单示例...
  6. 2012浙大878计算机专业基础综合大题答案解析
  7. LeetCode 96.不同的二叉搜索树(卡特兰数)
  8. 一文包教会 Python打包.py文件成exe文件发给自己的好友
  9. [渝粤教育] 中国地质大学 职业健康管理体系 复习题
  10. NGINX反向代理部署
  11. 自动化企业人才如何定位?
  12. 利用matlab将位图转为SVG矢量图
  13. Flutter开发之——动画-Lottie
  14. cass有坐标文件生成里程文件_南方CASS里程文件生成
  15. flutter学习笔记之Dart-8 问号、双问号、感叹号的理解
  16. 软件开发中什么是CI/CD
  17. A1,A2,A3,A4纸的尺寸
  18. 蘑菇街 App 的组件化之路
  19. 新Android病毒出现 自动下载且无法卸载
  20. matlab输出李萨育图形,李萨如图形的详解与应用

热门文章

  1. Python基础学习:类语法规则
  2. 罗切斯特计算机官网,罗切斯特
  3. 【弹吉他必备的乐理知识】【2】节拍
  4. MATLAB 输入输出文件
  5. 16_ZYNQ7020开发板gpio输入实验
  6. 三、基本CRUD操作
  7. IDEA中配置数据库连接
  8. windows在此计算机上找不到系统映象,Win7下打开程序提示应用程序或dll 为无效的windows映像怎么办...
  9. 深度优先与广度优先的区别!
  10. 『NLP学习笔记』HugeGraph套件安装与使用指南