Verilog实现正弦波、三角波、方波、锯齿波的输出
1、理论知识
实现方法:将数字量转换为模拟量,根据输出数字量的大小转换为模拟量以实现信号幅值的变化。
具体思路:提前声明一个ROM IP核,将正弦波、三角板、方波和锯齿波的数字量写入进去,或者也可以自己用Verilog写一个ROM,ROM作为只读的一个存储器,在声明的时候需要提前将数据写入到ROM中,然后给定其一个地址,便会输出该地址所对应的数据以实现信号波形的输出。
根据思路进行举例说明:
若要实现一个正弦波的输出,提前将ROM的深度定义为1024,宽度定义为10位宽。则ROM中有1024个数据,每个数据的位宽为10位二进制,这1024个数据代表了一个正弦波。
由于位宽为10位,则输出幅值的最大值为2^10-1=1023,最小为0,具体如下图
同理可以实现三角波、方波、锯齿波。
2、具体实践
目标:用Vivado中的ROM IP核,实现正弦波、三角波、方波、锯齿波的输出。
第一步 生成波形数据
可以使用mif精灵,或者matlab生成一个coe文件,文件内容格式具体如下图:
第二步 定义ROM IP核
定义一个但端口的ROM IP核,一个波形深度为1024,则存放四个波形的深度需要4096,对应的地址位为12位。
然后将第一步生成的coe文件写入ROM中。
第三步 编写源文件代码并调用IP核
具体源文件代码如下
module wave4_rom(input wire sys_clk,input wire ena,input wire [11:0] addr,input wire [9:0] data_out);//调用第二步生成的ROM IP核
sinwave_rom inst1 (.clka(sys_clk), // input wire clka.ena(ena), // input wire ena.addra(addr), // input wire [11 : 0] addra.douta(data_out) // output wire [9 : 0] douta
);
endmodule
第四步 编写仿真代码
仿真代码如下:
`timescale 1ns / 1nsmodule tb_wave4_rom();reg sys_clk ;reg ena ;reg [11:0] addr ;wire [9:0] data_out;initialbeginsys_clk=1'b1;ena<=1'b0;#200ena<=1'b1;endalways #10 sys_clk=~sys_clk;always@(posedge sys_clk or negedge ena)if(ena==1'b0)addr<=12'd0;else if(addr==12'd4095)addr<=12'd0;elseaddr<=addr+1'b1;//实例化源文件
wave4_rom inst1(.sys_clk (sys_clk) ,.ena (ena) ,.addr (addr) ,.data_out (data_out));
endmodule
Vivado仿真波形
整体波形如下
方波的数据只有1023和0
3、拓展训练
可以使用FPGA的按键控制四种波形的输出,需要使用到按键消抖模块。
也可以进行输出波形的频率和相位调制,实现一个简易的DDS信号发生器。具体实现原理图如下
图中所展示的四大结构中,相位累加器是整个 DDS 的核心,在这里完成相位累加,生成相位码。相位累加器的输入为频率字输入 K,表示相位增量,设其位宽为 N,满足等式K = 2^N * fOUT / fCLK 。其在输入相位累加器之前,在系统时钟同步下做数据寄存,数据改变时不会干扰相位累加器的正常工作。
通过改变频率字输入和相位字输入实现输出波形频率和相位的调节。
Verilog实现正弦波、三角波、方波、锯齿波的输出相关推荐
- Verilog 代码编写 DDS信号发生器(幅频相可调正弦波、方波、三角波、锯齿波)纯VIVADO编写仿真
DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短.分辨率高和相位连续性好等优点.较容易实现频率.相位以及幅度的数控调 ...
- MATLAB绘制正弦波、方波、三角波、锯齿波的mif文件
MATLAB绘制正弦波.方波.三角波.锯齿波的mif文件 % 对波形进行等间隔采样,以采样次数作为 ROM 存储 % 地址,将采集的波形幅值数据做为存储数据写入存储地址对应的存储空间 % 采样次数为 ...
- MATLAB输出四种常用波形(方波、正弦波、三角波、锯齿波)
1.我们在处理数学以及信号的时候经常会用到MATLAB,因为它可以使我们直观地观察到我们需要的信号的模型.因此掌握基本的MATLAB还是有必要的.这里我们来讲解一下如何用MATLAB产生四种常用波形( ...
- 基于stm32单片机的四种波形发生器正弦波、方波、三角波、锯齿波
基于stm32单片机的四种波形发生器(源程序+仿真+设计报告)全套资料 资料编号:010 具体功能: (1) 可以实现四种波形:正弦波.方波.三角波.锯齿波: (2) 通过按键进行选择,频率可以调整: ...
- 函数信号发生器:本设计中要求输出方波、三角波、锯齿波、正弦波,电压0-10V可调,调节精度0.1V;输出信号的频率0-100Hz;占空比可调
函数信号发生器:本设计中要求输出方波.三角波.锯齿波.正弦波,电压0-10V可调,调节精度0.1V:输出信号的频率0-100Hz:占空比可调. 本次课题设计将利用单片机控制来实现信号发生系统所要求的功 ...
- 【51单片机】DAC0832制作信号发生器(方波,三角波,锯齿波)
[51单片机]DAC0832制作信号发生器(方波,三角波,锯齿波) 1 A/D与D/A 2 电路与元器件 3 源代码 3.1 程序开始 3.2 监视按钮操作 3.3 按钮控制显示波形 3.4 方波产生 ...
- 【51毕业设计案例】【006】波形发生器(正弦波、矩形波、三角波、锯齿波)-基于51单片机
功能介绍: 1.输出 正弦波.矩形波.三角波.锯齿波 波形 2.设定波形输出频率 3.设定修改频率的步进值 整体功能简述: 通过按键可以修改输出的波形,一共可以输出四种波形,分别是:正弦波.矩形波.三 ...
- PWM呼吸灯之三角波、锯齿波、正弦函数波
脉冲宽度调制(PWM),是英文"Pulse Width Modulation" 的缩写,简称脉宽调制,是利用 微处理器(MCU)的数字输出来对模拟电路进行控制的一种非常有效的技术. ...
- c语言编程三角波,DA转换 方波,锯齿波,三角波 C语言 编程
DA转换(函数波形发生器) 功能说明:1.该程序可产生三种不同的波形分别是(方波,锯齿波,三角波) 2.分别可以通过三个按键选择对应的波形. #include #include #include #d ...
- matlab 实现三角波、倒锯齿波与锯齿波
matlab生成锯齿波.倒锯齿波和三角波的函数都是 sawtooth 生成锯齿波 使用的函数 f=sawtooth(2*pi*f*t); 其中 f 为频率 锯齿波的频率控制和正弦波和三角波函数的控制是 ...
最新文章
- springboot日志logback配置
- Codeforces 1027F. Session in BSU
- kafka消费的三种模式_快速认识Kafka
- ikvm java转换成dll_利用IKVM.NET将Java jar包转换成可供C#调用的dll文件
- 7-28 搜索树判断 (25 分)(思路加详解) just easy!
- 【华为云技术分享】解析数据治理在过程可信变革中的运作流程
- 蓝桥杯小朋友排队java_1215. 小朋友排队
- Pandas 表连接(Merge,join,concatenate)
- 为什么更改总和顺序会返回不同的结果?
- 调用ICodeCompiler来计算字符串表达式
- iOS 代码命名规范 及Android 代码命名规范(2)Android
- matlab 调用 lingo,lingo和matlab用哪个
- 移动端屏幕宽度自适应原理及实现
- 怎么录制音频,什么录音软件好用?
- 无线射频专题《IEEE 802.11协议讲解4@可调参数,性能与兼容性考虑》
- 软件工程投资回收率计算
- Set 接口实现类-HashSet
- html怎么设置网页的大小怎么设置,css怎么设置字体大小
- Python web框架Django学习(1)
- 一篇文章带你全面了解“电脑”内外组成
热门文章
- 证明四元数表示旋转的过程实部为0,虚部为罗德里格斯公式结果
- 新房子没网络,怎么用光猫和路由器上网
- 【RuoYi框架】RuoYi框架学习超简单案例 - 新闻管理系统(附源码)
- 简述计算机用二进制的原因,简述计算机采用二进制的原因
- 【大学生软件测试基础】三角形类型 - 白盒测试 - 语句覆盖 -02
- 百度地图离线API2.0(含示例,可完全断网访问)
- CreateCompatibleDC工作原理
- 计算机在职研究生分数,在职研究生复试录取分数线-在职研招网-在职研究生招生信息网...
- Android7.0 Doze模式分析(三)alarm
- PPT模板的动画去掉或更改