基于FPGA的DDS信号发生器的设计Word文件下载.doc
- 文档编号:8431903
- 上传时间:2023-05-11
- 格式:DOC
- 页数:10
- 大小:219KB
基于FPGA的DDS信号发生器的设计Word文件下载.doc
《基于FPGA的DDS信号发生器的设计Word文件下载.doc》由会员分享,可在线阅读,更多相关《基于FPGA的DDS信号发生器的设计Word文件下载.doc(10页珍藏版)》请在冰点文库上搜索。
同时又要满足分辨率计算公式
(1.3)
综合考虑决定的值。
选定了的值后,则由公式(1.3)可 得=,据此可确定相位累加器位数N。
然后由最高输出频率
(1.4)
推出M=,得出相位增量寄存器为S位。
确定波形存储器的地址位数W,本系统中决定寄存个数据值,因此RAM地址为Z位。
一般选用FPGA/CPLD器件作为DDS的实现器件,对于D/A转换器的选择,首先要考虑到D/A转换器的转换速率。
要实现所需的频率,D/A的转换速度要大于,然后根据D/A转换器字长所带来的误差,决定D/A的位数。
由此选择D/A转换器的型号。
3DDS的FPGA实现设计
本设计要求DDS实现的性能指标为:
当系统时钟频率为24MHz时,分辨率为1.43Hz,当相位增量寄存器为19位时,最高输出频率是749731Hz。
(理论上完全可以达到,甚至更高,但是由于受到DA器件及运算放大器的影响,实际中的频率不可能达到)。
根据上面所列公式可以得出:
累加器位数N=24;
相位增量寄存器为19位。
如图3.1所示,DDS系统包括相位增量寄存器、相位累加器、地址寄存器、波形存储器、时钟倍频器及地址发生部分等几个模块。
内部所有模块均用Verilog语言编写或调用maxplus2中的已有的lpm库文件,其顶层设计用原理图的方式进行模块间的连接。
图3.1DDS系统框图
下面就上面向个模块的结构进行论述:
3.1相位累加器
相位累加器在参考时钟的作用下,进行线性相位累加,当相位累加器累加满量时就会产生一次溢出,完成一个周期性的动作,这个周期就是DDS合成信号的一个频率周期,累加器的溢出频率就是DDS输出的信号频率。
相位增量分段寄存器的端口如图3.1.1所示。
根据前面的计算可知,相位增量寄存器需要24位。
图3.1.1相位增量寄存器
图3.1.2是相位增量分段寄存器仿真图,从图中可以看出,在时钟的激励下,累加器的仿真结果是正确的.
图3.1.2累加器的仿真结果
3.2波形存储器
波形存储器实际上就是一个ROM,波形存储器存储的是所生成波形一周期采样256点的数据值,通过地址的改变,所输出的值就会变化,因为,地址不一定是连续变化的,所以所输出的值也不是连续的,在同样的时钟周期下,地址间隔的变化也就造成了生成波形的频率的变化。
地址值每溢出一次,便完成了一个周期的输出。
当改变波形存储器中波形数据时,也就改变了输出波形。
图3.2.1ROM模块
ROM的设计直接调用LPM中的库生成,端口分别为:
时钟输入端clock,输出数据总线daout(7:
0),输入数据总线result[23:
16].
地址总线address(7:
0)是相位累加器输出高8位的数据.输出数据总线douta(7:
0)连接输出缓冲通过FPGA的I/O口输出,作为D/A转换器的输入。
3.3相位增量寄存器及显示模块.
这个模块的功能是接收从单片中传来的数据.从单片机中传递过来的数据为分两部分,第一是频率控制字,即给相位增量寄存器的控制字.第二是将当前的输出频率显示在数码管上.这个模块的底层文件是基于Verilog语言描述的,在顶层上生成相就的功能模块.其生成的原理图如图3.3.1所示:
图3.3.1相位增量寄存器及显示模块
上面的顶层模块简要描述如下:
clock是系统输入时钟,LED_SEG[7..0]是8段数码管的段选,LED_WEI[2..0]是8个数码管的位选。
(这里联接是38译码器的输入端)。
其源程序如下:
moduleled_print(
clock,//输入时钟
led_seg,//数码管段选
led_wei,//数码管位选
Code,
data_clk,
write_data,
);
inputdata_clk;
inputclock;
//时钟输入
input[7:
0]Code;
output[23:
0]write_data;
output[2:
0]led_wei;
//132,133,135
output[7:
0]led_seg;
//131,130,128,122,121,120,119,118
/*********************************************************/
wireclock,rst;
reg[2:
0]led_wei;
reg[7:
0]led_seg;
reg[23:
0]count;
//计数器单元
reg[3:
0]ledbuff;
0]times;
//时分秒要分配的单元
0]seg_count;
0]seg_flag;
regwrite_flag;
always@(posedgedata_clk)//送给FPGA的数据改变时.
begin
seg_count=Code[3:
0];
//数据位
seg_flag=Code[7:
4];
//标志位
case(seg_flag)
//在数码管中显示的数字
4'
b0000:
times[3:
0]<
=seg_count;
b0001:
times[7:
4]<
b0010:
times[11:
8]<
b0011:
times[15:
12]<
b0100:
times[19:
16]<
b0101:
times[23:
20]<
//给控制寄存器中的数据
b0110:
write_data[3:
b0111:
write_data[7:
b1000:
write_data[11:
b1001:
write_data[15:
b1010:
write_data[19:
b1011:
write_data[23:
default:
begin
times<
=times;
write_data<
=write_data;
end
endcase
end
always@(posedgeclock)
begin
if(count==24'
d1200000)//
begin
count=0;
end
else
begin
count=count+1;
//write_data=24'
d699;
end
/******************数码管扫描程序*************************/
always@(count[12:
10])
begin
case(count[12:
10])
3'
h0:
led_wei=3'
b000;
h1:
b001;
h2:
b010;
h3:
b011;
h4:
b100;
h5:
b101;
h6:
b110;
h7:
b111;
default:
led_wei=3'
bzzz;
endcase
ledbuff=4'
ha;
hb;
ledbuff=times[3:
ledbuff=times[7:
ledbuff=times[11:
8];
ledbuff=times[15:
12];
ledbuff=times[19:
16];
ledbuff=times[23:
20];
ledbuff=3'
end
always@(ledbuff)
case(ledbuff)
4'
led_seg=8'
h3f;
//0
h06;
//1
h5b;
//2
h4f;
//3
h66;
//4
h6d;
//5
h7d;
//6
h07;
//7
h8:
h7f;
//8
h9:
h6f;
//9
hb:
h76;
//H
ha:
//Z
hc:
b00;
default:
led_seg=8'
hzz;
endcase
end
endmodule
3.4FPGA与单片机通信接口设计
单片机在读得矩阵键盘的控制字后,必须把相应的数据传递给FPGA。
本实验中单片机所传递的数据有两大部分。
第一是传递给相位增量寄存器的相位增量字。
第二是数码管要显示当前在频率控制字下面的频率输出值。
因为FPGA只负责扫描8个数码管,故其显示的频率值必须是单片机计算好后再将其值传递给FPGA显示。
如图3.4.1所示:
图3.4.1FPGA与单片机通信接口设计
单片机与FPGA接口总共用了9根线,一根时钟线外加8根数据线。
如图3.4.1所示。
每一个时钟下降沿时,单片机传送一个8位的数据到FPGA中。
其中8位宽度的数据线中高四位的值表示的是FPGA内各寄存器内约定好的地址,低四位表示的数要传递过来的数据。
在FPGA内部有下面一段代码:
在单片机每产生一个有下降的时钟信号时,会执行上面一块代码程序。
每次传送8位数据后,进行分离如下:
seg_count=Code[3:
再根据各个标志位的不同,传递给FPGA各个寄存器中不同的数据。
高四位作为标志位,最多可表示16种不同的情况,而本实验最多只用到其中的12种,因此是满足要求的。
3.4顶层框图
图3.4.1生成的顶层框图
4实验总结
通过本次基于FPGA的设计实验,不仅使我熟悉DDS的原理,而且对于单片机与FPGA综合应用也是一次很好的尝试。
本次实验中所到的实验箱中的实验模块有FPGA核心板,AD/DA模块,4*4键盘模块,51单片机模块。
在这次设计实验过程中碰到了很多困难,但是最后都解决了,有缺陷地方就是还可以把键盘扫描部分利用FPGA在Verilog语言的描述下完成此功能,这样可以充分利用FPGA资源,单片机部分只是进行简单的数据处理即可。
关于硬件扫描键盘部分,用Verilog在MaxpluII中实验了很久,但是最终还是没有效果。
总的来说,这次设计实验使我熟悉单片机与FPGA的综合应用。
如果想要进一步提高,还有待于理论的进一步学习。
10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA DDS 信号发生器 设计