函数信号发生器设计EDA大作业word文档

函数信号发生器设计EDA大作业word文档
函数信号发生器设计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.结果与结论

仿真结果,经过多次调试达到预期效果。本次设计采用了模块化的设计方法,将各个模块分开来设计,设计并仿真好一个模块的电路后再设计另外一个模块,这样便于检查错误和定位修改错误,为最后模块之间的组成提供方便。程序设计值归结于软件的仿真结果,系统的搭建和实物的构造可以借鉴,不能完全照搬!

(注:素材和资料部分来自网络,供参考。请预览后才下载,期待你的好评与关注!)

相关文档
最新文档