数电自主设计
自主设计型实验实验报告
学院:电气工程及自动化学院
姓名:张旭
学号: 1120610831
2014 年12 月
姓名张旭班级1206108 学号1120610831
实验日期节次教师签字成绩
实验名称
基于FPGA频率可调的正弦波发生电路
1.实验目的
(1)利用FPGA产生频率可调的正弦波。
(2)熟练掌握FPGA的用法。
(3)利用MATLAB计算正弦波取点,熟练掌握MATLAB的应用。
2.总体设计方案或技术路线
用FPGA实现电路设计。电路的规模大小可根据自己的需要而设定可将波形数据存入FPGA的ROM中。
正弦波信号发生器是由地址发生器和正弦波数据存储器ROM两块构成,输入为时钟脉冲,输出为8位二进制。
2.1地址发生器的原理
地址发生器实质上就是计数器,ROM的地址是6位数据,相当于64位循环计数器。
2.2只读存储器ROM的设计
(1)、Verilog HDL编程的实现
①基本原理:为每一个存储单元编写一个地址,只有地址指定的存储单元才
能与公共的I/O相连,然后进行存储数据的读写操作。
②逻辑功能:地址信号的选择下,从指定存储单元中读取相应数据
根据相位间隔对正弦信号进行取样、量化、编码,然后储存在EPROM中构成一个正弦查询表,通过查表法产生波形。它是由参考时钟、相位累加器、正弦查询表和D/A转换器组成。
2.3基于Verilog HDL编程的设计
在地址信号的选择下,从指定存储单元中读取相应数据
系统框图如下:
2.4、总体设计框图
2.5程序设计思路:
1)分频器控制读取rom的步长,通过输入变量改变分频器计数器的计数总量,控制分频实验频率可调。
2)制作rom,通过一个函数实现,给函数输入一个地址,通过条件语句输出一个值。
3)调幅(附加),通过在rom的值除以不同的值来控制改变输出信号的幅度。
3.实验电路图
由FPGA模块为DA提供八路输出。
部分源程序:
module sin(
input clk,
input rst, //A7
output[7:0]data//JB,JC,(7~0:A9,B9,A10,C9,C12,A13,C13,D12) );
/////////////////////////////////////////////////
reg[8:0] addr_sin;
always@(posedge clk )
begin
if(9'd499==addr_sin)
addr_sin<=9'b0;
else
addr_sin<=addr_sin+9'b1;
end
//ROM区:
sin500 sin (
.clka(clk), // input clka
.addra(addr_sin), // input [8 : 0] addra
.douta(data) // output [7 : 0] douta
);
Endmodule
4.仪器设备名称、型号
1、Agilent U1252A数字万用表一台
2、数字电路试验箱、子板1台
3、直流稳压电源 1台
4、Agilent DS05032A 示波器1台
5、FPGA系统版一块
5.理论分析或仿真分析结果
波形存储器产生的所需波形的幅值的数字数据通过D/A 转换器转换成模拟信号,这里可由MATLAB 计算正弦波经D/A 转换器转换前的输出量,这里由于 D/A 转换器采用的是0832,为8位DA ,故由FPGA 生成的数字量从0000 0000到1111 1111,精度为1/256,这里通过转换后,可以得到在0V 到5V 范围内的正弦波,此时再添加一级运放来做到2.5V 的偏置。
信号发生器的输出频率0f 可表示为:
N s f M f M f 2..0=?=
式中s f 为系统时钟,f ?为系统分辨率,N 为相位累加器位数,M 为相位累加器的增量。
首先确定系统的分辨率f ?,最高频率m ax f ,及最高频率m ax f 下的最少采样点数min N ,根据需要产生的最高频率m ax f 以及该频率下的最少采样点数min N ,由公式
min max .N f f s ≥
确定系统时钟s f 的下限值。同时又要满足分辨率计算公式
f f N s ?=2
综合考虑决定s f 的值。
选定了s f 的值后,则由公式(1.3)可 得N 2=
f f s ?,据此可确定相位累加器
位数N 。
然后由最高输出频率
M f f o ??=
推出M =S 2,得出相位增量寄存器为S 位。 确定波形存储器的地址位数W ,本系统中决定存入Z 2个数据值,因此ROM 地址为Z 位。
本设计选用FPGA 器件作为DDS 的实现器件,对于D/A 转换器的选择,首先要考虑到D/A 转换器的转换速率。要实现所需的频率,D/A 的转换速度要大于min max .N f ,然后根据D/A 转换器字长所带来的误差,决定D/A 的位数。由此选择D/A 转换器的型号。
利用MATLAB 仿真波形
01234567
050
100
150
200
250
300
6.详细实验步骤及实验结果数据记录(包括各仪器、仪表量程及内阻的记录)
6.1实验步骤
由于XiLinx开发板外部没有DA转换电路,所以,这一次在实验中,我首先用面包板搭好555时钟振荡电路以及外部DA转换电路,然后利用直流稳压电源引出正负12V电源给运放供电,连接FPGA开发板并下载程序,运行,并且利用开发板上的Vcc和Gnd 为555提供电源,为运放提供参考电压。通过电脑为FPGA 下载源程序。
6.2实验部分源程序:
module sin(
input clk,
input rst, //A7
output[7:0]data//JB,JC,(7~0:A9,B9,A10,C9,C12,A13,C13,D12) );
reg[8:0] addr_sin;
always@(posedge clk )
begin
if(9'd499==addr_sin)
addr_sin<=9'b0;
else
addr_sin<=addr_sin+9'b1;
end
//ROM区:
sin500 sin (
.clka(clk), // input clka
.addra(addr_sin), // input [8 : 0] addra
.douta(data) // output [7 : 0] douta
);
Endmodule
6.2实验现象:
7.实验结论
成功输出了频率可调的正弦波,由于通过MATLAB导入的点充分,得到了一条光滑的正弦波。实验充分证明了现代数字电路设计的简便性,成功设计出了ROM来存储正弦波的数字信号。每到来一个时钟,取一个点,由此来实现。
8.实验中出现的问题及解决对策
设计持续多天才成功完成,由于导线及面包板故障,导致多次重复连线,分析电路,最终才完成硬件调试。然后进行编程设计,通过这段时间以来对Verilog HDL的学习,自以为会很顺利,没想到困难重重,编了很久终于搞定了,结果最终编译编译器多次报错,经过长时间的检查,终于发现了自己的多处错误,认真检查更改后,终于成功。
9.本次实验的收获和体会、对电路实验室的意见或建议
自己认真设计了多日的实验电路及参数,在持续两天的试验中,感受了自己设计分析与动手的乐趣,虽然经历了多次的失败,最终成功验证了自己的设计。在试验中,我最深刻的体会就是,做什么事情都需要认真仔细,要具有大胆怀疑的精神。实验过程中,认真检查所有仪器设备。
对于设计实验,一切贵在亲身感受与参与,从中学习。相信下一回会更好!
10.参考文献
[1] 杨春玲王淑娟数字电子技术基础. 哈尔滨:哈尔滨工业大学,2011:6.
[2] 宁改娣金印彬刘涛数字电子技术与接口技术实验教程. 西安电子科技大学,
2013:3.