当前位置: 首页 > news >正文

FPGA学习——DE2-115开发板上设计波形发生器

1. 实验目的
  1. 掌握直接数字频率合成(DDS)技术的基本原理和应用。
  2. 使用DE2-115开发板实现正弦波和方波的生成。
  3. 使用SignalTap II嵌入式逻辑分析仪测试输出波形的离散数据。
2. 实验原理
  • DDS技术:通过相位累加器生成相位信息,结合波形存储器(ROM)输出波形数据。
  • 波形存储器:使用ROM存储正弦波和方波的采样数据。
  • 频率控制:通过调整相位累加器的步长实现不同频率的输出。
3. 实验步骤
  1. 生成波形数据:使用C语言或MATLAB生成正弦波和方波的采样数据,并保存为MIF文件。
  2. 调用ROM IP核:在Quartus中生成ROM IP核,并加载生成的MIF文件。
  3. 设计DDS模块:实现相位累加器和波形选择逻辑。
  4. 顶层模块设计:将DDS模块与开发板的时钟、复位、按键等信号连接。

在这里插入图片描述

4. 代码实现
4.1 顶层模块代码
module DE2_115_DDS_top(input CLOCK_50,input [3:0] 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(CLOCK_50),.RSTn(RSTn),.WaveSel(WaveSel),.K(K),.WaveValue(WaveValue),.LEDG(LEDG),.CLOCK_100(CLOCK_100));
endmodule
4.2 DDS核心模块代码
module DDS_top(input CLOCK_50,input RSTn,input [1:0] WaveSel,input [12:0] K,output reg [11:0] WaveValue,output reg [0:0] LEDG,output CLOCK_100
);reg [31:0] PhaseAcc;reg [10:0] ROMAddr;reg [11:0] SineValue, SquareValue;// 时钟分频reg [24:0] ClockDiv;wire Clock_100;always @(posedge CLOCK_50 or negedge RSTn) beginif (!RSTn) beginClockDiv <= 0;end else beginif (ClockDiv == 10000000) beginClockDiv <= 0;Clock_100 <= ~Clock_100;end else beginClockDiv <= ClockDiv + 1;endendend// 相位累加器always @(posedge CLOCK_50 or negedge RSTn) beginif (!RSTn) beginPhaseAcc <= 0;end else beginPhaseAcc <= PhaseAcc + K;endend// ROM地址生成assign ROMAddr = PhaseAcc[31:21];// 波形选择always @(posedge CLOCK_50 or negedge RSTn) beginif (!RSTn) beginSineValue <= 0;SquareValue <= 0;WaveValue <= 0;LEDG <= 0;end else begincase (WaveSel)2'b00: beginWaveValue <= SineValue;LEDG <= 1'b0;end2'b01: beginWaveValue <= SquareValue;LEDG <= 1'b1;enddefault: beginWaveValue <= 0;LEDG <= 0;endendcaseendend// ROM模块rom_sine rom_sine_inst(.address(ROMAddr),.clock(CLOCK_50),.q(SineValue));rom_square rom_square_inst(.address(ROMAddr),.clock(CLOCK_50),.q(SquareValue));
endmodule
4.3 ROM模块代码
// 正弦波ROM
module rom_sine(input [10:0] address,input clock,output reg [11:0] q
);reg [11:0] mem [0:2047];initial begin$readmemb("Sine1024.mif", mem);endalways @(posedge clock) beginq <= mem[address];end
endmodule// 方波ROM
module rom_square(input [10:0] address,input clock,output reg [11:0] q
);reg [11:0] mem [0:2047];initial begin$readmemb("Square1024.mif", mem);endalways @(posedge clock) beginq <= mem[address];end
endmodule
4.4 波形数据生成代码
// 生成正弦波MIF文件
#include <stdio.h>
#include <math.h>#define PI 3.141592
#define DEPTH 1024
#define WIDTH 12int main(void)
{int n, temp;float v;FILE *fp;fp = fopen("Sine1024.mif", "w+");if (NULL == fp) {printf("Can not creat file!\r\n");return -1;} 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);}return 0;
}

在这里插入图片描述

5.定制ROM IP核设置

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

6.查看生成RTL

在这里插入图片描述

7.Signal Tap采样分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.结果

在这里插入图片描述
在这里插入图片描述

http://www.xdnf.cn/news/20989.html

相关文章:

  • Sigma-Delta ADC(ΣΔ-ADC)中的量化器简介
  • 解决Windows安全中心显示空白页面
  • L2-002 链表去重
  • 云蝠智能大模型:赋能 AI 呼叫行业,开启智能通信新时代
  • 知识库建设全流程指南(AI时代优化版)
  • virtualbox安装xp系统卡顿的解决
  • 泛型算法——只读算法(三)
  • Semantic Kernel 核心组件 Pipeline:AI 应用的流程引擎
  • Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(六)
  • 破解监控摄像头应用难题:EasyCVR视频监控管理平台的多维解决方案
  • Vue3使用AntvG6写拓扑图,可添加修改删除节点和边
  • 统计字符串每个字符出现频率
  • <sql>、<resultMap>、<where>、<foreach>、<trim>、<set>等标签的作用和用法
  • CCS编译器无法导入工程文件,检查原因是版本编译器编译问题
  • Oracle 19c部署之RMP一键安装初始化(五)
  • [TriCore][TC3XX][用户手册] - 16.中断控制器 - IR
  • MATLAB 控制系统设计与仿真 - 35
  • 提示词工程学习指南(专家级)- 上集
  • OpenSPG/KAG V0.7发布,多方面优化提升,事实推理效果领先且构建成本降至11%
  • 2025 第一届ynuctf wp crypto-misc
  • 【sharding-jdbc配置以及例子】
  • IPD需求变更管理怎么做?4步实现需求版本有效控制
  • Node.js 异步调用淘宝API实战:构建高吞吐商品详情数据采集方案
  • MCP协议 —— AI世界的“USB-C接口”
  • PMP考试费能报销吗?报销流程是什么?
  • 软件项目验收报告模板
  • csdn封面图快速制作【独一无二的图】
  • Pyside6联合QML实现消息弹窗提示
  • 通过 Tailwind CSS 自定义样式 实现深色模式切换
  • Brain Stimulation | 状态依赖性刺激中的大脑网络动态:基于隐马尔可夫模型的EEG-TMS联合分析