前言

  HLS 是Xilinx推出的高层次综合工具,可以用来加速算法的设计。我在之前,用这玩意儿做了些简单的图像算法的处理的,感觉还是比手撸Verilog代码要来的快一点,正好现在在学习数字信号处理,先拿HLS来进行一些简单的算法验证还是可以的。

1 使用HLS生成正余弦波形

1.1 使用matlab产生ram 中存储的波形数据

  产生正余弦信号的波形,其中采样频率40MHz,正余弦的频率为1.25MHz。生成将一个周期内的正余弦数据进行保存。

clear all; close all; clc;
Fs = 40*10^6;   %采样频率
Fcarrier = 1.25*10^6;   %载波速率
Fsymbol = 100*19^3;    %符号速率t = 0 : Fcarrier/Fs : 1 - Fcarrier/Fs; % 一个周期内的的信号
y1 = 255*sin(2*pi*t);
y2 = 255*cos(2*pi*t);
y1 = round(y1);
y2 = round(y2);
fid = fopen('./rom.txt', 'w+');     %打开一个文件并写入
fprintf(fid, '%d ,', y1);
fprintf(fid, '\r\n');
fprintf(fid, '%d ,', y2);subplot(211);plot(t,y1);title('正弦信号');
subplot(212);plot(t,y2);title('余弦信号');

2 HLS中完成信号的产生

  先把套路搞起来,HLS的主要步骤就是 C仿真,C综合,C-RTL的联合仿真

C仿真就是对C代码进行仿真,比如自己写了一个C的算法函数的实现,可以先给一个C的激励,来测试算法是否正确。C仿真通过后,就可以进行C综合。
C综合就是把C代码通过在HLS添加约束,最终能够对应上FPGA内部的资源。同时能够生成电路上对应的接口。
C-RTL cosimulation就是通过C仿真的代码,和RTL电路进行联合的仿真。这个过程,就和在FPGA开发中进行仿真是类似的。

  首先搞个头文件,这里面引入比较重要的数据类型 ap_int.h 这个头文件。在C/C++当中,存储数据都是以字节为单位的,因此,一个数据最少就需要使用8bit来表示。在FPGA中,可以对这个进行更加灵活的表示,位宽可以是任意的,这个 “ap_int.h” 就是这么一个可以自定义位宽的头文件。通过模板的形式,传递模板参数,生成不同的数据类型。

2.1 头文件

#ifndef __ASK_TX_H_
#define __ASK_TX_H_#include "ap_int.h"void ask_mod(ap_uint<1> symbol, ap_int<16> *sin, ap_int<16> *cos);#endif

2.2 实现文件

  这个实现的文件,就是实现整个算法模块的主要部分。通过HLS的directive,添加对应的约束,可以调节接口的类型,时序的优化,内部资源的占用等等。。。

#include "tx_ask.h"void ask_mod(ap_uint<1> symbol, ap_int<16> *sin, ap_int<16> *cos)
{#pragma HLS PIPELINE II=1
#pragma HLS INTERFACE ap_ctrl_none port=return
#pragma HLS INTERFACE axis register both port=cos
#pragma HLS INTERFACE axis register both port=sin
#pragma HLS INTERFACE axis register both port=symbol// counter for lookup tablestatic ap_int<8> counter = 0;// lut store the waveap_int<16> sin_table[32] = {0 ,50 ,98 ,142 ,180 ,212 ,236 ,250 ,255 ,250 ,236 ,212 ,180 ,142 ,98 ,50 ,0 ,-50 ,-98 ,-142 ,-180 ,-212 ,-236 ,-250 ,-255 ,-250 ,-236 ,-212 ,-180 ,-142 ,-98 ,-50 };
#pragma HLS RESOURCE variable=sin_table core=ROM_1P_BRAM latency=1ap_int<16> cos_table[32] = {255 ,250 ,236 ,212 ,180 ,142 ,98 ,50 ,0 ,-50 ,-98 ,-142 ,-180 ,-212 ,-236 ,-250 ,-255 ,-250 ,-236 ,-212 ,-180 ,-142 ,-98 ,-50 ,0 ,50 ,98 ,142 ,180 ,212 ,236 ,250 };
#pragma HLS RESOURCE variable=cos_table core=ROM_1P_BRAM latency=1if(symbol == 1){*sin = sin_table[counter.range(4, 0)];*cos = cos_table[counter.range(4, 0)];}else{*sin = 0;*cos = 0;}// counter self increasecounter += 1;// clear the counterif(counter == 32){counter = 0;}
}

2.3 仿个真

  仿真比较简单啊,就是产生一些符号,然后调用前面的函数,实现不同波形的输出。

#include "tx_ask.h"int main()
{ap_uint<1> symbol[64] = {0, 1, 1, 0, 0, 0, 1, 1,0, 1, 1, 0, 0, 0, 1, 1,0, 1, 1, 0, 0, 0, 1, 1,0, 1, 1, 0, 0, 0, 1, 1,0, 1, 1, 0, 0, 0, 1, 1,0, 1, 1, 0, 0, 0, 1, 1,0, 1, 1, 0, 0, 0, 1, 1,0, 1, 1, 0, 0, 0, 1, 1,};ap_int<16> sin, cos;for(int i = 0; i < 64; i ++){for(int j = 0; j < 400; j ++){ask_mod(symbol[i], &sin, &cos);}}return 0;
}

3 结果

  最后就可以把仿真的结果拿出来看一看。

  可以看到,当符号为1的时候,就产生了正余弦波形,为0的时候,就没有正余弦产生。其实这个就有点ASK调制那味儿了。
  可以看到,这里就产生了这么两个正余弦信号。去观察这个正余弦信号的话,可以发现他们的频率是1.25M

