FPGA学习(1)NCO产生任意三角波、方波
1、NCO原理
在通过相位累加产生地址信息时,通常需要输出当前时刻的相位值所对应的正弦值,即以参考频率源对相位进行等可控间隔采样。
-产生信号频率,-系统时钟(采样频率),-相位累加器的位数,-频率控制字
根据Nyquist准则,允许输出的最高频率为
2、任意三角波
(1)首先在matlab生成存入ROM的NCO码表(.coe)文件,有固定格式
n = 0:4095; %相位累加器位数N为12
costable = cos(2*pi/4096*n);
costable = round(costable*64); %量化
fid = fopen('costable.coe','wt');
fprintf(fid,'memory_initialization_radix = 10;\nmemory_initialization_vector = ');
for i = 1 : 4096fprintf(fid,'\n');fprintf(fid,'%4d,',costable(i));
end
(2)将.coe文件导入Vivado ROM中,Vivado中需要写两个模块相位累加器和调用IP核输出波形
相位累加器代码如下:
`timescale 1ns / 1psmodule PhaseAdder(input sysclk,input rstn,input [31:0] carr_freq, //频率控制字,相位累加步长input en,output [11:0] phase);reg [31:0] phase_reg;always@(posedge sysclk or negedge rstn)beginif(!rstn)phase_reg <= 32'd0;elsebeginif(en)phase_reg <= phase_reg + carr_freq; //溢出循环endendassign phase = phase_reg[31:20];
endmodule
这里需要注意,根据波形生成公式越大,频率精度越高,本应需要深度和生成点数相同的ROM。但是可以通过截位运算用4096深度的ROM来装码表,计算频率控制字还是要通过来计算,截位产生的误差为
例化ROM核后输出波形代码如下:
module cos_gen(
input sysclk,
input rstn,
input en,
input [31:0] cos_freq,output signed [7:0] cos_wave,);wire [11:0] phase;
PhaseAdder u_PhaseAdder
(.sysclk (sysclk),.rstn (rstn),.cos_freq (cos_freq),.en (en),.phase (phase)
);NCO_COS u_NCO_COS
(.a (phase),.spo (cos_wave)
); endmodule
3、任意方波(时钟信号)
方波信号产生相较于三角波而言比较简单,可以省略生成码表的步骤(因为只有01),可以只通过Verilog代码产生。
`timescale 1ns / 1psmodule ClkGen_unit(input clk_96m,
input rst_n,
input en,
input [31:0] code_nco_word,output [7:0] code_clk_reg,);reg [31:0] code_nco;
reg code_nco_h32;
reg [7:0] code_clk_reg_c; always @(posedge clk_96m)
beginif (rst_n==0) begincode_nco <= 0;end else beginif (en==1) begincode_nco<=code_nco+code_nco_word;end else begincode_nco<=0;endend
end always @(posedge clk_96m)
beginif (rst_n==0) begincode_nco_h32 <= 0;end else begincode_nco_h32<=code_nco[31];end
end always @(posedge clk_96m)
beginif (rst_n==0) begincode_clk_reg_c <= 0;end else begincode_clk_reg_c[0]<=(~code_nco[31]) & code_nco_h32; //方波整形,改变占空比code_clk_reg_c[7:1]<=code_clk_reg_c[6:0]; //产生多级延迟方波信号,方便自行选择end
end
assign code_clk_reg=code_clk_reg_c;endmodule
本代码增加了两个比较巧妙的步骤:
(1)对方波进行整形,改变其占空比;
(2)产生多级延迟方波信号,方便自行选择。
FPGA学习(1)NCO产生任意三角波、方波相关推荐
- STM32单片机可变频率幅度DDS信号发生器正弦波三角波方波AD9833
实践制作DIY- GC0094-DDS信号发生器 一.功能说明: 基于STM32单片机设计-DDS信号发生器 功能介绍: 硬件组成:STM32F103C系列最小系统板 +LCD1602显示器+AD98 ...
- MATLAB产生三角波
原文地址:Simulink产生三角波的三种方法 作者:xianfa110 在这里我采用两种方法产生三角波,并做成了Simulink模块形式,以后可直接调用. 模块: 参数设置: 第一种方法,基于方波产 ...
- 单片机c语言三角波采样点,E题_江苏赛区_南京信息工程大学——放大器非线性失真分析装置 一等奖...
放大器非线性失真研究装置(E题) 摘 要 本设计是一个能产生非线性失真的晶体管放大器,**由两级共射放大电路以及一级推挽电路构成.可以通过调节放大器内各个电阻的阻值,来变更静态工作点,以及通过短路推挽 ...
- python实现方波,三角波的合成与分析
###最近matlab在一些军工学校已经被禁了,(据说哈工大已经不能用matlab了)最近学院的一些学术作业也都要转移到python平台来实现了,最近会更新一些原本用matlab做着很简单,到了pyt ...
- 关于BUCK降压的一些学习笔记2-->滞回比较器产生三角波
初出茅驴,说的有不对的地方,欢迎大家共同探讨交流. 在上一篇文章中我说到了P管的开关控制BUCK电路.P管的前级驱动需要PWM驱动,当然这个PWM的占空比是需要可变化的. PWM是数字量,只有高和低两 ...
- C语言及gnuplot任意波形产生及作图-以三角波为例
以三角波为例.首先编制计算周期三角波的C函数.要求:三角波参数与正弦函数相似,标准周期为2π2\pi2π,占空比ppp(上升时间比周期)表示三角波上升下降段的比例,p=0.5p=0.5p=0.5为上升 ...
- python正弦波和等腰三角波_Python科学计算——任意波形拟合
任意波形的生成 (geneartion of arbitrary waveform) 在商业,军事等领域都有着重要的应用,诸如空间光通信 (free-space optics communicatio ...
- Verilog学习脚印3-简单状态机(三角波)
Verilog学习脚印3-简单状态机(三角波) 附:verilog语法笔记(持续更新ing) 目录 bash命令 实例1:三角波发生器 电路原理(来自B站-北交李金城老师的PPT,侵删) 代码实现与验 ...
- 如何用FPGA输出正弦波、三角波等
如何用FPGA输出正弦波.三角波等 一.开发工具 二.步骤 1.设置ROM IP核 2.程序编写 一.开发工具 1. 软件平台:Quartus ll 2.芯片:不重要 二.步骤 1.设置ROM IP核 ...
最新文章
- Vim as Python IDE on windows(转)
- aspx后台调用前台jquery_Jquery Ajax调用aspx页面方法
- Java线程池的拒绝策略
- 2259: matrix
- 操作系统:提升电脑开机速度的15个小技巧
- 关于MySQL 查询表数据大小的总结
- ODB——基于c++的ORM映射框架尝试(安装)
- Win7旗舰版系统时间不准确怎么办
- 盈利模型的内容都有哪些?
- 零起点英语_【零起点英语】第154讲:Large Feet 大脚丫
- git配置取消代理_「高手」如何优雅的解决 git 超时
- 一文读懂python数据分析_一文读懂聚类算法
- LevelDb 实现原理(转载)
- Windows上将linux目录映射网络驱动器
- Visual Studio爆炸! -VS2010 SP1 * BETA *已发布,上下文
- python 占用内存过高_PyCharm如何优化?太占内存了,太慢了
- WorldPress博客系统更换域名导致博客访问出错的解决方案
- 怎样让PHP提示错误信息
- 手机显示未连接网络连接到服务器是怎么回事,苹果浏览器显示未连接互联网是什么回事...
- 2021哈工大计算机专业考研参考书,哈尔滨工业大学计算机专业考研参考书目推荐...