0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何写一个简易AM信号的FPGA实现?

FPGA之家 来源:bug记录 作者:bug记录 2021-03-29 11:40 次阅读

前几天,临危受命,帮几个初学者的学生写一个简易AM信号FPGA实现,以帮助他们搭建一个相对完整的系统,测试他们的低速ADC,高速DAC,AGC控制等等模块。本文的FPGA代码已经经过上板测试,由于时间紧急没有保存图片,所以文章只有仿真图片。

首先,为什么是AM信号的调制过程,是因为在短时间情况下,AM信号的实现相对简单,而且上述提到的几个模块都可以得到使用和验证。因为FPGA的价格因素,做课设/比赛使用最多的还是Altera的Cyclone系列板。所以,本文使用QuartusII 13.1 作为Verilog代码综合实现工具。AM信号调制过程就不做过多介绍了,简单来说,就是基带信号和一个直流信号相加,然后与载波相乘。那么,在实现过程中,做了些许改变,先让基带信号与载波相乘,然后将截位后的信号与载波相加。如果想要实现更精细的AM信号调制(变更调制深度等参数),可以修改这个地方的先后顺序。AM公式表达如下:

为直流信号,是基带信号,是载波信号。

9f5cb222-8ecc-11eb-8b86-12bb97331649.png

实现过程如上图,顶层文件使用BSF文件,更为直观。由上图可以看出,基带信号和载波信号是由NCO(DDS)产生,在上板验证中,低频部分的NCO被删去,由低速ADC采样外部信号替换这部分的低频信号。所以在刚开始搭建模块时,低速NCO输出信号位宽就兼容了低速ADC的16位位宽。根据资料1可得,Altera提供的NCO是根据32位输入信号phi_inc_i而输出对应的频率的正弦波。公式为:

是NCO预设输出正弦波频率,是输入时钟频率,是NCO的相位精度。这里的设置是32位。NCO(DDS)的本质是ROM表,ROM表存储着正弦波的波形数据,相位精度代表波形数据的多少。根据phi_inc_i累加地址,ROM根据地址输出波形数据,最后数据计算如下。

基带载波

频率(MHz)0.110

phi_inc_i8589935858993459

然后让基带和载波信号相乘,使用LPM_MULT IP核,设置好位宽,数据类型设为“signed”,设置流水线(增加clock),延迟设为1,便于后续通过时序检查。相乘输出信号位宽为32位,保险起见我们只截取最高位的符号位,再截取低位的数据。但是经过上板测试和仿真,符号位实际上有很多位。当然,这部分可以将符号位进行优化,或者设置一个模块,根据输入的参数输出不一样的截位信号,相当于在调整调制深度。同时,将载波信号延迟一个周期,与乘法器延迟一周期的信号做好时序对齐,然后经过LPM_ADD_SUBIP核的加法运算;同样,LPM_ADD_SUB IP核设置好输入信号位宽,数据类型设为“signed”,设置流水线,延迟设为1。最后输出的信号就可以经过高速DAC输出。整个调制过程就结束了。仿真结果:

9fc47e16-8ecc-11eb-8b86-12bb97331649.png

最后思考,可以在加法器和乘法器增加一个enable端口,IP核可以增加这个输入信号;如果先加再乘,由于直流信号一般不会变动,使能信号可以等待每次低速ADC或低速NCO数值更新再拉高一次;乘法器也可以使用使能信号控制,这样的话性能可能没有变化,功耗或许可降低些。此外,使用VCS仿真NCO的nco.vo文件时,一直遇到一个问题,报错如下:

a01b5a88-8ecc-11eb-8b86-12bb97331649.png

大概是说NCO生成的4个hex文件有问题,但是使用modelsim就没这个问题了。

原文标题:简易AM信号调制的FPGA实现过程简单讲解

文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1620

    文章

    21472

    浏览量

    597978
  • 加速器
    +关注

    关注

    2

    文章

    781

    浏览量

    37033

