正弦信号发生器.docx
《正弦信号发生器.docx》由会员分享,可在线阅读,更多相关《正弦信号发生器.docx(11页珍藏版)》请在冰豆网上搜索。
正弦信号发生器
目录
第一章设计任务及要求………………………………………………………………………1
第二章设计思路…………………………………………………………………………………2
2.1正弦信号发生器原理…………………………………………………………………….2
2.2正弦信号发生器结构……………………………………………………………….......2
2.3程序设计……………………………………………………………………3
2.3.1循环计数器……………………………………………………………………3
2.3.2频率动态显示…………………………………………………………………….3
第三章设计步骤…………………………………………………………………………………4
3.1新建工程.………………………………………………………………………………..4
3.2定制LPM_ROM……………………………………………….……………………………4
3.2.1建立.Mif格式文件……….…………………………………………………….4
3.2.2LPM_RAM的设置和调用…………………………………………………………5
3.4生成计数器模块…………………..……………………………………………………7
3.5生成动态显示模块………………….…………………………………………………..7
3.6电路图设计………………………………………….………………………………….7
3.7编译并定义引脚,……………………………………..…………………………………7
3.8仿真………………………………………………………………………………………8
3.9选择硬件并下载…………………………………………...…………………………….9
第四章感受及启发…………………………………………………………………………….10
第一章设计任务及要求
设计一个正弦信号发生器,波形采样点为32点,8bit位宽输出正弦波,频率范围为100-10KHZ,且频率可预置,并在实验系统上实测,包括SignalTapII测试、FPGA中ROM的在系统数据读写测试,要求频率可在数码管显示,信号输出后经滤波器驱动蜂鸣器或利用示波器测试。
第二章设计思路
2.1正弦信号发生器原理
由五位计数器构成的地址发生器产生地址从而使正弦波数据存储ROM输出相应地址中的波信号数据。
2.2正弦信号发生器结构
图一设计框图
2.3程序设计
2.3.1循环计数器
Modulejishu(clk,cnt5,rst);
inputclk,rst;
output[4:
0]cnt5;
reg[4:
0]cnt;wireLD;
always@(posedgeclkorposedgeLDornegedgerst)
begin
if(!
rst)cnt<=5'b00000;
elseif(LD)cnt<=5'b00000;
elsecnt<=cnt+1;
end
assigncnt5=cnt;
assignLD=(cnt==32);
endmodule
2.3.2频率动态显示
Modulexianshi(sel,clk,LED7S,reset);
inputclk;
inputreset;
output[6:
0]LED7S;
output[2:
0]sel;
reg[6:
0]LED7S;
reg[2:
0]sel;
always@(posedgeclk)
begin
if(reset==1'b0)
sel<=3'b000;
elseif(sel==3'b100)
sel<=3'b000;
else
sel<=sel+3'b001;
end
always@(posedgeclk)
begin
if(reset==1'b0)
LED7S<=7'b0111111;
elseif(sel==3'b000)
LED7S<=7'b0111111;
elseif(sel==3'b001)
LED7S<=7'b0111111;
elseif(sel==3'b010)
LED7S<=7'b0111111;
elseif(sel==3'b011)
LED7S<=7'b0000110;
elseif(sel==3'b100)
LED7S<=7'b0111111;
end
endmodule
(注:
正弦发生器预置频率为10KHZ)
第三章设计步骤
3.1新建工程
通过file---newprojectwizard新建工程lpm1。
3.2定制LPM_ROM
3.2.1建立.Mif格式文件
用软件Mif_Maker2010生成波形采样点为32点,8bit位宽输出正弦波,频率为10KHZ正弦波的.mif文件data.mif.将生成的mif文件用记事本打开可见此正弦波数据如下:
DEPTH=32;
WIDTH=8;
ADDRESS_RADIX=HEX;
DATA_RADIX=HEX;
CONTENT
BEGIN
0000:
0080;
0001:
0098;
0002:
00B0;
0003:
00C6;
0004:
00DA;
0005:
00EA;
0006:
00F5;
0007:
00FD;
0008:
00FF;
0009:
00FD;
000A:
00F5;
000B:
00EA;
000C:
00DA;
000D:
00C6;
000E:
00B0;
000F:
0098;
0010:
007F;
0011:
0067;
0012:
004F;
0013:
0039;
0014:
0025;
0015:
0015;
0016:
000A;
0017:
0002;
0018:
0000;
0019:
0002;
001A:
000A;
001B:
0015;
001C:
0025;
001D:
0039;
001E:
004F;
001F:
0067;
END;
3.2.2LPM_ROM的设置和调用
Tools---megawizardplug-inmanager---createanewcustonmegafunctionvariation------……
图二
图三
图四
图五
3.4生成计数器模块
新建jishu.v文件输入计数器程序编译成功后通过:
file---create\update---createsymbolfilesforcurrentfile生成jishu.bsf。
3.5生成动态显示模块
新建xianshi.v文件输入动态显示频率程序编译成功后通过:
file---create\update---createsymbolfilesforcurrentfile生成xianshi.bsf。
3.6电路图设计
新建顶层文件lpm1.bdf文件并导入计数器,正弦波数据存储ROM,动态显示三个模块,然后添加输入输出引脚完成RTL电路图;
3.7编译并定义引脚
完成后RTL电路图见下图:
图六正弦信号发生器RTL电路图
3.8仿真
数据见下图:
图七仿真
3.9选择硬件并下载
下载程序后用导线正确连接各定义引脚。
当正弦信号发生器输出引脚接蜂鸣器时蜂鸣器会发出连续的滴滴声。
图八硬件连接及效果图
第四章感受及启发
这次课程设计从基本思路到最终设计的完成花了好几天的时间,最终得到结果真的不容易。
在做课设的日子里,可以说是苦多于甜,但是可以学的到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。
特别是当每一个子模块编写调试成功时,心里特别的开心。
但是在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。
其次,在连接各个模块的时候一定要注意细心,才能得出正确的结果,否则,出现任何一点小的误差就会导致整个文件系统的编译出现错误提示,在器件的选择上也有一定的技巧,只有选择了合适当前电路所适合的器件,编译才能得到完满成功。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这次课设遇到了各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
总的来说,这次设计的正弦信号发生器还是比较成功的,在设计中遇到了很多问题,最后在老师的辛勤的指导和同学的帮助下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。
最后,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
在这次设计中,我也深深地体会到“细节决定成败”这句话的真正含义,也许就因为一个小的细节就会导致设计的失败。
这次设计也启发了我在以后的学习中一定要耐心、细心、认真,不可粗枝大叶。