FPGA-DDS技术的波形发生器

news2025/5/10 15:14:56

1.实验目的

1.1掌握直接数字频率合成(DDS)的基本原理及其实现方法。

1.2在DE2-115 FPGA开发板上设计一个可调频率的正弦波和方波发生器,频率范围10Hz~5MHz,最小分辨率小于1kHz。

1.3使用Quartus II进行仿真,并通过SignalTap II实时观测输出波形。

2.实验原理

2.1 DDS(Direct Digital Frequency Synthesis)是一种通过数字方式生成高精度、高稳定度频率信号的技术。其核心由三部分组成

相位累加器:在时钟驱动下累加频率控制字(K),输出相位值。

波形查找表(LUT):存储波形采样数据(如正弦波、方波)。

DAC转换(可选):将数字波形转换为模拟信号(本实验仅观测数字输出)。

2.2输出频率计算公式:

K:频率控制字(Tuning Word)

fclkfclk:系统时钟(50MHz)

NN:相位累加器位数(32位)

3.关键参数设计

3.1频率分辨率

3.2频率范围

最小值:K=1K=1fout=0.0116Hzfout=0.0116Hz

最大值(Nyquist限制):fout≤25MHzfout≤25MHz,实际设计目标5MHz。

4.实验设计

4.1 硬件设计

(1)相位累加器

32位累加器,每个时钟周期增加频率控制字 KK

输出相位值的高10位作为LUT地址(1024点正弦表)。

(2)波形查找表(LUT)

正弦波c生成1024点8位有符号数据(.mif文件),存储于ROM。

方波:直接取相位累加器最高位(占空比50%)。

(3)顶层模块

输入:系统时钟(50MHz)、复位信号、频率控制字 KK、波形选择信号。

输出:8位数字波形数据。

4.2 关键代码

4.2.1相位累加器
module addr_cnt(CPi,K,ROMaddr,Address);
    input CPi;
    input [12:0] K;
    output reg [9:0] ROMaddr;
    output reg [16:0] Address;
    always @(posedge CPi) begin
        Address=Address+K;
        ROMaddr=Address[16:7];
    end
Endmodule

选择Create Symbol Files for Current File

4.2.2波形存储器ROM

方波模块

