基于FPGA的信号发生器(三角波、方波、正弦波)

目录

DDS实现原理

DDS整体设计框图​

Quartus II 仿真​

modelsim仿真

顶层代码


DDS实现原理

DDS(Direct Digital  Frequency Synthesizer)直接数字频率合成器,也可叫DDFS。 

  • DDS是从相位的概念直接合成所需波形的一种频率合成技术。 
  • 不仅可以产生不同频率的正弦波,而且可以控制波形的初始相位。 
  • 主要构成: 

    内部:相位累加器,正弦查找表 

    外围:DAC,LPF(低通滤波器)

    工作过程

    1、将存于ROM中的数字波形,经DAC,形成模拟量波形。 

    2、改变寻址的步长来改变输出信号的频率。 步长即为对数字波形查表的相位增量。由累加器对相位增量进行累加,累加器的值作为查表地址。 

    3、DAC输出的阶梯形波形,经低通滤波,成为模拟波形

DDS整体设计框图Quartus II 仿真

modelsim仿真图

顶层代码

(代码较长,完整工程免费获取请关注公众号:FPGA设计苑)

module DDS(clk,                                    //时钟输入dds_data_out,                           //DDS数据输出set_waveform,                           //设置输出的波形set_f,                                  //设置频率set_a,                                  //设置幅值set_p                                   //设置频率);
input         clk;
input  [1:0]  set_waveform;
input  [20:0] set_f;
input  [4:0]  set_a;
input  [8:0]  set_p;
output [9:0]  dds_data_out;wire          clk;
wire   [1:0]  set_waveform;
wire   [20:0] set_f;
wire   [4:0]  set_a;
wire   [9:0]  set_p;
wire   [9:0]  dds_data_out;
/**************连接线***************/
wire   [31:0] f32_bus;//AC频率控制字输入
wire   [31:0] reg32_out;//32位寄存器输出
wire   [31:0] reg32_in;//32位寄存器输入
wire   [8:0]  reg10_in;
wire   [8:0]  reg10_out_address;
/**************缓存寄存器******************/
wire   [9:0]  sin_data;
wire   [9:0]  tri_data;
wire   [9:0]  squ_data;
//wire   [9:0]  saw_data;
reg    [9:0]  dds_data_reg; 
reg    [20:0] set_f_reg;     
/***********************************/
assign f32_bus[31:21]=11'b000_0000_0000;//初始化,高位置低
assign f32_bus[20:0]=set_f_reg;    //低位可以设置DDS的输出频率
/*********************元件例化************************************/adder_32 u1(.data1(f32_bus),.data2(reg32_out),.sum(reg32_in));reg32    u2(.clk(clk),.data_in(reg32_in),.data_out(reg32_out));adder_10 u7(.data1(set_p),.data2(reg32_out[31:23]),.sum(reg10_in));reg_10   u8(.clk(clk),.data_in(reg10_in),.data_out(reg10_out_address));
/*****************波形选择*******************************************/sin_rom  u3(.address(reg10_out_address),.clock(clk),.q(sin_data));//正弦tri_rom  u4(.address(reg10_out_address),.clock(clk),.q(tri_data));squ_rom  u5(.address(reg10_out_address),.clock(clk),.q(squ_data));
//       saw_rom  u6(.address(reg10_out_address),.clock(clk),.q(saw_data));
/***********************设置波形和设置频率***************************/always @(set_waveform,sin_data,tri_data,squ_data)begin case (set_waveform)2'b00://正弦波begin dds_data_reg<=sin_data; set_f_reg<=set_f;//设置范围为100Hz到20KHzend2'b01://三角波begindds_data_reg<=tri_data;set_f_reg<=set_f;//设置范围为100Hz到20KHzend2'b10:begindds_data_reg<=squ_data;//方波set_f_reg<=set_f;//设置范围为100Hz到20KHzenddefault:begindds_data_reg<=sin_data;//正弦波set_f_reg<=set_f;//设置范围为100Hz到20KHzendendcase;end 
/***********************设置电压幅值***************************/
assign dds_data_out=dds_data_reg*set_a/10;//设置电压幅值
endmodule

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

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

相关文章

Java8实战-总结18

Java8实战-总结18 使用流筛选和切片用谓词筛选筛选各异的元素截短流跳过元素 使用流 流让你从外部迭代转向内部迭代。这样&#xff0c;就用不着写下面这样的代码来显式地管理数据集合的迭代(外部迭代)了&#xff1a; List<Dish> vegetarianDishes new ArrayList<>…

ArcGIS美化科研论文地图(利用在线底图)

1.加载在线底图服务 在ArcGIS Desktop中打开Catalog窗口&#xff0c;在GIS Servers中点击Add ArcGIS Server&#xff0c;之后选项全部默认&#xff0c;仅在URL中输入以下网址https://services.arcgisonline.com/arcgis 之后就可以看到底图了 我们在WorldElevation3D中选择Nat…

16-MyCat

一 Mycat概述 1 什么是Mycat 什么是Mycat Mycat是数据库中间件&#xff0c;所谓数据库中间件是连接Java应用程序和数据库中间的软件。 为什么要用Mycat 遇到问题&#xff1a; Java与数据库的紧耦合高访问量高并发对数据库的压力读写请求数据不一致 2 Mycat与其他中间件区别 目…

QT创建可移动点类

效果如图所示&#xff1a; 创建新类MovablePoint&#xff0c;继承自QWidget. MovablePoint头文件: #ifndef MOVABLEPOINT_H #define MOVABLEPOINT_H#include <QWidget> #include <QPainter> #include <QPaintEvent> #include <QStyleOption> #includ…

TS编译选项

自动监控编译 tsc xxx.ts -w 在一个文件夹下&#xff0c;创建 tsconfig.json 文件&#xff0c;在用命令 tsc 就可以自动编译当前文件夹下的ts文件 tsconfig.json文件配置如下&#xff1a; {/*tsconfig.json 是ts编译器的配置文件&#xff0c;ts编译器可以根据它的信息来对代…

springboot自定义表格(动态合并单元格)

一、需求展示&#xff08;一个订单多个商品&#xff0c;商品数量不限订单行合并&#xff09; 二、技术选型&#xff08;jxls自定义模板&#xff09; <!-- 版本具体看官网Release&#xff0c;这里我们使用 2.13.0 --><dependency><groupId>org.jxls</group…

jQuery 层次选择器

jQuery 层次选择器 &#xff08;0&#xff09;测试前的准备工作 A. 定义测试对象 B. 定义测试对象的 CSS 样式 C. 再定义一些测试用的 button。 &#xff08;1&#xff09;所有后代选择器(A B) 所有后代&#xff0c;包括其直接后代及间接后代。 &#xff08;2&#xff09;直…

javaee spring 测试aop 切面

切面类 package com.test.advice;import org.aspectj.lang.ProceedingJoinPoint;//增强类 public class MyAdvice {//将这个增强方法切入到service层的add方法前public void before(){System.out.println("添加用户之前");}}目标类 package com.test.service;publi…

Vue.js 报错:Cannot read property ‘validate‘ of undefined“

错误解决 起因&#xff0c;是我将elemnt-ui登录&#xff0c;默认放在mounted()函数里面&#xff0c;导致vue初始化就调用这个函数。 找了网上&#xff0c;有以下错误原因&#xff1a; 1.一个是你ref写错了&#xff0c;导致获取不了这个表单dom&#xff0c;我这显然不是。 2.…

【Python爬虫笔记】爬虫代理IP与访问控制

一、前言 在进行网络爬虫的开发过程中&#xff0c;有许多限制因素阻碍着爬虫程序的正常运行&#xff0c;其中最主要的一点就是反爬虫机制。为了防止爬虫程序在短时间内大量地请求同一个网站&#xff0c;网站管理者会使用一些方式进行限制。这时候&#xff0c;代理IP就是解决方…

成集云 | 金蝶云星空即时库存明细同步到多维表格 | 解决方案

源系统成集云目标系统 方案介绍 金蝶云星空是金蝶软件推出的新一代成长型企业SaaS管理软件&#xff0c;基于可组装低代码PaaS平台&#xff0c;构建了财务、供应链、采购管理、销售管理、生产管理、成本、税务、零售、电商、人力资源、协同办公等三十多个领域的一体化企业管理…

模型的保存加载、模型微调、GPU使用及Pytorch常见报错

序列化与反序列化 序列化就是说内存中的某一个对象保存到硬盘当中&#xff0c;以二进制序列的形式存储下来&#xff0c;这就是一个序列化的过程。 而反序列化&#xff0c;就是将硬盘中存储的二进制的数&#xff0c;反序列化到内存当中&#xff0c;得到一个相应的对象&#xff…

uniapp 处理 分页请求

我的需求是手机上一个动态滚动列表&#xff0c;下拉到底部时&#xff0c;触发分页数据请求 uniapp上处理分页解决方案 主要看你是如何写出滚动条的。我想到的目前有三种 &#xff08;1&#xff09;页面滚动&#xff1a;直接使用onReachBottom方法&#xff0c;可以监听到达底部…

文件读取漏洞复现(Metinfo 6.0.0)

文章目录 安装环境启动环境漏洞复现代码审计 安装环境 安装phpstudy&#xff0c;下载MetInfo 6.0.0版本软件&#xff0c;复制到phpstudy目录下的www目录中。 打开phpstudy&#xff0c;访问浏览器127.0.0.1/MetInfo6.0.0/install/index.php&#xff0c;打开Meinfo 6.0.0主页&a…

Vue+Element-ui实现表格本地导入

表格文件存储在前端 如图&#xff0c;表格文件template.xlsx存储在public下的static文件夹下 注意这里的路径容易报错 a链接下载文件失败的问题(未发现文件&#xff09; a.href ‘./static/template.xlsx’ 写的时候不能带public&#xff0c;直接这么写就可以 DownloadTemp…

leetcode每日一练-第53题-最大子数组和

一、思路 动态规划 二、解题方法 使用了两个变量 maxSum 和 currentSum 来分别记录全局的最大和和当前连续子数组的和。遍历数组时&#xff0c;我们不断更新 currentSum&#xff0c;并比较是否需要更新 maxSum。最后&#xff0c;maxSum 就是最大的连续子数组和。 三、code …

质量属性案例-架构真题(二十一)

试题一 某电子商务公司升级会员与促销管理系统&#xff0c;向用户提交个性化服务&#xff0c;提高用户粘性。在项目建立之初&#xff0c;公司领导人一致认为目标是提升会员管理方式的灵活性&#xff0c;由于当前用户规模不大&#xff0c;用户简单&#xff0c;系统方面不需要做…

【算法与数据结构】700、LeetCode二叉搜索树中的搜索

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;二叉搜索树的性质&#xff1a;左节点键值 < 中间节点键值 < 右节点键值。那么我们根据此性质&am…

seata1.4.2版本配置总结

文章目录 环境准备&#xff1a;seata-server配置registry.conf创建数据库表 nacos配置client配置seata_orderseata_storageseata_account 注意点 创建项目seata-order-service2001pom.xml文件application.yml 实体类CommonResultOrder DaoOrderDaoOrderMapper.xml config配置类…

文件上传漏洞全面渗透姿势

0x00 文件上传场景 (本文档只做技术交流) 文件上传的场景真的随处可见&#xff0c;不加防范小心&#xff0c;容易造成漏洞&#xff0c;造成信息泄露&#xff0c;甚至更为严重的灾难。 比如某博客网站评论编辑模块&#xff0c;右上角就有支持上传图片的功能&#xff0c;提交带…