版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PAGE PAGE 26西北工业大学课程设计报告(bogo) 题 目: 波形发生器 学 院 自动化学院(xuyun)专 业 自动化 班 级 09031201 日 期 2015 年 1 月 15 日 摘要(zhiyo)1 题目(tm) 本次实验(shyn)主要是以FPGA作为(zuwi)基础,制作一个简易波形发生器,不仅可以显示学号,同时可以通过按键输入产生波形, 并且可以根据需要按键修改波形以及频率。2 要求2.1显示学号(1)采用数码管显示。(2)循环显示两个人的学号后四位。2.2按键输入产生波形(1)根据标准键盘输入不同,分别输出正弦波、方波、三角波(频率=1KHz)。(2)根据标准键盘改
2、变频率(频率变化范围:1KHz-10KHz,每次频率变化1KHz)。(3)输出频率在数码管上显示(用模块PCF8591进行D/A转化)。3 设计平台与基础3.1 设计(shj)平台与仿真工具Quartus II是一种(y zhn)强有力的提供(tgng)了EDA工具,是美国altera公司推出的,它完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:可利用原理图、结构框图、Verilog HDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;芯片(电路)平面布局连线编辑;Logic Lock增量设计方法,可建立并优化系统,然后添加对原始系统的性能影响较小或无影响
3、的后续模块;功能强大的逻辑综合工具;完备的电路功能仿真与时序逻辑仿真工具;定时/时序分析与关键路径延时分析;可使用Signal Tap II逻辑分析工具进行嵌入式的逻辑分析;支持软件源文件的添加和创建,并将它们链接起来生成编程文件;使用组合编译方式可一次完成整体设计流程;自动定位编译错误;高效的期间编程与验证工具;可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件;能生成第三方SOPC软件使用的VHDL网表文件和Verilog网表文件。测试采用了Quartus II的内嵌式逻辑分析仪内嵌式逻辑分析仪三项主要优点:1. 它们的使用不增加引脚。可通过FPGA 上已有的专门JTA
4、G引脚访问,即使没有其它可用引脚,这种调试方法也能得到内部可视能力。2. 简单的探测。探测包括把结点路由到内部逻辑分析仪的输入,不需要担心为得到有效信息,应如何连接到电路板上,也不存在信号完整性问题。3. 内核是便宜的。FPGA厂商把他们的业务模型建立于用芯片所获取价值的基础上,所以所用的调试IP 通常能以低于$1,000美元的价格获得。3.2芯片方案3.2.1 FPGA器件的选择由于Altera大学计划较为普及,设计并平台搭建方便,故采用Altera FPGA。Altera 的主流FPGA分为两大类,一种侧重低成本应用,容量中等,性能可以满足一般的逻辑设计要求,如Cyclone,Cyclon
5、e II;还有一种侧重于高性能应用,容量大,性能满足各类高端应用,如Startix,Stratix II等,用户可以根据自己实际应用要求进行选择。在性能可以满足的情况下,优先选择低成本器件。Cyclone(飓风):Altera中等规模FPGA,2003年推出,0.13um工艺,1.5v内核供电,与Stratix结构类似,是一种低成本FPGA系列,是目前主流产品,其配置芯片也改用全新(qun xn)的产品。Cyclone II: 2005年开始推出,90nm工艺,1.2v内核供电,属于低成本FPGA,性能(xngnng)和Cyclone相当,提供了硬件乘法器单元。Cyclone III:Cycl
6、one III FPGA提供丰富(fngf)的逻辑 HYPERLINK /view/87697.htm t /_blank 存储器和DSP功能功耗更低。Cyclone 即可以满足本次课题的设计需求,所以本课题选用Cyclone III。3.2.2 D/A芯片选型PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。PCF8591具有4个模拟输入、1个模拟输出和1个串行IC HYPERLINK /view/653587.htm t /view/_blank 总线接口。PCF8591的3个地址 HYPERLINK /view/641241.htm t /view/_bl
7、ank 引脚A0, A1和A2可用于硬件地址 HYPERLINK /view/3281.htm t /view/_blank 编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。功能:【1】PCF8591的功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit数模转换。【2】PCF8591的最大转化速率由I2C总线的最大速率决定。特性:【1】单独供电【2】PCF8591的操作电压范围2.5V-6V【3】低待机电流【4】通过I2C总线串行输入/输出【5】PCF85
8、91通过3个硬件地址 HYPERLINK /view/641241.htm t _blank 引脚寻址【6】PCF8591的采样率由I2C总线速率决定【7】4个模拟输入可编程为单端型或差分输入【8】自动增量频道选择【9】PCF8591的模拟电压范围从VSS到VDD【10】PCF8591内置跟踪保持电路【11】8-bit逐次逼近 HYPERLINK /view/990260.htm t _blank A/D转换器【12】通过1路模拟输出实现DAC增益4 方案设计4.1 系统(xtng)介绍利用FPGA技术的强大功能,实现(shxin)A/D转换,信号采集并显示采集信号的幅度、频率。并利用D/A转
9、换产生幅度、频率可调的方波、正弦波、三角波。4.2系统(xtng)设计方案4.2.1工作原理系统框图:信号产生部分:信号发生器采用D/A设计方案。首先在FPGA中设计预先定制好的波形发生ROM表,然后键盘控制FPGA读取ROM表中写好的数据,送至D/A转换芯片后输出波形。同时,由键盘输入控制,转换读取数据的ROM表格,来转换输出波形的种类;改变FPGA读取ROM表的读数间隔来改变输出信号的频率。信号测量部分:将被测信号经过放大器放大到可以被比较器识别的幅度值,经过比较器过零比较,产生同频率的方波信号,可以被FPGA直接识别,进行计数,经过FPGA内部数据处理,计算出被测信号的频率值,再由液晶显
10、示。4.3单元(dnyun)电路设计4.3.1 输入(shr)设计输入设计采用PS2键盘输入,即通过(tnggu)按键选择输出波形是正弦波、三角波还是方波,同时也通过键盘输入来改变波形的频率。4.3.2 波形发生模块由于波形发生控制器和波形数据ROM都是利用硬件描述语言编程实现的,所以统称为波形发生模块。波形发生控制器的作用是利用FPGA选择产生正弦波或者三角波,然后再发出地址信号,取ROM中存好的正弦波或三角波的采样数据。 波形发生模块包括波形切换和频率设置两个进程。切换进程的作用是完成通过按键来选择输出三角波或者三角波。频率设置进程主要是对输出的频率进行设置,只要合适的改变采样点的时间间隔
11、就可完成频率设置。ROM数据存储模块主要是用来存储正弦波或者三角波的数据。当接收来自FPGA的地址信号后,将从数据线输出相应的波形数据,这样便得到数字化的波形。 4.3.3 D/A转换D/A选用PCF8591作为主要波形发生芯片。引脚图如图1所示,结构图如图2示。各引脚说明如下:5.电路图D/A与FPGA扩展接口相连接(linji),搭成硬件连接系统,在此基础之上,设计软件代码,用FPGA控制D/A的工作,和两者之间互相配合。如图所示。系统(xtng)原理图6.测试方法(1)用示波器观察产生(chnshng)波形;(2)在液晶屏上读取信号(xnho)频率值;7.部分(b fen)代码和软件程序
12、FPGA控制AD控制状态机P1: process(present_state,next_state,AD_INT) begin case present_state is when AD_IDLE = AD_CS=0;AD_WR=1;AD_RD=0; next_state AD_WR = 0;AD_CS = 0; AD_RD = 0;next_state AD_WR = 1;AD_CS = 0; AD_RD = 0;if AD_INT=1 THENnext_state = AD_WAIT;ELSEnext_state AD_CS = 0; AD_WR = 0; AD_RD = 0; next_
13、state AD_CS = 0;AD_WR = 1; AD_RD = 0; next_state next_state da_cs=1;da_wr=1;da_stateda_cs=0;da_wr=1;da_stateda_cs=0;da_wr=0;da_stateda_out=dadatain;da_stateda_statenull;end case;end if;end process p2;FPGA控制频率采集(cij)程序p3:process(clkin,temp1,temp2,temp3,temp4,temp5,temp6)beginif clr=0 then temp1=0000;
14、temp2=0000;temp3=0000;temp4=0000;temp5=0000;temp6=0000;temp7=0000;temp8=0000;elsif rising_edge(clkin) then if sysclk=1 then if temp1=1001 then temp1=0000; if temp2=1001 then temp2=0000; if temp3=1001 then temp3=0000; if temp4=1001 then temp4=0000; if temp5=1001 then temp5=0000; if temp6=1001 then te
15、mp6=0000; if temp7=1001 then temp7=0000; if temp8=1001 then temp8=0000; else temp8=temp8+1;end if; else temp7=temp7+1;end if; else temp6=temp6+1;end if; else temp5=temp5+1;end if; else temp4=temp4+1;end if; else temp3=temp3+1;end if; else temp2=temp2+1;end if; else temp1=temp1+1;end if; else if temp
16、1/=0000 or temp2/=0000 or temp3/=0000 or temp4/=0000 or temp5/=0000 or temp6/=0000 or temp7/=0000 or temp8/=0000 then dat1=temp1;dat2=temp2;dat3=temp3;dat4=temp4; dat5=temp5;dat6=temp6;dat7=temp7;dat8=temp8; temp1=0000;temp2=0000;temp3=0000;temp4=0000;temp5=0000;temp6=0000; temp7=0000;temp8=0000; en
17、d if; end if;end if;end process p3;建立(jinl)ROM表:always (posedge sin_clk) begin /sin case(count_4)8d001:data_sin= 8d128; 8d002:data_sin= 8d134 ;8d003:data_sin= 8d140 ;8d004:data_sin= 8d146 ;8d005:data_sin= 8d152 ;8d006:data_sin= 8d158 ;8d007:data_sin=8d165 ;8d008:data_sin=8d170 ;8d009:data_sin=8d176
18、;8d010:data_sin=8d182 ;8d011:data_sin=8d188 ;8d012:data_sin=8d193 ;8d013:data_sin=8d198 ;8d014:data_sin=8d203 ;8d015:data_sin=8d208 ;8d016:data_sin=8d213 ;8d017:data_sin=8d218 ;8d018:data_sin=8d222 ;8d019:data_sin=8d226 ;8d020:data_sin=8d230 ;8d021:data_sin=8d234 ;8d022:data_sin=8d237 ;8d023:data_si
19、n=8d240 ;8d024:data_sin=8d243 ;8d025:data_sin=8d245 ;8d026:data_sin=8d248 ;8d027:data_sin=8d250 ;8d028:data_sin=8d251 ;8d029:data_sin=8d253 ;8d030:data_sin=8d254 ;8d031:data_sin=8d254 ;8d032:data_sin=8d255 ;8d033:data_sin=8d255 ;8d034:data_sin=8d255 ;8d035:data_sin=8d254 ;8d036:data_sin=8d254 ;8d037
20、:data_sin=8d253 ;8d038:data_sin=8d251 ;8d039:data_sin=8d250 ;8d040:data_sin=8d248 ;8d041:data_sin=8d245 ;8d042:data_sin=8d243 ;8d043:data_sin=8d240 ;8d044:data_sin=8d237 ;8d045:data_sin=8d234 ;8d046:data_sin=8d230 ;8d047:data_sin=8d226 ;8d048:data_sin=8d222 ;8d049:data_sin=8d218 ;8d050:data_sin=8d21
21、3 ;8d051:data_sin=8d208 ;8d052:data_sin=8d203 ;8d053:data_sin=8d198 ;8d054:data_sin=8d193 ;8d055:data_sin=8d188 ;8d056:data_sin=8d182 ;8d057:data_sin=8d176 ;8d058:data_sin=8d170 ;8d059:data_sin=8d165 ;8d060:data_sin=8d158 ;8d061:data_sin=8d152 ;8d062:data_sin=8d146 ;8d063:data_sin=8d140 ;8d064:data_
22、sin=8d134 ;8d065:data_sin=8d128 ;8d066:data_sin=8d121 ;8d067:data_sin=8d115 ;8d068:data_sin=8d109 ;8d069:data_sin=8d103 ;8d070:data_sin=8d97 ;8d071:data_sin=8d90 ;8d072:data_sin=8d85 ;8d073:data_sin=8d79 ;8d074:data_sin=8d73 ;8d075:data_sin=8d67 ;8d076:data_sin=8d62 ;8d077:data_sin=8d57 ;8d078:data_
23、sin=8d52 ;8d079:data_sin=8d47 ;8d080:data_sin=8d42 ;8d081:data_sin=8d37 ;8d082:data_sin=8d33 ;8d083:data_sin=8d29 ;8d084:data_sin=8d25 ;8d085:data_sin=8d21 ;8d086:data_sin=8d18 ;8d087:data_sin=8d15 ;8d088:data_sin=8d12 ;8d089:data_sin=8d10 ;8d090:data_sin=8d7 ;8d091:data_sin=8d5 ;8d092:data_sin=8d4
24、;8d093:data_sin=8d2 ;8d094:data_sin=8d1 ;8d095:data_sin=8d1 ;8d096:data_sin=8d0 ;8d097:data_sin=8d0 ;8d098:data_sin=8d0 ;8d099:data_sin=8d1 ;8d100:data_sin=8d1 ;8d101:data_sin=8d2 ;8d102:data_sin=8d4 ;8d103:data_sin=8d5 ;8d104:data_sin=8d7 ;8d105:data_sin=8d10 ;8d106:data_sin=8d12 ;8d107:data_sin=8d
25、15 ;8d108:data_sin=8d18 ;8d109:data_sin=8d21 ;8d110:data_sin=8d25 ;8d111:data_sin=8d29 ;8d112:data_sin=8d33 ;8d113:data_sin=8d37 ;8d114:data_sin=8d42 ;8d115:data_sin=8d47 ;8d116:data_sin=8d52 ;8d117:data_sin=8d57 ;8d118:data_sin=8d62 ;8d119:data_sin=8d67 ;8d120:data_sin=8d73 ;8d121:data_sin=8d79 ;8d
26、122:data_sin=8d85 ;8d123:data_sin=8d90 ;8d124:data_sin=8d97 ;8d125:data_sin=8d103 ;8d126:data_sin=8d109 ;8d127:data_sin=8d115 ;8d128: begin data_sin=8d121 ;count_4=25d0;endendcase endalways (posedge div_clk) begin /iic for sjb numb=numb+8b0000001; case(numb) 8h01:scl=1; /s 8h02:sda=0; 8h03:scl=0; /a
27、ddress 8h04:sda=1; 8h05:scl=1; 8h06:scl=0; 8h07:sda=0; 8h08:scl=1; 8h09:scl=0; 8h0a:sda=0; 8h0b:scl=1; 8h0c:scl=0; 8h0d:sda=1; 8h0e:scl=1; 8h0f:scl=0; 8h10:sda=0; 8h11:scl=1; 8h12:scl=0; 8h13:sda=0; 8h14:scl=1; 8h15:scl=0; 8h16:scl=1; 8h17:scl=0; 8h18:scl=1; 8h19:scl=0; 8h1a:scl=1; /ack 8h1b:scl=0;
28、8h1c:sda=1; /4 8h1d:scl=1; 8h1e:scl=0; 8h1f:sda=1; 8h20:scl=1; 8h21:scl=0; 8h22:sda=0; 8h23:scl=1; 8h24:scl=0; 8h25:scl=1; 8h26:scl=0; 8h27:scl=1; 8h28:scl=0; 8h29:scl=1; 8h2a:scl=0; 8h2b:scl=1; 8h2c:scl=0; 8h2d:scl=1; 8h2e:scl=0; 8h2f:scl=1; 8h30:scl=0; /ack 8h31:sda=data7; 8h32:scl=1; 8h33:scl=0;
29、8h34:sda=data6; 8h35:scl=1; 8h36:scl=0; 8h37:sda=data5; 8h38:scl=1; 8h39:scl=0; 8h3a:sda=data4; 8h3b:scl=1; 8h3c:scl=0; 8h3d:sda=data3; 8h3e:scl=1; 8h3f:scl=0; 8h40:sda=data2; 8h41:scl=1; 8h42:scl=0; 8h43:sda=data1; 8h44:scl=1; 8h45:scl=0; 8h46:sda=data0; 8h47:scl=1; 8h48:scl=0; 8h49:sda=0; /ack 8h4
30、a:scl=1; 8h4b:scl=0; 8h4c:scl=1; /stop 8h4d:sda=1; endcase end always (posedge plxs_clk) begin /sjb xianshi case(count_jc) 16d50000:scpl=8b11111001; 16d25000:scpl=8b10100100; 16d16666:scpl=8b10110000; 16d12500:scpl=8b10011001; 16d10000:scpl=8b10010010; 16d08333:scpl=8b10000010; 16d07142:scpl=8b11111
31、000; 16d06250:scpl=8b10000000; 16d05555:scpl=8b10010000; 16d05000:scpl=8b10001000; endcase endalways (posedge div_clk) begin /iic for fb numb_fb=numb_fb+8b0000001; case(numb_fb) 8h01:scl1=1; /s 8h02:sda1=0; 8h03:scl1=0; /address 8h04:sda1=1; 8h05:scl1=1; 8h06:scl1=0; 8h07:sda1=0; 8h08:scl1=1; 8h09:s
32、cl1=0; 8h0a:sda1=0; 8h0b:scl1=1; 8h0c:scl1=0; 8h0d:sda1=1; 8h0e:scl1=1; 8h0f:scl1=0; 8h10:sda1=0; 8h11:scl1=1; 8h12:scl1=0; 8h13:sda1=0; 8h14:scl1=1; 8h15:scl1=0; 8h16:scl1=1; 8h17:scl1=0; 8h18:scl1=1; 8h19:scl1=0; 8h1a:scl1=1; /ack 8h1b:scl1=0; 8h1c:sda1=1; /4 8h1d:scl1=1; 8h1e:scl1=0; 8h1f:sda1=1;
33、 8h20:scl1=1; 8h21:scl1=0; 8h22:sda1=0; 8h23:scl1=1; 8h24:scl1=0; 8h25:scl1=1; 8h26:scl1=0; 8h27:scl1=1; 8h28:scl1=0; 8h29:scl1=1; 8h2a:scl1=0; 8h2b:scl1=1; 8h2c:scl1=0; 8h2d:scl1=1; 8h2e:scl1=0; 8h2f:scl1=1; 8h30:scl1=0; /ack 8h31:sda1=data_fb7; 8h32:scl1=1; 8h33:scl1=0; 8h34:sda1=data_fb6; 8h35:sc
34、l1=1; 8h36:scl1=0; 8h37:sda1=data_fb5; 8h38:scl1=1; 8h39:scl1=0; 8h3a:sda1=data_fb4; 8h3b:scl1=1; 8h3c:scl1=0; 8h3d:sda1=data_fb3; 8h3e:scl1=1; 8h3f:scl1=0; 8h40:sda1=data_fb2; 8h41:scl1=1; 8h42:scl1=0; 8h43:sda1=data_fb1; 8h44:scl1=1; 8h45:scl1=0; 8h46:sda1=data_fb0; 8h47:scl1=1; 8h48:scl1=0; 8h49:
35、sda1=0; /ack 8h4a:scl1=1; 8h4b:scl1=0; 8h4c:scl1=1; /stop 8h4d:sda1=1; endcase end always (posedge plxs_clk) begin /fb xianshi case(count_jcfb) 16d50000:scpl_fb=8b11111001; 16d25000:scpl_fb=8b10100100; 16d16666:scpl_fb=8b10110000; 16d12500:scpl_fb=8b10011001; 16d10000:scpl_fb=8b10010010; 16d08333:sc
36、pl_fb=8b10000010; 16d07142:scpl_fb=8b11111000; 16d06250:scpl_fb=8b10000000; 16d05555:scpl_fb=8b10010000; 16d05000:scpl_fb=8b10001000; endcase end always (posedge div_clk) begin /iic for sin numb_sin=numb_sin+8b0000001; case(numb_sin) 8h01:scl2=1; /s 8h02:sda2=0; 8h03:scl2=0; /address 8h04:sda2=1; 8h
37、05:scl2=1; 8h06:scl2=0; 8h07:sda2=0; 8h08:scl2=1; 8h09:scl2=0; 8h0a:sda2=0; 8h0b:scl2=1; 8h0c:scl2=0; 8h0d:sda2=1; 8h0e:scl2=1; 8h0f:scl2=0; 8h10:sda2=0; 8h11:scl2=1; 8h12:scl2=0; 8h13:sda2=0; 8h14:scl2=1; 8h15:scl2=0; 8h16:scl2=1; 8h17:scl2=0; 8h18:scl2=1; 8h19:scl2=0; 8h1a:scl2=1; /ack 8h1b:scl2=0; 8h1c:sda2=1; /4 8h1d:scl2=1; 8h1e:scl2=0; 8h1f:sda2=1; 8h2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 前列腺炎症状解析及护理经验交流
- 呼吸道传染病科普
- 卵巢囊肿症状解析及护理技巧指南
- 小班躲闪体能训练教案
- 鼻窦炎病情分析与护理指导手册
- 肺动脉高压治疗方案
- 偏瘫手功能训练
- 颈椎病常见症状及护理要点
- 骨质疏松症常见症状及综合护理指南
- 儿童核心稳定训练
- 四川省自贡市、遂宁市、广安市等2024-2025学年高二上学期期末考试 数学 含解析
- 高素质农民培训行政第一课
- 大学公寓楼长述职报告
- 《某工程船尾部起重机结构设计与仿真探析》9700字【论文】
- 2025年鹿角胶项目可行性研究报告
- 士林变频器说明书
- 2024年08月山东莱商银行社会招考(日照地区)笔试历年参考题库附带答案详解
- 工程合同管理试题带答案
- 2024-2030年中国磷苯妥英钠行业市场发展规模及投资可行性分析报告
- 精癃(前列腺增生)中医临床路径及入院标准2020版
- 【MOOC】现代教育技术-淮阴师范学院 中国大学慕课MOOC答案
评论
0/150
提交评论