FPGA数字信号处理基础----使用HLS生成信号相关推荐

  1. FPGA数字信号处理基础----AD936x接口

    前言   AD9361是一个集成度很高的通信芯片,使用这个芯片能够方便快速地完成通信相关的设计.下图是ad936x的整体的结构框图,整体上看,可以将ad9363分为数字端接口和模拟端接口,还有内部的本 ...

  2. 新书预告:Xilix FPGA数字信号处理设计——基础版

    掌握FPGA数字信号处理设计需满足三个条件:熟悉FPGA设计方法.理解数字信号处理理论.掌握理论的工程实现方法.对初学者来讲,每个条件看似都难以逾越.杜勇老师完美融合课程教学与工程设计的需求特点,以独 ...

  3. FPGA数字信号处理:通信类I/Q信号及产生

    FPGA数字信号处理:通信类I/Q信号及产生 大侠好,"宁夏李治廷"再一次和各位见面了,今天给各位大侠分享在FPGA数字信号处理中通信类I/Q信号及产生. 欢迎各位大侠一起切磋交流 ...

  4. (4)FPGA面试技能提升篇(数字信号处理基础)

    1.1 FPGA面试技能提升篇4(数字信号处理基础) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试技能提升篇4(数字信号处理基础): 5)结束语. 1.1 ...

  5. 2021-03-18新书《Xilinx FPGA数字信号处理设计——基础版》已上市

    特别说明:杜勇老师的新书<Xilinx FPGA数字信号处理设计--基础版>已上市,亲们可在各售书网站选购.新书的配套板载程序均可直接在CXD301平台上验证.凡购买CXD301开发板的亲 ...

  6. FPGA数字信号处理(1)- AM调制的FPGA实现

    FPGA数字信号处理(1)-AM调制的实现 一:前言 本内容分享为本人自学经历.受限于作者水平可能有不准确的地方.欢迎诸位批评指正. 分享的文章需要一些基本的FPGA开发基础 二:概述 这部分简单,但 ...

  7. FPGA数字信号处理(四)Quartus FIR IP核实现

    该篇是FPGA数字信号处理的第四篇,选题为DSP系统中极其常用的FIR滤波器.本文将在前两篇的基础上,继续介绍在Quartus开发环境下使用Altera(或者叫Intel)提供的FIR IP核进行FI ...

  8. FPGA数字信号处理(三)串行FIR滤波器Verilog设计

    该篇是FPGA数字信号处理的第三篇,选题为DSP系统中极其常用的FIR滤波器.本文将在上一篇"FPGA数字信号处理(二)并行FIR滤波器Verilog设计" https://blo ...

  9. FPGA数字信号处理(一)数字混频(NCO与DDS的使用)

    这是数字信号处理系列的第一篇,以简单的数字混频为例,介绍在FPGA程序设计中很重要的二进制原码.补码:有符号数.无符号数的问题.本文不是像课本那样介绍这些基础概念,而是介绍很实际的设计方法. 借助于数 ...

  10. 数字信号处理基础----FM的调制与解调

    1. FM调制与解调的数学原理 1.1 FM调制中的常用指标   FM是模拟调制中的一种,也就是频率调制.就是把基带信号用载波的频率来承载.直接的表现方式是调角,也是一种非线性调制.   角度调制时, ...

最新文章

  1. Shutil.move PermissionError: [WinError 82] 无法创建目录或文件,以及PermissionError: [Errno 13] Permission denied
  2. java2实用教程--第二章基本数据类型与数组
  3. 转:YUV RGB 常见视频格式解析
  4. Linux双机热备解决方案之Heartbeat
  5. golang 创建文件目录 os.Mkdir、os.MkdirAll 区别
  6. python pip安装失败vtk_安装最新的VTK库验证安装出错该怎么解决
  7. 原版98启动盘镜像.img_装机技巧系列(二):系统安装之Windows 10启动盘制作
  8. javscript之数组(一)
  9. 自定义应用程序配置文件(app.config)
  10. iOS VideoToolBox decoder解码失败(-12909和-12911)问题解决
  11. 利用Linq对集合元素合并、去重复处理
  12. 耳机电声测试仪软件,杭州爱华 AWA6128D双耳机测试仪
  13. Mint UI - 饿了么出品的开源、轻量的移动端 UI 组件库
  14. 金额转换成人民币大写
  15. xposed+JustTrustMe抓包SSLping
  16. 开源一个 Python 算法和数据结构中文教程
  17. 配置全局使用的scss样式公用样式函数(后台框架整体颜色改变)
  18. PE文件加节感染之Win32.Loader.bx.V病毒分析
  19. Android一键清理原理
  20. 盒模型和开发中常用的布局

热门文章

  1. 敬业签电脑桌面便签软件怎么绑定手机号码?
  2. ubuntu升级22.04无法启动--ACPI BIOS Error
  3. html中span隐藏属性,span标签的class属性
  4. air应用接入移动mm弱联网平台
  5. 计算机符号的名字,空格符号怎么打 游戏名字空格怎么打
  6. 计算机笔记检讨,没做笔记检讨书
  7. 【Vue插件】一款很好用的vue日历插件——vue-sweet-calendar
  8. 计算机科学对自然观的影响,浅谈自然辩证法对计算机科学研究的意义
  9. 网页代码优化html标签,通过优化网页HTML代码提高网页访问速度
  10. You may need an appropriate loader to handle this file type, currently no loaders are configured to