首页 / 资料库 / 电路图
基于Verilog实现的DDS任意波形发生器
2023-09-18 19:07:00
DDS是从相位的概念直接合成所需波形的一种频率合成技术。不仅可以产生不同频率的正弦波,而且可以控制波形的初始相位。本文为大家介绍基于Verilog实现的DDS任意波形发生器。
总体方案实现及系统框图
在该DDS电路组成上,包括基准时钟、频率累加器、相位累加器、幅度/相位转换电路。频率累加器对输入信号进行累加运算,产生频率控制数据,相位累加器对代表频率的M位二进制码进行累加运算,产生后面波形存储器所需的查表地址,幅度/相位转换电路实际上就是一个波形存储器,供查表使用,读出数据送人D/A转换器和低通滤波器。
系统设计原理框图如下:
系统设计原理框图
系统组成模块简介
1、顶层模块
顶层模块是系统程序的主模块,它负责将fom查找表、相位累加等模块组装在一起,通过调用的关系使它们组合成为一个有机的整体。在顶层模块中,定义了参考时钟的输入,复位端口,波形输出、频率控制字等。
2、相位累加器模块
相位累加器是决定系统性能的关键部分,主要是利用频率控制字和相位控制字来累加出寻址地址。相位累加器在基准频率信号clk的控制下以频率控制字data为步长进行累加运算,产生需要的频率控制数据,在时钟的控制下把累加的结果作为波形存储器ROM的地址,实现对波形存储器ROM的寻址。由于相位累加模块通过C语言实现比较容易,故我们没有单独成立一个模块,而是将它集成到了顶层模块的一个always语句块中:
case(choose_wave) 2‘b00:begin
sin_ena <= 1’b1;
cos_ena <= 1‘b0;
sawtooth_ena <= 1’b0;
triangle_ena <= 1‘b0;
if(ADD_B > 256) ADD_B <= 0; //关键代码,实现相位累加的功能
else ADD_B <= ADD_A + ADD_B;
end
2’b01:begin
cos_ena <= 1‘b1;
sin_ena <= 1’b0;
sawtooth_ena <= 1‘b0;
triangle_ena <= 1’b0;
if(ADD_B > 256) ADD_B <= 0; //关键代码,实现相位累加的功能
else ADD_B <= ADD_A + ADD_B;
end
2‘b10:begin
sin_ena <= 1’b0;
cos_ena <= 1‘b0;
sawtooth_ena <= 1’b1;
triangle_ena <= 1‘b0;
if(ADD_B > 256) ADD_B <= 0; //关键代码,实现相位累加的功能
else ADD_B <= ADD_A + ADD_B;
end
2’b11:begin
sin_ena <= 1‘b0;
cos_ena <= 1’b0;
sawtooth_ena <= 1‘b0;
triangle_ena <= 1’b1;
if(ADD_B > 256) ADD_B <= 0; //关键代码,实现相位累加的功能
else ADD_B <= ADD_A + ADD_B;
end
default:begin
ADD_B <= 9‘b0;
sin_ena <= 1’b0;
cos_ena <= 1‘b0;
sawtooth_ena <= 1’b0;
triangle_ena <= 1‘b0;
end
endcase
在程序中还出现了一个变量(wave_choose)这是一个用来选择所要输出波形的一个变量,通过它可以控制输出的波形种类(正弦波,余弦波,三角波,锯齿波)。但是由于在设计的时候没有考虑到存在负值的影响,导致最后综合的结果不正确,经过询问老师知道修改方法是将rom查找表中所有采样点的电压负值全部抬高,消除负值,但是由于时间的原因没有来得及修改,也不知道方案修改的结果。
3、查找表
本模块实现的是一个rom存贮器,用于存储采样的波形数据,并提供地址查找的功能。具体实现的过程:
1) 首先使用数学工具计算得到波形采样点,生成mif文件
2) 导入数据采样点,给每一个采样点分配地址,并提供外部寻址的接口,此过程可以通过Quartas Ⅱ来辅助完成
由于我们组的设计时在modelsim下进行的,modelsim面向的是仿真,它不会产生所谓的“rom”这种实际的电路,所以我们没有采用这样的方法,而是简单的使用case语句来实现。虽然这样也能得到预期的效果,但是它却没有真正的生成一个“rom”,根据我组的综合结果来看,使用case语句生成的是一个与输入相关的复杂的逻辑网络,而不是rom那样有一定规则的电路结构。一下是我们使用C语言产生采样点的程序:
void main(){ int i,j = 0;;
FILE *fp;
fp=fopen(“data.txt”,“w”);
for(i=0;i<=256;i++){
//j=255*sin(2*3.14159/256*i)+0.5;//四舍五入
fprintf(fp,“i=%d,\tj=%d\n”,i,j); }
fclose(fp); }
最新内容
手机 |
相关内容
创造多样信号的万能工具:函数/任意
创造多样信号的万能工具:函数/任意波形发生器,函数,波形,信号,工具,创造,时钟,函数/任意波形发生器是一种用于产生各种形状和频率的比较器芯片和运放电路的区别
比较器芯片和运放电路的区别,运放,芯片,比较器,信号处理,响应,需求,比较器芯片和运放电路是常用的电子元件,它们在电路设计和信号处新能源电驱动系统中电流传感器的应
新能源电驱动系统中电流传感器的应用情况分析,情况,系统,实时,故障,监测,信号,随着新能源汽车的不断发展,电动机、电池和电控系统等高速开关芯片的解决方法-泰克TBS20
高速开关芯片的解决方法-泰克TBS2000搭配TCP0030A电流探头,搭配,探头,芯片,解决方法,可靠性,输入,高速开关芯片是一种用于控制高速铌酸锂的应用-射频滤波器
铌酸锂的应用-射频滤波器,滤波器,通道,频率,损耗,性能,封装,铌酸锂(LiNbO3)是一种重要的晶体材料,具有优异的光学、电学和声学性能,广泛什么是虚拟示波器,虚拟示波器的组成
什么是虚拟示波器,虚拟示波器的组成、特点、原理、分类、操作规程及发展趋势,示波器,虚拟,发展趋势,分类,信号,数字,TPS2491DGSR虚拟全数字波束形成芯片的特性和应用场
全数字波束形成芯片的特性和应用场景,应用场景,芯片,数字,数字信号处理,调整,灵活性,全数字波束形成芯片是一种集成电路芯片,用于实什么是光电液位传感器,光电液位传感
什么是光电液位传感器,光电液位传感器的组成、特点、原理、分类、操作规程及发展趋势,传感器,分类,发展趋势,信号,用于,信号处理,IRF