Verilog期末实验报告―波形发生器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Verilog期末实验报告―波形发生器深圳大学实验报告
课程名称: Verilog使用及其应用
实验名称: 频率可变的任意波形发生器学院: 电子科学与技术学院
专业:电子科学与技术班级: 2
组号: 指导教师: 刘春平报告人: 陈昊学号: 2007160162 实验地点科技楼B115
一、实验目的
应用Verilog进行编写四种波形发生的程序,并结合DE2板与DVCC实验板上的D/A转换器在示波器显示出波形。初步了解Verilog的编程及DE2板的应用,加强对其的实际应用操作能力。
二、实验原理
实验程序分为三部分:
第一、通过计数器实现内置信号分频,并通过外置开关调节频率来控制输出波形的频率。第二、设定ROM中的数值,将波形数据存储到ROM中。
第三、设定波形选择开关。
总体设计方案及其原理说明:
FPGA
图 1-1 系统总体设计方案
DDS是一种把数字信号通过数/模转换器转换成模拟信号的合成技术。它由相位累加器、相幅转换函数表、D/A转换器以及内部时序控制产生器等电路组成。参
考频率f_clk为整个合成器的工作频率,输入的频率字保存在频率寄存器中,经,位相位累加器,累加一次,相位步进增加,经过内部ROM波形表得到相应的幅度值,经过D/A转换和低通滤波器得到合成的波形。p为频率字,即相位增量;参考频率为,_clk;相位累加器的长度为,位,输出频率,_out为:
f_out——输出信号的频率; N————相位累加器的位数;
p———频率控制字(步长); f_clk——基准时钟频率。
图1-2 四种波形单周期的取样示意图段地址基地址 D7 D6 D5 D4 D3 D2 D1 D0
00 000 10
00 001 17
00 010 15
00 011 17
00 100 10
00 101 3
00 110 5
00 111 3
01 000 3
01 001 3
01 010 3
01 011 3
01 100 1
01 101 1
01 110 1
01 111 1
10 000 0
10 001 5
10 010 10
10 011 15
10 100 20
10 101 25
10 110 30
10 111 35
11 000 35
11 001 30
11 010 25
11 011 20
11 100 15
11 101 10
11 110 5
11 111 0
图1-3 函数查找表的设计
三、实验内容
程序编码:
module dds(f_clk,p,choose,data);//端口设定 input [5:0] p; //频率控制字 input[1:0] choose; //波形选择 input f_clk; //内置晶振 output [7:0] data; wire [7:0]data;
reg [5:0] addr,address; reg [5:0] i;
reg f_out;
initial
begin
i<=0;
addr<=0;
f_out<=0;
end
always @(posedge f_clk) //利用计数器实现任意分频
begin
if(i==p) //设定频率控制字p
begin
i=0;
f_out=~f_out;
end
else
i=i+1;
end
function [7:0] romout; //ROM的设定
input[5:0] address; case(address) //各波形初值的预装入0 : romout = 10; //正弦波初值 1 : romout = 17;
2 : romout = 15;
3 : romout = 17;
4 : romout = 10;
5 : romout = 3;
6 : romout = 5;
7 : romout = 3;
8 : romout = 3; //方波初值 9 : romout = 3;
10: romout = 3;
11: romout = 3;
12: romout = 1;
13: romout = 1;
14: romout = 1;
15: romout = 1;
16 : romout = 0; //正三角波初值 17 : romout = 5;
18 : romout = 10;
19 : romout = 15;
20 : romout = 20;
21 : romout = 25;
22 : romout = 30;
23 : romout = 35;
24 : romout = 35; //反三角波初值 25 : romout = 30;
26 : romout = 25;
27 : romout = 20;
28 : romout = 15;
29 : romout = 10;
30 : romout = 5;
31 : romout = 0; default : romout = 10'hxx; endcase endfunction
always@(posedge f_out)
begin
if(addr==8) //波形数据切换