原文标题:简易AM信号调制的FPGA实现过程简单讲解

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于FPGA的DDS正弦信号发生器的设计和实现

    德赢Vwin官网 网站提供《基于 FPGA的DDS正弦 信号发生器的设计和 实现.pdf》资料免费下载
    发表于03-24 09:34 8次下载

    fpga仿真文件怎么

    首先,你需要选择 FPGA仿真软件,如ModelSim、Vivado、Quartus II等。这些软件都提供了强大的仿真功能,可以帮助你验证 FPGA设计的正确性。
    的头像 发表于03-15 14:00 480次阅读

    FPGA实现原理

    布局加载到实际的 FPGA上。这个过程通常通过向 FPGA发送 特定的二进制文件来完成。 FPGA
    发表于01-26 10:03

    射频信号源的LF源与AM调制信号源是如何调试的呢?

    射频 信号源的LF源与 AM调制 信号源是如何调试的呢? 射频 信号源是用于产生射频 信号的设备。LF源和 AM
    的头像 发表于01-19 15:54 740次阅读

    如何写内存泄漏检测工具

    如何确定有内存泄露问题,如何定位到内存泄露位置, 如何写 内存泄漏检测工具? 1:概述 内存泄露本质:其实就是申请调用malloc/new,但是释放调用free/delete有遗漏,或者重复释放
    的头像 发表于11-11 16:19 670次阅读

    如何实现多读多的线程安全的无锁队列

    加锁。那么如何 实现 多读多 的线程安全的无锁队列呢? 互斥锁:mutexqueue(太简单不介绍了) 互斥锁+条件变量:blockqueue(太简单不介绍了) 内存屏障:lockfr
    的头像 发表于11-08 15:25 743次阅读
    如何<b class='flag-5'>实现</b><b class='flag-5'>一</b><b class='flag-5'>个</b>多读多<b class='flag-5'>写</b>的线程安全的无锁队列

    如何写简单的装饰器

    要的是,它让 Python 中被装饰器装饰后的方法长得更像装饰前的方法。 本篇文章不会过多的向你介绍装饰器的基本知识,我会默认你知道什么是装饰器,并且懂得 如何写 简单的装饰器。 不了解装饰器的可以先去阅读我之前
    的头像 发表于11-01 09:54 380次阅读
    <b class='flag-5'>如何写</b><b class='flag-5'>一</b><b class='flag-5'>个</b>简单的装饰器

    请问ESP8266开发板如何写程序?

    社区送的ESP8266开发板 如何写程序?是像stm32那样用Keil编程么?
    发表于10-31 06:53

    米尔AM62x核心板续AM335x经典 助力新代工业4.0升级

    AM335x经典;米尔 AM62x核心板176元起 在过去的十几年中,TI Sitara系列推出了很多优秀的处理器,其中在工业、电力、医疗等领域有着广泛应用的 AM335x系列处理器,
    的头像 发表于10-27 19:52 797次阅读
    米尔<b class='flag-5'>AM</b>62x核心板续<b class='flag-5'>写</b><b class='flag-5'>AM</b>335x经典 助力新<b class='flag-5'>一</b>代工业4.0升级

    基于FPGA种SDRAM控制器简易化设计方法

    德赢Vwin官网 网站提供《基于 FPGA种SDRAM控制器 简易化设计方法.pdf》资料免费下载
    发表于10-26 09:08 0次下载
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>一</b>种SDRAM控制器<b class='flag-5'>简易</b>化设计方法

    FPGA为什么有时候还需要时钟配置芯片提供时钟呢?

    ,时钟是很重要的 因素,而时钟配置芯片则是为了提供时钟 信号而存在。 时钟是 FPGA中非常重要的因素,因为 FPGA必须在时钟边沿上完成
    的头像 发表于10-25 15:14 1428次阅读

    FPGA数字信号处理-FIR滤波器及AM解调

    AM解调中 般的方式是进行全波整流或者半波整流,然后经过 低通滤波器即可。
    的头像 发表于10-17 11:43 1373次阅读
    <b class='flag-5'>FPGA</b>数字<b class='flag-5'>信号</b>处理-FIR滤波器及<b class='flag-5'>AM</b>解调

    如何自制AM信号

    我需要 低失真 AM 信号源来馈送放大器的输入,但我能找到的每个 信号发生器的 AM输出失真规格都比放
    的头像 发表于10-16 10:56 926次阅读
    如何自制<b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>AM</b><b class='flag-5'>信号</b>源

    数字信号处理的FPGA实现

    FPGA正在掀起 场数字 信号处理的变革。本书旨在讲解前端数字 信号处理算法的高效 实现。首先概述了当前的 FP
    发表于09-19 06:38

    hash算法在FPGA中的实现(3)

    在前面的文章中主要介绍了hash表及其链表的结构,同时说明了如何读取表项。那表项是 如何写入的了?前期的文章中有少量的提及,这里单独 篇,介绍两种常见的方案。
    的头像 发表于09-07 17:02 549次阅读
    hash算法在<b class='flag-5'>FPGA</b>中的<b class='flag-5'>实现</b>(3)