module squwave(CPi,RSTn,Address,Qsquare);
    input CPi;
    input RSTn;
    input [16:0] Address;
    output reg [11:0] Qsquare;
    always @(posedge CPi)
    if (!RSTn)Qsquare=12'h000; 
    else begin
        if(Address<=17'h0FFFF)
            Qsquare=12'hFFF;
        else Qsquare=12'h000;
    end
endmodule

4.2.3正弦波形存储器

其中Sine1024.mif的代码如下:

/*myMIF.c*/
#include <stdio.h>
#include <math.h>
#define PI 3.141592
#define DEPTH 1024
#define WIDTH 12
int main(void)
{
	int n,temp;
	float v;
	FILE *fp;
	fp=fopen("Sine1024.mif","w+");
	if(NULL==fp)printf("Can not creat file!\r\n");
	else
	{
		printf("File created successfully!\n");
		fprintf(fp,"DEPTH=%d;\n",DEPTH);
		fprintf(fp,"WIDTH=%d;\n",WIDTH);
		fprintf(fp,"ADDRESS_RADIX=HEX;\n");
		fprintf(fp,"DATA_RADIX=HEX;\n");
		fprintf(fp,"CONTENT\n");
		fprintf(fp,"BEGIN\n");
		for(n=0;n<DEPTH;n++)
		{
			v=sin(2*PI*n/DEPTH);
			temp=(int)((v+1)*4095/2);
			fprintf(fp,"%04x : %03x;\n",n,temp);
		}
		fprintf(fp,"END;\n");
		fclose(fp);
	}
 } 

运行.exe文件生成.mif文件

LPM_ROM定制正弦波形存储器

以下进行修改:

4.2.4顶层电路设计
module DDS_top (CLOCK_50,RSTn,WaveSel,K,
WaveValue,LEDG,CLOCK_100);
    input CLOCK_50;
    input RSTn;
    input [1:0] WaveSel;

    input [12:0] K;
    output reg [11:0] WaveValue;
    wire [9:0] ROMaddr/* synthesis keep */;
    wire [16:0] Address;
    wire [11:0] Qsine,Qsquare;
    output [0:0] LEDG;
    output CLOCK_100;
    wire CPi=CLOCK_100;
    PLL100M_CP PLL100M_CP_inst(
        .inclk0(CLOCK_50),
        .c0(CLOCK_100),
        .locked(LEDG[0])
    );

    addr_cnt U0_instance(CPi,K,ROMaddr,Address);

    SineROM ROM_inst(
        .address(ROMaddr),
        .clock(CPi),
        .q(Qsine)
    );
    squwave U1(CPi,RSTn,Address,Qsquare);
    always @(posedge CPi)
    begin
        case(WaveSel)
            2'b01:WaveValue=Qsine;
            2'b10:WaveValue=Qsquare;
            default:WaveValue=Qsine;
        endcase
    end
endmodule

4.2.5配置文件

module DE2_115_DDS_top(CLOCK_50,KEY,SW,GPIO_0,LEDG);
    input CLOCK_50;
    input [3:3] KEY;
    input [17:0] SW;
    output [12:0] GPIO_0;
    output [0:0] LEDG;
    wire CLOCK_100;
    assign GPIO_0[12]=CLOCK_100;
    wire RSTn=KEY[3];
    wire [1:0] WaveSel=SW[17:16];
    wire [12:0] K=SW[12:0];
    wire [11:0] WaveValue;
    assign GPIO_0[11:0]=WaveValue;
    DDS_top DE2(CLOCK_50,RSTn,WaveSel,K,WaveValue,LEDG,CLOCK_100);
endmodule
4.2.5仿真

进入界面配置

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

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

相关文章

C#实现通过MQTT Broker——EMQX发布订阅消息及其认证、授权的安全配置操作

一、准备内容 MQTT的构成、使用场景、工作原理介绍-CSDN博客文章浏览阅读656次,点赞7次,收藏12次。MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布-订阅模式的消息传输协议【适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境】它在物联网应用中…

【双指针】三数之和(medium)

三数之和&#xff08;medium&#xff09; 题⽬描述&#xff1a;解法&#xff08;排序双指针&#xff09;&#xff1a;算法思路&#xff1a;C 算法代码&#xff1a;Java 算法代码&#xff1a;注&#xff1a;数组转列表 题⽬链接&#xff1a;15. 三数之和 题⽬描述&#xff1a; …

【项目管理】第17章 项目干系人管理-- 知识点整理

项目管理-相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应:第6章-第19章 第6章 项目管理概论 4分第13章 项目资源管理 3-4分第7章 项目…

视频融合平台EasyCVR可视化AI+视频管理系统,打造轧钢厂智慧安全管理体系

一、背景分析 在轧钢厂&#xff0c;打包机负责线材打包&#xff0c;操作人员需频繁进入内部添加护垫、整理包装、检修调试等。例如&#xff0c;每班产线超过300件&#xff0c;12小时内人员进出打包机区域超过300次。若员工安全意识薄弱、违规操作&#xff0c;未落实安全措施就…

无参数RCE

无参数RCE&#xff08;Remote Code Execution&#xff0c;远程代码执行&#xff09; 是一种通过利用目标系统中的漏洞&#xff0c;在不直接传递用户可控参数的情况下&#xff0c;实现远程执行任意代码的攻击技术。与传统的RCE攻击不同&#xff0c;无参数RCE不依赖外部输入参数…

C++ 智能指针底层逻辑揭秘:优化内存管理的核心技术解读

目录 0.为什么需要智能指针&#xff1f; 1.智能指针的使用及原理 RAII&#xff1a; 智能指针的原理&#xff1a; 2.智能指针有哪些&#xff1f; std::auto_ptr std::unique_ptr std::shared_ptr std::weak_ptr 0.为什么需要智能指针&#xff1f; 想要回答这个问题&…

Vue接口平台学习七——接口调试页面请求体

一、实现效果图及简单梳理 请求体部分的左边&#xff0c;展示参数&#xff0c;分text和file类型。 右边部分一个el-upload的上传文件按钮&#xff0c;一个table列表展示&#xff0c;一个显示框&#xff0c;用于预览选择的文件&#xff0c;点击可大图展示。 二、页面内容实现 …

小程序css实现容器内 数据滚动 无缝衔接 点击暂停

<view class"gundongBox"><!-- 滚动展示信息的模块 --><image class"imgWid" :src"imgurlgundong.png" mode"widthFix"></image><view class"gundongView"><view class"container&qu…

【力扣】day1

文章目录 27.移除元素26. 删除有序数组的重复项 27.移除元素 26. 删除有序数组的重复项 我们仔细看一下这两道题的最后的返回值,为什么第一题返回slow 而第二题返回slow1 最后的返回值该如何返回绝对不是凭感觉,我们自己分析一下第一个slow,从0位置开始, 遇到val值就开始和fas…

图像预处理-色彩空间补充,灰度化与二值化

一.图像色彩空间转换 1.1 HSV颜色空间 HSV颜色空间使用色调&#xff08;Hue&#xff09;、饱和度&#xff08;Saturation&#xff09;和亮度&#xff08;Value&#xff09;三个参数来表示颜色 一般对颜色空间的图像进行有效处理都是在HSV空间进行的&#xff0c;然后对于基本…

项目交接时信息遗漏,如何预防

项目交接时&#xff0c;信息遗漏可能导致任务延误、质量下降和团队混乱&#xff0c;因此&#xff0c;建立系统化的交接流程和使用专业的工具是防止信息遗漏的有效策略。交接过程中的信息丢失往往源自沟通不畅、文档不完整或者责任不明确等问题&#xff0c;这不仅影响项目的顺利…

【AI量化第24篇】KhQuant 策略框架深度解析:让策略开发回归本质——基于miniQMT的量化交易回测系统开发实记

我是Mr.看海&#xff0c;我在尝试用信号处理的知识积累和思考方式做量化交易&#xff0c;应用深度学习和AI实现股票自动交易&#xff0c;目的是实现财务自由~ 目前我正在开发基于miniQMT的量化交易系统——看海量化交易系统。 本篇要讲到量化的核心了——策略。说白了每个投资者…

向量数据库Qdrant 安装 不使用docker

一、导读 环境&#xff1a;Ubuntu 24.04、Windows 10、WSL 2、Qdrant 1.13.4 背景&#xff1a;换了新工作&#xff0c;使用qdrant作为向量库&#xff0c;需要不使用docker安装 时间&#xff1a;20250415 说明&#xff1a;初入职&#xff0c;不了解&#xff0c;暂且记下 二、…

微电网与分布式能源:智能配电技术的场景化落地

安科瑞顾强 随着数字化转型与能源革命的加速推进&#xff0c;电力系统正经历从传统模式向智能化、网络化方向的深刻变革。用户侧的智能配电与智能用电技术作为这一变革的核心驱动力&#xff0c;正在重塑电力行业的生态格局。本文将从技术架构、应用场景及未来趋势等维度&#…

Web三漏洞学习(其一:文件上传漏洞)

靶场:云曦历年考核题 一、文件上传 在此之前先准备一个一句话木马 将其命名为muma.txt 23年秋期末考 来给师兄上个马 打开环境以后直接上传muma.txt&#xff0c;出现js弹窗&#xff0c;说明有前端验证 提示只能上传.png .jpg 和 .gif文件&#xff0c;那就把muma.txt的后缀…

Web三漏洞学习(其二:sql注入)

靶场&#xff1a;NSSCTF 、云曦历年考核题 二、sql注入 NSSCTF 【SWPUCTF 2021 新生赛】easy_sql 这题虽然之前做过&#xff0c;但为了学习sql&#xff0c;整理一下就再写一次 打开以后是杰哥的界面 注意到html网页标题的名称是 “参数是wllm” 那就传参数值试一试 首先判…

KrillinAI:视频跨语言传播的一站式AI解决方案

引言 在全球内容创作领域&#xff0c;跨语言传播一直是内容创作者面临的巨大挑战。传统的视频本地化流程繁琐&#xff0c;涉及多个环节和工具&#xff0c;不仅耗时耗力&#xff0c;还常常面临质量不稳定的问题。随着大语言模型(LLM)技术的迅猛发展&#xff0c;一款名为Krillin…

gravity`(控制 View 内部内容的对齐方式)

文章目录 **1. 常用取值****示例** **2. layout_gravity&#xff08;控制 View 在父容器中的对齐方式&#xff09;****常用取值****示例** **3. gravity vs layout_gravity 对比****4. 注意事项****5. 总结** 作用对象&#xff1a;当前 View 的内部内容&#xff08;如 TextView…

gitdiagram源码架构分析

https://github.com/ahmedkhaleel2004/gitdiagram 整体架构分析 前端请求入口&#xff1a; 后端对应接口&#xff1a; 后端调试 后端调试&#xff1a;会提示api_key失败的问题&#xff1a; 有两种方法解决&#xff1a; 1、注释掉下面的行代码&#xff1b; 方法二&#xff1…

蓝光三维扫描:汽车冲压模具与钣金件全尺寸检测的精准解决方案

随着汽车市场竞争日趋激烈&#xff0c;新车型开发周期缩短&#xff0c;安全性能要求提高&#xff0c;车身结构愈加复杂。白车身由多达上百个具有复杂空间型面的钣金件&#xff0c;通过一系列工装装配、焊接而成。 钣金件尺寸精度是白车身装配精度的基础。采用新拓三维XTOM蓝光…