函数信号发生器设计EDA大作业word文档
EDA课程设计大作业
设计题目:函数信号发生器设计
学生姓名:高新利
学号: 201312172011
专业班级:通信与信息系统
函数信号发生器
1.设计背景和设计方案
1.1 设计背景
在电子工程、通信工程、自动控制、遥测控制、测量仪器、仪表和计算机等技术领域,经常需要用到各种各样的信号波形发生器。随着集成电路的迅速发展,用集成电路可很方便地构成各种信号波形发生器。用集成电路实现的信号波形发生器与其它信号波形发生器相比,其波形质量、幅度和频率稳定性等性能指标,都有了很大的提高。
函数信号发生器是一种在科研和生产中经常用到的基本波形发生器,随着大规模集成电路的迅速发展,多功能信号发生器已被制作成专用集成电路,例如ICL8038单片函数波形发生器,可以产生精度较高的正弦波、方波、矩形波、锯齿波等多种信号。1.2 设计方案及实现
函数信号发生器由方波产生模块(square),三角波产生模块(san),正弦波产生模块(sin)和输出波形选择模块(choice)组成。总体设计框图如图所示,图中输出q 需要接到外部D/A转换的数据输入端,将数字信号转换为模拟信号,在D/A转换器的输出端即可得到各种不同的函数信号波形。如果输出脉冲波形边沿跳变不理想,可加低通滤波器来加以完善。
将各个模块分开来设计,先设计各个模块的程序,让后将程序生成对应的元件,然后再将这些元件链接到一起组成完整的硬件电路
1.3各模块程序及生成模块
1.3.1 三角波产生模块
模块程序如下:module sanjiao(clk,dout1);
input clk ; //信号源时钟
output [6:0] dout1 ; //8位波形数据输出
rom11 rom11 //调用波形数据存储器LPM_ROM文件:drom.v
(.address(q1), //6位地址信号
.clock(clk), //地址锁存时钟
.q(dout1));
reg [5:0] q1;
reg newclk;
reg [4:0] clk_cnt;
// 时钟分频
always@(posedge clk)
begin newclk <= clk_cnt[1];
clk_cnt <= clk_cnt+1;
end
//地址计数器q1
always@(posedge newclk)
begin
q1<=q1+1;
end
endmodule
生成的元件图:
1.3.4 方波产生模块
模块程序如下:module squ(clk,dout3);
input clk ; //信号源时钟
output [6:0] dout3 ; //8位波形数据输出
rom33 rom33 //调用波形数据存储器LPM_ROM文件:drom.v (.address(q1), //6位地址信号
.clock(clk), //地址锁存时钟
.q(dout3));
reg [5:0] q1;
reg newclk;
reg [4:0] clk_cnt;
// 时钟分频
always@(posedge clk)
begin newclk <= clk_cnt[4];
clk_cnt <= clk_cnt+1;
end
//地址计数器q1
always@(posedge newclk)
begin
q1<=q1+1;
end
endmodule
生成的元件图:
1.3.5 正弦波产生模块
模块程序如下:module sin (clk,dout2);
input clk ; //信号源时钟
output [7:0] dout2 ; //8位波形数据输出
rom22 rom22 //调用波形数据存储器LPM_ROM文件:drom.v (.address(q1), //6位地址信号
.clock(clk), //地址锁存时钟
.q(dout2));
reg [5:0] q1;
reg newclk;
reg [4:0] clk_cnt;
// 时钟分频
always@(posedge clk)
begin newclk <= clk_cnt[4];
clk_cnt <= clk_cnt+1;
end
//地址计数器q1
always@(posedge newclk)
begin
q1<=q1+1;
end
endmodule生成的元件图:
1.3.6 波形选择模块
模块程序如下:module duoxuan (clk2,rst2,A1,A0,q1,q2,q3,data); input clk2;
input rst2;
input A1,A0;
input[6:0] q1,q2,q3;
output [6:0]data;
reg [6:0] data;
always @ (posedge clk2 or negedge rst2)
begin
if(!rst2) data=7'd0;
else begin
case({A1,A0})
2'b00 : data=q1;
2'b01 : data=q2;
2'b10 : data=q3;
2'b11 : data=0;
endcase
end
end
endmodule
生成的元件图:
2.方案实施
reset为复位信号,clk为时钟信号,sel波形选择信号输入口。具体的实现效果为当信号reset为低电平时,既复位端无效。当sel信号为‘000’时选择三角波信号产生模块,波形由选择模块choice上的q[7..0]输出,数字信号波形如图1所示。
图 1三角波
当sel信号为‘001’选择方波信号产生模块,波形由选择模块choice上的q[7..0]输出,数字信号波形如图2所示
图2方波
当sel信号为‘010‘选择正弦波信号产生模块,波形由选择模块choice上的q[7..0]
输出,数字信号波形如图3所示。
图3正弦波
3.结果与结论
仿真结果,经过多次调试达到预期效果。本次设计采用了模块化的设计方法,将各个模块分开来设计,设计并仿真好一个模块的电路后再设计另外一个模块,这样便于检查错误和定位修改错误,为最后模块之间的组成提供方便。程序设计值归结于软件的仿真结果,系统的搭建和实物的构造可以借鉴,不能完全照搬!
(注:素材和资料部分来自网络,供参考。请预览后才下载,期待你的好评与关注!)