




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于FPGA的典型开发系统设计实例-函数信号发生器落潇整理2013/11/26开篇:如果你还没有硬件平台,那么Quartus软件仿真也可以完成你的梦想。1.功能描述利用GW48-CK实验开发系统设计一个函数信号发生器, 要求能够输出三角波、方波、梯形波、阶梯波等波形,可通过按键选择输出不同波形。2.设计思路函数信号发生器的原理框图如图1所示。FPGA芯片选用ACEX 1K30TC144-3, D/A 选用8位数模转换器DAC0832,滤波器采用有源滤波,GW48-CK实验开发系统选择模式5。 图1多波形函数信号发生器原理框图3.系统程序设计首先采用VHDL语言分别编写锯齿波(斜降、三角波、锯齿
2、波(斜升、阶梯波(上升、正弦波、方波、梯形波、双阶梯波以及八选一数据选择器的程序,各程序如下:3.1 锯齿波(斜降程序LIBRARY IEEE;USE IEEE. STD_LOGIC_1164.ALL;USE IEEE. STD_LOGIC_UNSIGNED.ALL;ENTITY dcrs ISPORT (clk,reset: IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR (7 DOWNTO 0;END dcrs;ARCHITECTURE behave OF dcrs ISBEGINPROCESS (clk,resetV ARIABLE tmp: STD_LOGIC_
3、VECTOR (7 DOWNTO 0;BEGINIF reset='0'THENtmp:="11111111"ELSIF clk'EVENT AND clk='1'THENIF tmp="00000000"THENTmp:="11111111"ELSEtmp:=tmp-1;END IF;END IF;q<=tmp;END PROCESS;END behave;3.2 三角波程序LIBRARY IEEE;USE IEEE. STD_LOGIC_1164.ALL;USE IEEE.STD_LO
4、GIC_UNSIGNED.ALL;ENTITY delta ISPORT (clk,reset: IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR (7 DOWNTO 0;END delta;ARCHITECTURE behave OF delta ISBEGINPROCESS (clk,resetV ARIABLE tmp: STD_LOGIC_VECTOR (7 DOWNTO 0;V ARIABLE a: STD_LOGIC;BEGINIF reset='0'THENtmp:="00000000"155ELSIF clk'E
5、VENT AND clk='1'THENIF a='0'THENIF tmp="11111110"THENtmp:="11111111"a:='1'ELSEtmp:=tmp+1;END IF;ELSEIF tmp="00000001"THENtmp:="00000000"a:='0'ELSETmp:=tmp-1;END IF;END IF;END IF;q<=tmp;END PROCESS;END behave;3.3 锯齿波(斜升程序LIBRA
6、RY IEEE;USE IEEE. STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY icrs ISPORT (clk,reset: IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR (7 DOWNTO 0; END icrs;ARCHITECTURE behave OF icrs ISBEGINPROCESS (clk,resetV ARIABLE tmp: STD_LOGIC_VECTOR (7 DOWNTO 0;BEGINIF reset='0'THENtmp:="00000
7、000"ELSIF clk'EVENT AND clk='1'THENIF tmp="11111111"THEN156tmp:="00000000"ELSEtmp:=tmp+1;END IF;END IF;q<=tmp;END PROCESS;END behave;3.4 阶梯波(上升程序LIBRARY IEEE;USE IEEE. STD_LOGIC_1164.ALL;USE IEEE. STD_LOGIC_UNSIGNED.ALL;ENTITY ladder_up ISPORT (clk,reset: IN S
8、TD_LOGIC;q:OUT integer RANGE 0 to 255;-STD_LOGIC_VECTOR (7 DOWNTO 0; END ladder_up;ARCHITECTURE behave OF ladder_up ISBEGINPROCESS (clk,resetV ARIABLE tmp,a: integer;-STD_LOGIC_VECTOR (7 DOWNTO 0;BEGINIF reset='0' THENtmp:=0;a:=0;ELSIF clk'EVENT AND clk='1'THENif a=255 then a:=0;
9、else a:=a+1;end if;case a iswhen 0 to 63 => tmp:=0;when 64 to 127 => tmp:=85;when 128 to 191 => tmp:=170;when 192 to 255 => tmp:=255;when others => tmp:=0;end case;END IF;q<=tmp;157END PROCESS;END behave;3.5正弦波程序LIBRARY IEEE;use ieee.std_logic_arith.all;USE IEEE.STD_LOGIC_1164.ALL;
10、USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SIN ISPORT (clk : IN STD_LOGIC;reset: IN STD_LOGIC;q: OUT STD_LOGIC_VECTOR (7 DOWNTO 0 ;END SIN;ARCHITECTURE BEHA V OF SIN ISCOMPONENT SIN_ROMPORT(address : integer range 0 to 63;inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0;END COMPONENT;SIGNAL
11、Q1 : integer range 0 to 63;BEGINPROCESS(clkBEGINif reset='0' then Q1<= 0;elsif CLK'EVENT AND CLK = '1' THENQ1<=Q1+1;END IF;END PROCESS;u1 : SIN_ROM PORT MAP(inclock=>clk, address=>Q1, q => q;END;此正弦波形的产生方法是通过调用FPGA中的LPM兆功能块实现的。LPM是参数可设置模块,通过修改LPM模块的参数,可以获得不同的逻辑功能,而
12、原理图并不改变,从而使复杂的电子设计变得简单化,设计的效率和可靠性也有了很大的提高。利用LPM产生正弦信号的原理是先把一个正弦波形按相位量化的幅值存储在ROM 里,通过查找ROM,输出相应地址里的幅值,合成一个正弦波。正弦波形数据ROM由LPM_ROM模块构成。LPM_ROM中初始化数据文件的格式为.MIF格式,可以用C语言或MATLAB生成.MIF数据文件。采用MA TLAB生成64点正弦波形数据的具体步骤如下:1581创建正弦波形数据。在MA TLAB命令窗口中输入如下命令:a=round(127*sin(0:2*pi/(26:2*pi+127'这样就可生成地址为64、最大幅值为2
13、55的正弦波形数据,数据内容为127 139 152 164 176 187 198 208 217 225 233 239 244 249 252 253 254 253 252 249 244 239 233 225 217 208 198 187 176 164 152 139 127 115 102 90 78 67 56 46 37 29 21 15 10 5 2 1 0 1 2 5 10 15 21 29 37 46 56 67 78 90 102 115。2生成.MIF文件。在QUARTUS II中选择NewOther FilesMemory Initialization Fil
14、e,选择ROM的地址数Number为64,数据宽Word size取8位,即创建了一个.MIF的数据表格,将MATLAB中生成的64点正弦波数据复制到此表格中,保存并命名为SIN_ROM,则可以创建一个.MIF文件,该MIF文件内容如下:WIDTH=8;DEPTH=64;ADDRESS_RADIX=UNS;DA TA_RADIX=UNS;CONTENT BEGIN0 : 127;1 : 139;2 : 152;3 : 164;4 : 176;5 : 187;6 : 198;7 : 208;8 : 217;9 : 225;10 : 233;11 : 239;12 : 244;13 : 249;1
15、4 : 252;15 : 253;16 : 254;17 : 253;18 : 252;19 : 249;20 : 244;15921 : 239;22 : 233;23 : 225;24 : 217;25 : 208;26 : 198;27 : 187;28 : 176;29 : 164;30 : 152;31 : 139;32 : 127;33 : 115;34 : 102;35 : 90;36 : 78;37 : 67;38 : 56;39 : 46;40 : 37;41 : 29;42 : 21;43 : 15;44 : 10;45 : 5;46 : 2;47 : 1;48 : 0;4
16、9 : 1;50 : 2;51 : 5;52 : 10;53 : 15;54 : 21;55 : 29;56 : 37;57 : 46;58 : 56;59 : 67; 16060 : 78;61 : 90;62 : 102;63 : 115;END;3定制LPM_ROM模块。在QUARTUS II中选择Tool sMega Wizard Plug-In ManagerCreate a new custom megafunction vatiation 定制一个新的模块,在左栏选择Memory Compiler项下的ROM:1-PORT,再在右栏选择器件系列为ACEX1K,器件描述语言为VHD
17、L,输入ROM文件存放的路径和文件名,然后单击Next;选择ROM数据位为8位,地址数为64,再次单击Next (这里要注意的是去掉输出数据时钟锁存信号前的勾;在File name 栏选择指定路径所保存的SIN_ROM.MIF文件,继续单击Next,再单击Finish后完成了SIN_ROM的定制,之后会自动生成一个用VHDL语言描述的SIN_ROM模块,以便在主程序中调用。3.6方波程序LIBRARY IEEE;USE IEEE. STD_LOGIC_1164.ALL;ENTITY square ISPORT (clk,reset: IN STD_LOGIC;q:OUT INTEGER RAN
18、GE 0 TO 255;END square;ARCHITECTURE behave OF square ISSIGNAL a: BIT;BEGINPROCESS (clk,resetV ARIABLE cnt: INTEGER RANGE 0 TO 63;BEGINIF reset='0'THENA<='0'ELSIF clk'EVENT AND clk='1'THENIF cnt<63 THENCnt:=cnt+1;ELSEcnt:=0;a<=NOT a;END IF;END IF;161END PROCESS;Pr
19、ocess (clk,aBEGINIF clk'EVENT AND clk='1'THENIF a='1'THENQ<=255;ELSEQ<=0;END IF;END IF;END PROCESS;END behave;3.7 梯形波程序LIBRARY IEEE;USE IEEE. STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY trap ISPORT (clk,reset: IN STD_LOGIC;q:OUT integer RANGE 0 to 255 ;-STD_LO
20、GIC_VECTOR (7 DOWNTO 0; END trap;ARCHITECTURE behave OF trap ISBEGINPROCESS (clk,resetV ARIABLE tmp,a: integer RANGE 0 to 255;-STD_LOGIC_VECTOR (7 DOWNTO 0;BEGINIF reset='0' THENtmp:=0;a:=0;ELSIF clk'EVENT AND clk='1'THENif a=255 then a:=0;tmp:=0;else a:=a+1;end if;case a iswhen
21、1 to 63 => tmp:=tmp+4;when 64 to 127 => tmp:=255;when 128 to 190 => tmp:= tmp-4;162when 192 to 255 => tmp:=0;when others => tmp:=0;end case;END IF;q<=tmp;END PROCESS;END behave;3.8 双向阶梯波程序LIBRARY IEEE;USE IEEE. STD_LOGIC_1164.ALL;USE IEEE. STD_LOGIC_UNSIGNED.ALL;ENTITY Ladder_down-
22、up ISPORT (clk,reset: IN STD_LOGIC;q:OUT integer range 0 to 255;-STD_LOGIC_VECTOR (7 DOWNTO 0;END Ladder_down-up;ARCHITECTURE behave OF Ladder_down-up ISBEGINPROCESS (clk,resetV ARIABLE tmp,a: integer range 0 to 255;-STD_LOGIC_VECTOR (7 DOWNTO 0;BEGINIF reset='0' THENtmp:=0;a:=0;ELSIF clk
23、9;EVENT AND clk='1'THENif a=255 then a:=0;else a:=a+1;end if;case a iswhen 0 to 31 => tmp:=0;when 32 to 63 => tmp:=85;when 64 to 95 => tmp:=170;when 96 to 127 => tmp:=255;when 128 to 159 => tmp:=255;when 160 to 191 => tmp:=170;when 192 to 223 => tmp:=85;when 224 to 255 =
24、> tmp:=0;when others => tmp:=0;163end case;END IF;q<=tmp;END PROCESS;END behave;3.9八选一数据选择器程序LIBRARY IEEE;USE IEEE. STD_LOGIC_1164.ALL;ENTITY MUX81a ISPORT (sel: IN STD_LOGIC_VECTOR (2 DOWNTO 0;d0,d1,d2,d3,d4,d5,d6,d7: IN STD_LOGIC_VECTOR(7 DOWNTO 0;q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0;END MUX81a;ARCHITECTURE behave O
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025包头市喜桂图文化旅游开发有限公司招聘讲解员15人笔试参考题库附带答案详解
- 2025年企业安全培训考试试题附参考答案(完整版)
- 2025班组安全培训考试试题答案a4版
- 2025生产经营单位安全培训考试试题附参考答案【黄金题型】
- 2025无线网络基站租赁合同
- 2025合同自我评估示范文
- 2025上海市新全日制劳动合同书
- 2025复印机购销合同 复印机购销合同范本
- 2025建筑材料供货合同模板
- 2025年房屋买卖合同范本2
- 建筑工地物业服务合同模板7篇
- 《计算机发展史》课件
- 2025年安徽芜湖市阳光电力维修工程有限责任公司招聘笔试参考题库附带答案详解
- 2024-2025学年统编版语文八年级上册期末易错题:现代文阅读(记叙文)(含答案)
- 学校食堂每日食品安全检查记录台账(日管控)
- 《ERP总体介绍》课件
- 企业利他培训
- DB32-T 4569-2023 发泡陶瓷保温板 保温系统应用技术规程
- 2025年职教高考对口升学 护理类 专业综合模拟卷(4)(四川适用)(原卷版)
- 酒业销售有限公司组织架构及岗位职责
- 农村街道电网改造合同范例
评论
0/150
提交评论